mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Bump the RustSDK to v1.0.4, adopt new heroes and backpagination status APIs
This commit is contained in:
committed by
Stefan Ceriu
parent
e93e75778a
commit
ca16f63483
@@ -138,7 +138,8 @@ class RoomProxy: RoomProxyProtocol {
|
||||
RequiredState(key: "m.room.avatar", value: ""),
|
||||
RequiredState(key: "m.room.canonical_alias", value: ""),
|
||||
RequiredState(key: "m.room.join_rules", value: "")],
|
||||
timelineLimit: UInt32(SlidingSyncConstants.defaultTimelineLimit))
|
||||
timelineLimit: UInt32(SlidingSyncConstants.defaultTimelineLimit),
|
||||
includeHeroes: false) // We don't need heroes here as they're already included in the `all_rooms` list
|
||||
roomListItem.subscribe(settings: settings)
|
||||
Self.subscriptionCountPerRoom[roomListItem.id()] = (Self.subscriptionCountPerRoom[roomListItem.id()] ?? 0) + 1
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ final class TimelineProxy: TimelineProxyProtocol {
|
||||
private var timelineListener: RoomTimelineListener?
|
||||
|
||||
private let backPaginationSubscriptionSubject = CurrentValueSubject<PaginationStatus, Never>(.idle)
|
||||
private let backPaginationTimelineEndSubject = CurrentValueSubject<Bool, Never>(false)
|
||||
private let forwardPaginationStatusSubject = CurrentValueSubject<PaginationStatus, Never>(.timelineEndReached)
|
||||
private let timelineUpdatesSubject = PassthroughSubject<[TimelineDiff], Never>()
|
||||
|
||||
@@ -71,20 +70,12 @@ final class TimelineProxy: TimelineProxyProtocol {
|
||||
let result = await timeline.addListener(listener: timelineListener)
|
||||
roomTimelineObservationToken = result.itemsStream
|
||||
|
||||
// Merge the subscription with the paginate method's return value.
|
||||
let backPaginationPublisher = backPaginationSubscriptionSubject
|
||||
.combineLatest(backPaginationTimelineEndSubject)
|
||||
.map { status, timelineEnd in
|
||||
timelineEnd ? .timelineEndReached : status
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
let paginationStatePublisher = backPaginationPublisher
|
||||
let paginationStatePublisher = backPaginationSubscriptionSubject
|
||||
.combineLatest(forwardPaginationStatusSubject)
|
||||
.map { PaginationState(backward: $0.0, forward: $0.1) }
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
subscribeToPagination()
|
||||
await subscribeToPagination()
|
||||
|
||||
innerTimelineProvider = await RoomTimelineProvider(currentItems: result.items,
|
||||
isLive: isLive,
|
||||
@@ -153,11 +144,9 @@ final class TimelineProxy: TimelineProxyProtocol {
|
||||
MXLog.info("Paginating backwards")
|
||||
|
||||
do {
|
||||
let timelineEndReached = try await timeline.paginateBackwards(numEvents: requestSize)
|
||||
let _ = try await timeline.paginateBackwards(numEvents: requestSize)
|
||||
MXLog.info("Finished paginating backwards")
|
||||
|
||||
backPaginationTimelineEndSubject.send(timelineEndReached)
|
||||
|
||||
return .success(())
|
||||
} catch {
|
||||
MXLog.error("Failed paginating backwards with error: \(error)")
|
||||
@@ -545,21 +534,22 @@ final class TimelineProxy: TimelineProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func subscribeToPagination() {
|
||||
private func subscribeToPagination() async {
|
||||
let backPaginationListener = RoomPaginationStatusListener { [weak self] status in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
|
||||
switch status {
|
||||
case .initial, .idle:
|
||||
backPaginationSubscriptionSubject.send(.idle)
|
||||
case .fetchingTargetEvent, .paginating:
|
||||
case .idle(let hitStartOfTimeline):
|
||||
backPaginationSubscriptionSubject.send(hitStartOfTimeline ? .timelineEndReached : .idle)
|
||||
case .paginating:
|
||||
backPaginationSubscriptionSubject.send(.paginating)
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
backPaginationStatusObservationToken = try timeline.subscribeToBackPaginationStatus(listener: backPaginationListener)
|
||||
backPaginationStatusObservationToken = try await timeline.subscribeToBackPaginationStatus(listener: backPaginationListener)
|
||||
} catch {
|
||||
MXLog.error("Failed to subscribe to back pagination status with error: \(error)")
|
||||
}
|
||||
@@ -582,13 +572,13 @@ private final class RoomTimelineListener: TimelineListener {
|
||||
}
|
||||
|
||||
private final class RoomPaginationStatusListener: PaginationStatusListener {
|
||||
private let onUpdateClosure: (PaginatorState) -> Void
|
||||
private let onUpdateClosure: (LiveBackPaginationStatus) -> Void
|
||||
|
||||
init(_ onUpdateClosure: @escaping (PaginatorState) -> Void) {
|
||||
init(_ onUpdateClosure: @escaping (LiveBackPaginationStatus) -> Void) {
|
||||
self.onUpdateClosure = onUpdateClosure
|
||||
}
|
||||
|
||||
func onUpdate(status: PaginatorState) {
|
||||
func onUpdate(status: LiveBackPaginationStatus) {
|
||||
onUpdateClosure(status)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user