diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 3361c9b710..021110e997 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -529,7 +529,7 @@ struct ChatItem: Identifiable, Decodable { var id: Int64 { get { meta.itemId } } - var timestampText: String { get { meta.timestampText } } + var timestampText: Text { get { meta.timestampText } } func isRcvNew() -> Bool { if case .rcvNew = meta.itemStatus { return true } @@ -570,7 +570,7 @@ struct CIMeta: Decodable { var itemStatus: CIStatus var createdAt: Date - var timestampText: String { get { SimpleX.timestampText(itemTs) } } + var timestampText: Text { get { SimpleX.timestampText(itemTs) } } static func getSample(_ id: Int64, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew) -> CIMeta { CIMeta( @@ -583,13 +583,14 @@ struct CIMeta: Decodable { } } +let msgTimeFormat = Date.FormatStyle.dateTime.hour().minute() +let msgDateFormat = Date.FormatStyle.dateTime.day(.twoDigits).month(.twoDigits) -func timestampText(_ date: Date) -> String { +func timestampText(_ date: Date) -> Text { let now = Calendar.current.dateComponents([.day, .hour], from: .now) let dc = Calendar.current.dateComponents([.day, .hour], from: date) - return now.day == dc.day || ((now.day ?? 0) - (dc.day ?? 0) == 1 && (dc.hour ?? 0) >= 18 && (now.hour ?? 0) < 12) - ? date.formatted(date: .omitted, time: .shortened) - : String(date.formatted(date: .numeric, time: .omitted).prefix(5)) + let recent = now.day == dc.day || ((now.day ?? 0) - (dc.day ?? 0) == 1 && (dc.hour ?? 0) >= 18 && (now.hour ?? 0) < 12) + return Text(date, format: recent ? msgTimeFormat : msgDateFormat) } enum CIStatus: Decodable { diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift index 5aa6b98eab..08112976fc 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift @@ -25,7 +25,7 @@ struct CIMetaView: View { default: EmptyView() } - Text(chatItem.timestampText) + chatItem.timestampText .font(.caption) .foregroundColor(.secondary) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/TextItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/TextItemView.swift index e8f9b5b551..4a79c1f423 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/TextItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/TextItemView.swift @@ -55,8 +55,8 @@ struct TextItemView: View { } } - private func reserveSpaceForMeta(_ meta: String) -> Text { - Text(" \(meta)") + private func reserveSpaceForMeta(_ meta: Text) -> Text { + (Text(" ") + meta) .font(.caption) .foregroundColor(.clear) } diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 39f076b5b5..385c909dfd 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -39,7 +39,7 @@ struct ChatPreviewView: View { .foregroundColor(chat.chatInfo.ready ? .primary : .secondary) .frame(maxHeight: .infinity, alignment: .topLeading) Spacer() - Text(cItem?.timestampText ?? timestampText(chat.chatInfo.createdAt)) + (cItem?.timestampText ?? timestampText(chat.chatInfo.createdAt)) .font(.subheadline) .frame(minWidth: 60, alignment: .trailing) .foregroundColor(.secondary) diff --git a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift index d66af40c6b..2eedbdeb49 100644 --- a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift +++ b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift @@ -28,7 +28,7 @@ struct ContactRequestView: View { .padding(.top, 4) .frame(maxHeight: .infinity, alignment: .topLeading) Spacer() - Text(timestampText(contactRequest.createdAt)) + timestampText(contactRequest.createdAt) .font(.subheadline) .padding(.trailing, 8) .padding(.top, 4)