diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift index b48b47c65..7ed0c9148 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift @@ -60,6 +60,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol { } func stop() { + parameters.roomProxy.removeTimelineListener() viewModel.context.send(viewAction: .markRoomAsRead) } diff --git a/ElementX/Sources/Services/Room/MockRoomProxy.swift b/ElementX/Sources/Services/Room/MockRoomProxy.swift index 916282a52..530de98ae 100644 --- a/ElementX/Sources/Services/Room/MockRoomProxy.swift +++ b/ElementX/Sources/Services/Room/MockRoomProxy.swift @@ -44,12 +44,12 @@ struct MockRoomProxy: RoomProxyProtocol { .failure(.failedRetrievingMemberAvatarURL) } - func startLiveEventListener() { } - func addTimelineListener(listener: TimelineListener) -> Result<[TimelineItem], RoomProxyError> { .failure(.failedAddingTimelineListener) } + func removeTimelineListener() { } + func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result { .failure(.failedPaginatingBackwards) } diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index 3a3f81a5e..35f8fead3 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -34,11 +34,7 @@ class RoomProxy: RoomProxyProtocol { private(set) var displayName: String? private var timelineObservationToken: StoppableSpawn? - - deinit { - timelineObservationToken?.cancel() - } - + init(slidingSyncRoom: SlidingSyncRoomProtocol, room: RoomProtocol, backgroundTaskService: BackgroundTaskServiceProtocol) { @@ -151,6 +147,11 @@ class RoomProxy: RoomProxyProtocol { } } + func removeTimelineListener() { + timelineObservationToken?.cancel() + timelineObservationToken = nil + } + func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result { do { try await Task.dispatch(on: .global()) { diff --git a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift index a4f0bd78c..112c15c47 100644 --- a/ElementX/Sources/Services/Room/RoomProxyProtocol.swift +++ b/ElementX/Sources/Services/Room/RoomProxyProtocol.swift @@ -60,6 +60,8 @@ protocol RoomProxyProtocol { func addTimelineListener(listener: TimelineListener) -> Result<[TimelineItem], RoomProxyError> + func removeTimelineListener() + func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result func sendReadReceipt(for eventID: String) async -> Result