mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Delivery Status Redesign (#931)
This commit is contained in:
+1
-1
@@ -22,6 +22,6 @@ struct RoomTimelineItemProperties: Hashable {
|
||||
var isEdited = false
|
||||
/// The aggregated reactions that have been sent for this item.
|
||||
var reactions: [AggregatedReaction] = []
|
||||
/// The delivery status for this item.
|
||||
/// The delivery status for this item. If a sent message is echoed the value is nil.
|
||||
var deliveryStatus: TimelineItemDeliveryStatus?
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ enum TimelineItemProxy {
|
||||
/// The delivery status for the item.
|
||||
enum TimelineItemDeliveryStatus: Hashable {
|
||||
case sending
|
||||
case sent(elapsedTime: TimeInterval)
|
||||
case sent
|
||||
case sendingFailed
|
||||
}
|
||||
|
||||
@@ -54,7 +54,9 @@ struct EventTimelineItemProxy {
|
||||
}
|
||||
|
||||
var deliveryStatus: TimelineItemDeliveryStatus? {
|
||||
guard let localSendState = item.localSendState() else { return nil }
|
||||
guard let localSendState = item.localSendState() else {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch localSendState {
|
||||
case .notSentYet:
|
||||
@@ -62,7 +64,7 @@ struct EventTimelineItemProxy {
|
||||
case .sendingFailed:
|
||||
return .sendingFailed
|
||||
case .sent:
|
||||
return .sent(elapsedTime: Date().timeIntervalSince1970 - timestamp.timeIntervalSince1970)
|
||||
return .sent
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,6 +111,10 @@ struct EventTimelineItemProxy {
|
||||
let debugInfo = item.debugInfo()
|
||||
return TimelineItemDebugInfo(model: debugInfo.model, originalJSON: debugInfo.originalJson, latestEditJSON: debugInfo.latestEditJson)
|
||||
}
|
||||
|
||||
var readReceipts: [String: Receipt] {
|
||||
item.readReceipts()
|
||||
}
|
||||
}
|
||||
|
||||
extension TimelineItemContentKind {
|
||||
@@ -162,3 +168,12 @@ struct TimelineItemDebugInfo: Identifiable, CustomStringConvertible {
|
||||
return String(data: jsonData, encoding: .utf8)
|
||||
}
|
||||
}
|
||||
|
||||
extension Receipt {
|
||||
var dateTimestamp: Date? {
|
||||
guard let timestamp else {
|
||||
return nil
|
||||
}
|
||||
return Date(timeIntervalSince1970: TimeInterval(timestamp / 1000))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ enum RoomTimelineViewProvider: Identifiable, Hashable {
|
||||
fatalError("Unknown timeline item")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var id: String {
|
||||
switch self {
|
||||
case .text(let item as RoomTimelineItemProtocol, _),
|
||||
@@ -100,6 +100,26 @@ enum RoomTimelineViewProvider: Identifiable, Hashable {
|
||||
return item.id
|
||||
}
|
||||
}
|
||||
|
||||
var isUnsent: Bool {
|
||||
switch self {
|
||||
case .text(let item as EventBasedTimelineItemProtocol, _),
|
||||
.image(let item as EventBasedTimelineItemProtocol, _),
|
||||
.video(let item as EventBasedTimelineItemProtocol, _),
|
||||
.audio(let item as EventBasedTimelineItemProtocol, _),
|
||||
.file(let item as EventBasedTimelineItemProtocol, _),
|
||||
.emote(let item as EventBasedTimelineItemProtocol, _),
|
||||
.notice(let item as EventBasedTimelineItemProtocol, _),
|
||||
.redacted(let item as EventBasedTimelineItemProtocol, _),
|
||||
.encrypted(let item as EventBasedTimelineItemProtocol, _),
|
||||
.sticker(let item as EventBasedTimelineItemProtocol, _),
|
||||
.unsupported(let item as EventBasedTimelineItemProtocol, _),
|
||||
.state(let item as EventBasedTimelineItemProtocol, _):
|
||||
return item.properties.deliveryStatus == .sending || item.properties.deliveryStatus == .sendingFailed
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/// Whether or not it is possible to send a reaction to this timeline item.
|
||||
var isReactable: Bool {
|
||||
|
||||
Reference in New Issue
Block a user