mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
Fixes #676 - Fixes regression on updating room list states when using data from the cold cache
This commit is contained in:
committed by
Stefan Ceriu
parent
fe72d34d11
commit
e696280e69
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Fixed room list not loading in offline mode
|
||||||
Reference in New Issue
Block a user