Prevent race conditions when adding timeline listeners between the timeline provider and other screens

This commit is contained in:
Stefan Ceriu
2023-05-26 17:34:20 +03:00
committed by Stefan Ceriu
parent 0082aba9d4
commit 142a8d6275
4 changed files with 24 additions and 23 deletions
@@ -186,13 +186,14 @@ class RoomProxy: RoomProxyProtocol {
timelineLimit: UInt32(SlidingSyncConstants.timelinePrecachingTimelineLimit))
roomSubscriptionObservationToken = slidingSyncRoom.subscribeToRoom(settings: settings)
let listener = RoomTimelineListener { [weak self] timelineDiff in
let timelineListener = RoomTimelineListener { [weak self] timelineDiff in
self?.updatesSubject.send(timelineDiff)
}
if let result = try? slidingSyncRoom.addTimelineListener(listener: listener) {
self.timelineListener = timelineListener
if let result = try? slidingSyncRoom.addTimelineListener(listener: timelineListener) {
roomTimelineObservationToken = result.taskHandle
timelineListener = listener
Task {
await fetchMembers()
@@ -200,6 +201,7 @@ class RoomProxy: RoomProxyProtocol {
}
return .success(result.items)
} else {
self.timelineListener = nil
return .failure(.failedAddingTimelineListener)
}
}