Make room proxy unsubscriptions explicit. Fixes problems in which creating and deallocating room proxies would unexpectedly unsubscribe other proxies.

This commit is contained in:
Stefan Ceriu
2024-01-17 11:47:17 +02:00
parent 922eca0ae5
commit 9bb9c8b31e
4 changed files with 24 additions and 5 deletions
@@ -58,7 +58,12 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
actionsSubject.eraseToAnyPublisher()
}
private var roomProxy: RoomProxyProtocol?
private var roomProxy: RoomProxyProtocol? {
didSet {
oldValue?.unsubscribeFromUpdates()
}
}
private var timelineController: RoomTimelineControllerProtocol?
init(userSession: UserSessionProtocol,
@@ -1864,6 +1864,18 @@ class RoomProxyMock: RoomProxyProtocol {
subscribeForUpdatesCallsCount += 1
await subscribeForUpdatesClosure?()
}
//MARK: - unsubscribeFromUpdates
var unsubscribeFromUpdatesCallsCount = 0
var unsubscribeFromUpdatesCalled: Bool {
return unsubscribeFromUpdatesCallsCount > 0
}
var unsubscribeFromUpdatesClosure: (() -> Void)?
func unsubscribeFromUpdates() {
unsubscribeFromUpdatesCallsCount += 1
unsubscribeFromUpdatesClosure?()
}
//MARK: - redact
var redactCallsCount = 0
@@ -51,10 +51,6 @@ class RoomProxy: RoomProxyProtocol {
room.ownUserId()
}
deinit {
roomListItem.unsubscribe()
}
init(roomListItem: RoomListItemProtocol,
room: RoomProtocol,
backgroundTaskService: BackgroundTaskServiceProtocol) async {
@@ -89,6 +85,10 @@ class RoomProxy: RoomProxyProtocol {
subscribeToRoomStateUpdates()
}
func unsubscribeFromUpdates() {
roomListItem.unsubscribe()
}
lazy var id: String = room.id()
@@ -69,6 +69,8 @@ protocol RoomProxyProtocol {
func subscribeForUpdates() async
func unsubscribeFromUpdates()
func redact(_ eventID: String) async -> Result<Void, RoomProxyError>
func reportContent(_ eventID: String, reason: String?) async -> Result<Void, RoomProxyError>