Bump the RustSDK to v1.0.4, adopt new heroes and backpagination status APIs

This commit is contained in:
Stefan Ceriu
2024-05-27 17:23:44 +03:00
committed by Stefan Ceriu
parent e93e75778a
commit ca16f63483
5 changed files with 18 additions and 27 deletions
@@ -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)
}
}