From cc51795bf00f138c2cd727d11d8036f8bc2dcfca Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 4 Jan 2023 17:01:03 +0200 Subject: [PATCH] Enable the sliding sync timeline api. Start observing updates coming through the TimelineListener before addining a timeline listener on the Rust side --- .../Sources/Services/Room/RoomProxy.swift | 22 ++++++++----------- .../Timeline/RoomTimelineProvider.swift | 14 +++++++----- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index 64dda898b..44b9985c8 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -36,11 +36,10 @@ class RoomProxy: RoomProxyProtocol { private var backPaginationOutcome: PaginationOutcome? + private var timelineObservationToken: StoppableSpawn? + deinit { - room.removeTimeline() - - #warning("We **should** use the slidingSyncRoom but it's not working properly yet") -// slidingSyncRoom.removeTimeline() + timelineObservationToken?.cancel() } init(slidingSyncRoom: SlidingSyncRoomProtocol, @@ -131,15 +130,12 @@ class RoomProxy: RoomProxyProtocol { } func addTimelineListener(listener: TimelineListener) -> Result { - room.addTimelineListener(listener: listener) - return .success(()) - - #warning("We **should** use the slidingSyncRoom but it's not working properly yet") -// if let result = slidingSyncRoom.addTimelineListener(listener: listener), result == true { -// return .success(()) -// } else { -// return .failure(.failedAddingTimelineListener) -// } + if let token = slidingSyncRoom.addTimelineListener(listener: listener) { + timelineObservationToken = token + return .success(()) + } else { + return .failure(.failedAddingTimelineListener) + } } func paginateBackwards(count: UInt) async -> Result { diff --git a/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift b/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift index 7d85352b6..4e5427233 100644 --- a/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift +++ b/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift @@ -51,18 +51,20 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol { Task { let roomTimelineListener = RoomTimelineListener() + + roomTimelineListener + .itemsUpdatePublisher + .receive(on: DispatchQueue.main) +// .collect(.byTime(serialDispatchQueue, 0.25)) + .sink { [weak self] in self?.updateItemsWithDiffs([$0]) } + .store(in: &cancellables) + switch await roomProxy.addTimelineListener(listener: roomTimelineListener) { case .failure: MXLog.error("Failed adding timeline listener on room with identifier: \(await roomProxy.id)") default: break } - - roomTimelineListener - .itemsUpdatePublisher - .collect(.byTime(serialDispatchQueue, 0.25)) - .sink { [weak self] in self?.updateItemsWithDiffs($0) } - .store(in: &cancellables) } }