Caching the room proxies and their messages. Improved performance throughout.

This commit is contained in:
Stefan Ceriu
2022-03-31 15:37:52 +03:00
parent b50bf724a3
commit 49f7678ce8
22 changed files with 191 additions and 189 deletions
@@ -35,11 +35,13 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
guard let self = self else { return }
switch callback {
case .addedMessage:
case .updatedMessages:
self.updateTimelineItems()
}
}.store(in: &cancellables)
updateTimelineItems()
NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange), name: UIContentSizeCategory.didChangeNotification, object: nil)
}
@@ -14,7 +14,6 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
private var cancellables = Set<AnyCancellable>()
let callbacks = PassthroughSubject<RoomTimelineCallback, Never>()
private(set) var messages = [RoomMessageProtocol]()
init(roomProxy: RoomProxyProtocol) {
self.roomProxy = roomProxy
@@ -23,24 +22,24 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
guard let self = self else { return }
switch callback {
case .addedMessage(let message):
self.messages.append(message)
self.callbacks.send(.addedMessage)
case .updatedLastMessage:
break
case .updatedMessages:
self.callbacks.send(.updatedMessages)
}
}.store(in: &cancellables)
}
func paginateBackwards(_ count: UInt, callback: ((Result<([RoomMessageProtocol]), RoomTimelineError>) -> Void)?) {
func paginateBackwards(_ count: UInt, callback: ((Result<Void, RoomTimelineError>) -> Void)?) {
self.roomProxy.paginateBackwards(count: count) { result in
switch result {
case .success(let messages):
self.messages.insert(contentsOf: messages.reversed(), at: 0)
callback?(.success((self.messages)))
case .success:
callback?(.success(()))
case .failure:
callback?(.failure(.generic))
}
}
}
var messages: [RoomMessageProtocol] {
roomProxy.messages
}
}
@@ -10,7 +10,7 @@ import Foundation
import Combine
enum RoomTimelineCallback {
case addedMessage
case updatedMessages
}
enum RoomTimelineError: Error {
@@ -22,5 +22,5 @@ protocol RoomTimelineProviderProtocol {
var messages: [RoomMessageProtocol] { get }
func paginateBackwards(_ count: UInt, callback: ((Result<([RoomMessageProtocol]), RoomTimelineError>) -> Void)?)
func paginateBackwards(_ count: UInt, callback: ((Result<Void, RoomTimelineError>) -> Void)?)
}