Adopt the new latest event API. (#4779)

This commit is contained in:
Doug
2025-11-25 11:52:48 +00:00
committed by GitHub
parent 08514917fe
commit f2607affd2
23 changed files with 321 additions and 139 deletions
@@ -16,15 +16,19 @@ struct RoomEventStringBuilder {
let shouldPrefixSenderName: Bool
func buildAttributedString(for eventItemProxy: EventTimelineItemProxy) -> AttributedString? {
let sender = eventItemProxy.sender
let isOutgoing = eventItemProxy.isOwn
buildAttributedString(for: eventItemProxy.content,
sender: eventItemProxy.sender,
isOutgoing: eventItemProxy.isOwn)
}
func buildAttributedString(for content: TimelineItemContent, sender: TimelineItemSender, isOutgoing: Bool) -> AttributedString? {
let displayName = if shouldDisambiguateDisplayNames {
sender.disambiguatedDisplayName ?? sender.id
} else {
sender.displayName ?? sender.id
}
switch eventItemProxy.content {
switch content {
case .msgLike(let messageLikeContent):
switch messageLikeContent.kind {
case .message(let messageContent):
@@ -230,10 +230,10 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
return updatedItems
}
private func fetchRoomDetails(from room: Room) -> (roomInfo: RoomInfo?, latestEvent: EventTimelineItem?) {
private func fetchRoomDetails(from room: Room) -> (roomInfo: RoomInfo?, latestEvent: LatestEventValue?) {
class FetchResult {
var roomInfo: RoomInfo?
var latestEvent: EventTimelineItem?
var latestEvent: LatestEventValue?
}
let semaphore = DispatchSemaphore(value: 0)
@@ -241,7 +241,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
Task {
do {
result.latestEvent = await room.latestEvent()
result.latestEvent = await room.newLatestEvent()
result.roomInfo = try await room.roomInfo()
} catch {
MXLog.error("Failed fetching room info with error: \(error)")
@@ -263,9 +263,18 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
var lastMessageDate: Date?
if let latestRoomMessage = roomDetails.latestEvent {
let lastMessage = EventTimelineItemProxy(item: latestRoomMessage, uniqueID: .init("0"))
lastMessageDate = lastMessage.timestamp
attributedLastMessage = eventStringBuilder.buildAttributedString(for: lastMessage)
switch latestRoomMessage {
case .local(let timestamp, let senderID, let profile, let content, _):
let sender = TimelineItemSender(senderID: senderID, senderProfile: profile)
attributedLastMessage = eventStringBuilder.buildAttributedString(for: content, sender: sender, isOutgoing: true)
lastMessageDate = Date(timeIntervalSince1970: TimeInterval(timestamp / 1000))
case .remote(let timestamp, let senderID, let isOwn, let profile, let content):
let sender = TimelineItemSender(senderID: senderID, senderProfile: profile)
attributedLastMessage = eventStringBuilder.buildAttributedString(for: content, sender: sender, isOutgoing: isOwn)
lastMessageDate = Date(timeIntervalSince1970: TimeInterval(timestamp / 1000))
case .none:
break
}
}
var inviterProxy: RoomMemberProxyProtocol?