Fixes #676 - Fixes regression on updating room list states when using data from the cold cache

This commit is contained in:
Stefan Ceriu
2023-03-22 13:34:24 +02:00
committed by Stefan Ceriu
parent fe72d34d11
commit e696280e69
3 changed files with 26 additions and 10 deletions
@@ -51,9 +51,10 @@ class ClientProxy: ClientProxyProtocol {
private let clientQueue: DispatchQueue private let clientQueue: DispatchQueue
private var slidingSyncObserverToken: TaskHandle? private var slidingSyncObserverToken: TaskHandle?
private var slidingSync: SlidingSync? private var slidingSync: SlidingSyncProtocol?
var visibleRoomsSlidingSyncView: SlidingSyncList? var visibleRoomsSlidingSyncView: SlidingSyncList?
var visibleRoomsViewProxy: SlidingSyncViewProxy?
var visibleRoomsSummaryProvider: RoomSummaryProviderProtocol? var visibleRoomsSummaryProvider: RoomSummaryProviderProtocol?
var allRoomsSlidingSyncView: SlidingSyncList? var allRoomsSlidingSyncView: SlidingSyncList?
@@ -266,25 +267,30 @@ class ClientProxy: ClientProxyProtocol {
.sendUpdatesForItems(enable: true) .sendUpdatesForItems(enable: true)
.build() .build()
// List observers need to be setup before calling build() on the SlidingSyncBuilder otherwise
// cold cache state and count updates will be lost
buildAndConfigureVisibleRoomsSlidingSyncView(visibleRoomsView: visibleRoomsView)
let slidingSync = try slidingSyncBuilder let slidingSync = try slidingSyncBuilder
.addList(v: visibleRoomsView) .addList(v: visibleRoomsView)
.withCommonExtensions() .withCommonExtensions()
.coldCache(name: "ElementX") .coldCache(name: "ElementX")
.build() .build()
visibleRoomsViewProxy?.setSlidingSync(slidingSync: slidingSync)
slidingSync.setObserver(observer: WeakClientProxyWrapper(clientProxy: self)) slidingSync.setObserver(observer: WeakClientProxyWrapper(clientProxy: self))
self.slidingSync = slidingSync self.slidingSync = slidingSync
buildAndConfigureVisibleRoomsSlidingSyncView(slidingSync: slidingSync, visibleRoomsView: visibleRoomsView) buildAndConfigureAllRoomsSlidingSyncView()
buildAndConfigureAllRoomsSlidingSyncView(slidingSync: slidingSync)
} catch { } catch {
MXLog.error("Failed building sliding sync with error: \(error)") MXLog.error("Failed building sliding sync with error: \(error)")
} }
} }
private func buildAndConfigureVisibleRoomsSlidingSyncView(slidingSync: SlidingSyncProtocol, visibleRoomsView: SlidingSyncList) { private func buildAndConfigureVisibleRoomsSlidingSyncView(visibleRoomsView: SlidingSyncList) {
let visibleRoomsViewProxy = SlidingSyncViewProxy(slidingSync: slidingSync, slidingSyncView: visibleRoomsView) let visibleRoomsViewProxy = SlidingSyncViewProxy(slidingSyncView: visibleRoomsView)
visibleRoomsSummaryProvider = RoomSummaryProvider(slidingSyncViewProxy: visibleRoomsViewProxy, visibleRoomsSummaryProvider = RoomSummaryProvider(slidingSyncViewProxy: visibleRoomsViewProxy,
eventStringBuilder: RoomEventStringBuilder(stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID))) eventStringBuilder: RoomEventStringBuilder(stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID)))
@@ -303,9 +309,11 @@ class ClientProxy: ClientProxyProtocol {
self?.configureViewsPostInitialSync() self?.configureViewsPostInitialSync()
self?.visibleRoomsViewProxyStateObservationToken = nil self?.visibleRoomsViewProxyStateObservationToken = nil
} }
self.visibleRoomsViewProxy = visibleRoomsViewProxy
} }
private func buildAndConfigureAllRoomsSlidingSyncView(slidingSync: SlidingSyncProtocol) { private func buildAndConfigureAllRoomsSlidingSyncView() {
guard allRoomsSlidingSyncView == nil else { guard allRoomsSlidingSyncView == nil else {
fatalError("This shouldn't be called more than once") fatalError("This shouldn't be called more than once")
} }
@@ -321,7 +329,11 @@ class ClientProxy: ClientProxyProtocol {
.sendUpdatesForItems(enable: true) .sendUpdatesForItems(enable: true)
.build() .build()
let allRoomsViewProxy = SlidingSyncViewProxy(slidingSync: slidingSync, slidingSyncView: allRoomsView) let allRoomsViewProxy = SlidingSyncViewProxy(slidingSyncView: allRoomsView)
if let slidingSync {
allRoomsViewProxy.setSlidingSync(slidingSync: slidingSync)
}
allRoomsSummaryProvider = RoomSummaryProvider(slidingSyncViewProxy: allRoomsViewProxy, allRoomsSummaryProvider = RoomSummaryProvider(slidingSyncViewProxy: allRoomsViewProxy,
eventStringBuilder: RoomEventStringBuilder(stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID))) eventStringBuilder: RoomEventStringBuilder(stateEventStringBuilder: RoomStateEventStringBuilder(userID: userID)))
@@ -51,7 +51,7 @@ private class SlidingSyncViewObserver: SlidingSyncListRoomListObserver, SlidingS
} }
class SlidingSyncViewProxy { class SlidingSyncViewProxy {
private let slidingSync: SlidingSyncProtocol private var slidingSync: SlidingSyncProtocol!
private let slidingSyncView: SlidingSyncListProtocol private let slidingSyncView: SlidingSyncListProtocol
private var listUpdateObserverToken: TaskHandle? private var listUpdateObserverToken: TaskHandle?
@@ -71,8 +71,7 @@ class SlidingSyncViewProxy {
countUpdateObserverToken?.cancel() countUpdateObserverToken?.cancel()
} }
init(slidingSync: SlidingSyncProtocol, slidingSyncView: SlidingSyncListProtocol) { init(slidingSyncView: SlidingSyncListProtocol) {
self.slidingSync = slidingSync
self.slidingSyncView = slidingSyncView self.slidingSyncView = slidingSyncView
let slidingSyncViewObserver = SlidingSyncViewObserver() let slidingSyncViewObserver = SlidingSyncViewObserver()
@@ -94,6 +93,10 @@ class SlidingSyncViewProxy {
countUpdateObserverToken = slidingSyncView.observeRoomsCount(observer: slidingSyncViewObserver) countUpdateObserverToken = slidingSyncView.observeRoomsCount(observer: slidingSyncViewObserver)
} }
func setSlidingSync(slidingSync: SlidingSyncProtocol) {
self.slidingSync = slidingSync
}
func currentRoomsList() -> [RoomListEntry] { func currentRoomsList() -> [RoomListEntry] {
slidingSyncView.currentRoomsList() slidingSyncView.currentRoomsList()
} }
+1
View File
@@ -0,0 +1 @@
Fixed room list not loading in offline mode