mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Adopt batched timeline diffs and other RustSDK changes
This commit is contained in:
committed by
Stefan Ceriu
parent
ebb7436927
commit
28c2490910
@@ -747,11 +747,11 @@ class RoomProxyMock: RoomProxyProtocol {
|
||||
set(value) { underlyingActiveMembersCount = value }
|
||||
}
|
||||
var underlyingActiveMembersCount: Int!
|
||||
var updatesPublisher: AnyPublisher<TimelineDiff, Never> {
|
||||
var updatesPublisher: AnyPublisher<[TimelineDiff], Never> {
|
||||
get { return underlyingUpdatesPublisher }
|
||||
set(value) { underlyingUpdatesPublisher = value }
|
||||
}
|
||||
var underlyingUpdatesPublisher: AnyPublisher<TimelineDiff, Never>!
|
||||
var underlyingUpdatesPublisher: AnyPublisher<[TimelineDiff], Never>!
|
||||
var timelineProvider: RoomTimelineProviderProtocol {
|
||||
get { return underlyingTimelineProvider }
|
||||
set(value) { underlyingTimelineProvider = value }
|
||||
|
||||
@@ -27,7 +27,7 @@ struct InvitesScreenCell: View {
|
||||
|
||||
var body: some View {
|
||||
HStack(alignment: .top, spacing: 16) {
|
||||
LoadableAvatarImage(url: mainAvatarURL,
|
||||
LoadableAvatarImage(url: invite.roomDetails.avatarURL,
|
||||
name: title,
|
||||
contentID: invite.roomDetails.id,
|
||||
avatarSize: .custom(52),
|
||||
@@ -119,12 +119,7 @@ struct InvitesScreenCell: View {
|
||||
.fill(Color.compound.borderDisabled)
|
||||
.frame(height: 1 / UIScreen.main.scale)
|
||||
}
|
||||
|
||||
#warning("Return just `roomDetails.avatarURL` when this logic is implemented in the rust sdk")
|
||||
private var mainAvatarURL: URL? {
|
||||
invite.isDirect ? invite.inviter?.avatarURL : invite.roomDetails.avatarURL
|
||||
}
|
||||
|
||||
|
||||
private var title: String {
|
||||
invite.roomDetails.name
|
||||
}
|
||||
|
||||
@@ -88,7 +88,12 @@ struct NotificationItemProxy: NotificationItemProxyProtocol {
|
||||
}
|
||||
|
||||
var senderID: String {
|
||||
notificationItem.senderInfo.userId
|
||||
switch notificationItem.event {
|
||||
case .timeline(let event):
|
||||
return event.senderId()
|
||||
case .invite(let senderID):
|
||||
return senderID
|
||||
}
|
||||
}
|
||||
|
||||
var roomDisplayName: String {
|
||||
|
||||
@@ -45,8 +45,8 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
|
||||
private var timelineListener: RoomTimelineListener?
|
||||
private let updatesSubject = PassthroughSubject<TimelineDiff, Never>()
|
||||
var updatesPublisher: AnyPublisher<TimelineDiff, Never> {
|
||||
private let updatesSubject = PassthroughSubject<[TimelineDiff], Never>()
|
||||
var updatesPublisher: AnyPublisher<[TimelineDiff], Never> {
|
||||
updatesSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
@@ -80,8 +80,8 @@ class RoomProxy: RoomProxyProtocol {
|
||||
timelineLimit: UInt32(SlidingSyncConstants.defaultTimelineLimit))
|
||||
roomListItem.subscribe(settings: settings)
|
||||
|
||||
let timelineListener = RoomTimelineListener { [weak self] timelineDiff in
|
||||
self?.updatesSubject.send(timelineDiff)
|
||||
let timelineListener = RoomTimelineListener { [weak self] timelineDiffs in
|
||||
self?.updatesSubject.send(timelineDiffs)
|
||||
}
|
||||
|
||||
self.timelineListener = timelineListener
|
||||
@@ -691,13 +691,13 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
|
||||
private final class RoomTimelineListener: TimelineListener {
|
||||
private let onUpdateClosure: (TimelineDiff) -> Void
|
||||
private let onUpdateClosure: ([TimelineDiff]) -> Void
|
||||
|
||||
init(_ onUpdateClosure: @escaping (TimelineDiff) -> Void) {
|
||||
init(_ onUpdateClosure: @escaping ([TimelineDiff]) -> Void) {
|
||||
self.onUpdateClosure = onUpdateClosure
|
||||
}
|
||||
|
||||
func onUpdate(diff: TimelineDiff) {
|
||||
func onUpdate(diff: [TimelineDiff]) {
|
||||
onUpdateClosure(diff)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ protocol RoomProxyProtocol {
|
||||
|
||||
/// Publishes the room's updates.
|
||||
/// The thread on which this publisher sends the output isn't defined.
|
||||
var updatesPublisher: AnyPublisher<TimelineDiff, Never> { get }
|
||||
var updatesPublisher: AnyPublisher<[TimelineDiff], Never> { get }
|
||||
|
||||
var timelineProvider: RoomTimelineProviderProtocol { get }
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
|
||||
}
|
||||
|
||||
init(currentItems: [TimelineItem],
|
||||
updatePublisher: AnyPublisher<TimelineDiff, Never>,
|
||||
updatePublisher: AnyPublisher<[TimelineDiff], Never>,
|
||||
backPaginationStatePublisher: AnyPublisher<BackPaginationStatus, Never>) {
|
||||
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomtimelineprovider", qos: .utility)
|
||||
itemProxiesSubject = CurrentValueSubject<[TimelineItemProxy], Never>(currentItems.map(TimelineItemProxy.init))
|
||||
@@ -49,7 +49,7 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
|
||||
itemProxiesSubject.send(itemProxies)
|
||||
|
||||
updatePublisher
|
||||
.collect(.byTime(serialDispatchQueue, 0.1))
|
||||
.receive(on: serialDispatchQueue)
|
||||
.sink { [weak self] in self?.updateItemsWithDiffs($0) }
|
||||
.store(in: &cancellables)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user