mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Avoid too much back and forth throuhg FFI by lazily fetching and storing timeline item properties
This commit is contained in:
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user