Avoid too much back and forth throuhg FFI by lazily fetching and storing timeline item properties

This commit is contained in:
Stefan Ceriu
2023-09-19 09:03:25 +03:00
committed by Stefan Ceriu
parent cbee2a9860
commit d3b21e745f
@@ -63,7 +63,7 @@ enum TimelineItemDeliveryStatus: Hashable {
} }
/// A light wrapper around event timeline items returned from Rust. /// A light wrapper around event timeline items returned from Rust.
struct EventTimelineItemProxy { class EventTimelineItemProxy {
let item: MatrixRustSDK.EventTimelineItem let item: MatrixRustSDK.EventTimelineItem
let id: TimelineItemIdentifier let id: TimelineItemIdentifier
@@ -72,7 +72,7 @@ struct EventTimelineItemProxy {
self.id = TimelineItemIdentifier(timelineID: String(id), eventID: item.eventId(), transactionID: item.transactionId()) self.id = TimelineItemIdentifier(timelineID: String(id), eventID: item.eventId(), transactionID: item.transactionId())
} }
var deliveryStatus: TimelineItemDeliveryStatus? { lazy var deliveryStatus: TimelineItemDeliveryStatus? = {
guard let localSendState = item.localSendState() else { guard let localSendState = item.localSendState() else {
return nil return nil
} }
@@ -86,25 +86,17 @@ struct EventTimelineItemProxy {
case .sent: case .sent:
return .sent return .sent
} }
} }()
var isRoomState: Bool { lazy var isRoomState = content.kind().isRoomState
content.kind().isRoomState
}
var content: TimelineItemContent { lazy var content = item.content()
item.content()
}
var isOwn: Bool { lazy var isOwn = item.isOwn()
item.isOwn()
}
var isEditable: Bool { lazy var isEditable = item.isEditable()
item.isEditable()
}
var sender: TimelineItemSender { lazy var sender: TimelineItemSender = {
let profile = item.senderProfile() let profile = item.senderProfile()
switch profile { switch profile {
@@ -117,24 +109,18 @@ struct EventTimelineItemProxy {
displayName: nil, displayName: nil,
avatarURL: nil) avatarURL: nil)
} }
} }()
var reactions: [Reaction] { lazy var reactions = item.reactions()
item.reactions()
}
var timestamp: Date { lazy var timestamp = Date(timeIntervalSince1970: TimeInterval(item.timestamp() / 1000))
Date(timeIntervalSince1970: TimeInterval(item.timestamp() / 1000))
}
var debugInfo: TimelineItemDebugInfo { lazy var debugInfo: TimelineItemDebugInfo = {
let debugInfo = item.debugInfo() let debugInfo = item.debugInfo()
return TimelineItemDebugInfo(model: debugInfo.model, originalJSON: debugInfo.originalJson, latestEditJSON: debugInfo.latestEditJson) return TimelineItemDebugInfo(model: debugInfo.model, originalJSON: debugInfo.originalJson, latestEditJSON: debugInfo.latestEditJson)
} }()
var readReceipts: [String: Receipt] { lazy var readReceipts = item.readReceipts()
item.readReceipts()
}
} }
extension TimelineItemContentKind { extension TimelineItemContentKind {