App icon, group member annotations, variable spacing
This commit is contained in:
@@ -13,15 +13,25 @@ extension TranscriptView.ViewModel
|
||||
internal func rebuildDisplayItems(animated: Bool = false) {
|
||||
var displayItems: [DisplayItem] = []
|
||||
var lastDate: Date = .distantPast
|
||||
var lastSender: Display.Sender? = nil
|
||||
|
||||
let client = XPCClient()
|
||||
let dateAnnotationTimeInterval: TimeInterval = 60 * 60 * 30 // 30m
|
||||
let isGroupChat = displayedConversation?.isGroupChat ?? false
|
||||
let dateAnnotationTimeInterval: TimeInterval = 60 * 30
|
||||
for message in messages {
|
||||
if message.date.timeIntervalSince(lastDate) > dateAnnotationTimeInterval {
|
||||
lastDate = message.date
|
||||
if message.sender != lastSender {
|
||||
displayItems.append(.spacer(15.0, message.id))
|
||||
}
|
||||
|
||||
let isPastDateThreshold = message.date.timeIntervalSince(lastDate) > dateAnnotationTimeInterval
|
||||
if isPastDateThreshold {
|
||||
displayItems.append(.date(message.date))
|
||||
}
|
||||
|
||||
if isGroupChat && !message.sender.isMe && (isPastDateThreshold || message.sender != lastSender) {
|
||||
displayItems.append(.senderAttribition(message))
|
||||
}
|
||||
|
||||
for attachment in message.attachments {
|
||||
displayItems.append(.attachment(attachment))
|
||||
|
||||
@@ -35,6 +45,9 @@ extension TranscriptView.ViewModel
|
||||
if !message.text.isEmpty {
|
||||
displayItems.append(.message(message))
|
||||
}
|
||||
|
||||
lastSender = message.sender
|
||||
lastDate = message.date
|
||||
}
|
||||
|
||||
let animation: Animation? = animated ? .default : nil
|
||||
@@ -48,6 +61,8 @@ enum DisplayItem: Identifiable
|
||||
{
|
||||
case message(Display.Message)
|
||||
case attachment(Display.ImageAttachment)
|
||||
case senderAttribition(Display.Message)
|
||||
case spacer(CGFloat, Display.Message.ID)
|
||||
case date(Date)
|
||||
|
||||
var id: String {
|
||||
@@ -56,8 +71,12 @@ enum DisplayItem: Identifiable
|
||||
message.id
|
||||
case .attachment(let attachment):
|
||||
attachment.id
|
||||
case .senderAttribition(let message):
|
||||
"\(message.sender.displayName) @ \(message.id)"
|
||||
case .date(let date):
|
||||
date.description
|
||||
case .spacer(let space, let id):
|
||||
"\(space)=\(id)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user