diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index 6c3a386d9..140d9944b 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -151,10 +151,13 @@ class RoomProxy: RoomProxyProtocol, Equatable { return } - let messages = backwardStream.paginateBackwards(count: UInt64(count)).map { message in + var messages = backwardStream.paginateBackwards(count: UInt64(count)).map { message in self.messageFactory.buildRoomMessageFrom(message) } + // FIXME: Something wrong on the Rust side and these come in out of order sometimes. + messages = messages.sorted(by: { $0.originServerTs < $1.originServerTs }) + DispatchQueue.main.async { callback?(.success(messages)) if self.lastMessage == nil { diff --git a/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift b/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift index 9f945f59a..b435e41e5 100644 --- a/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift +++ b/ElementX/Sources/Services/Timeline/RoomTimelineProvider.swift @@ -36,7 +36,7 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol { self.roomProxy.paginateBackwards(count: count) { result in switch result { case .success(let messages): - self.messages.insert(contentsOf: messages.reversed(), at: 0) + self.messages.insert(contentsOf: messages, at: 0) callback?(.success((self.messages))) case .failure: callback?(.failure(.generic))