From 4a9de65030ce30838ecb3f7afa9cea14047c54b0 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Tue, 18 Jun 2024 17:38:52 +0300 Subject: [PATCH] Fixes #2679 - Timestamps in room list inconsistently use absolute and relative formatting --- ElementX/Sources/Other/Extensions/Date.swift | 3 ++- .../Timeline/TimelineItems/RoomTimelineItemFactory.swift | 2 +- UnitTests/Sources/DateTests.swift | 3 +++ changelog.d/2679.bugfix | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelog.d/2679.bugfix diff --git a/ElementX/Sources/Other/Extensions/Date.swift b/ElementX/Sources/Other/Extensions/Date.swift index 1e292c39e..f37a95aeb 100644 --- a/ElementX/Sources/Other/Extensions/Date.swift +++ b/ElementX/Sources/Other/Extensions/Date.swift @@ -26,7 +26,8 @@ extension Date { return formatted(date: .omitted, time: .shortened) } else if calendar.isDateInYesterday(self) { // Simply "Yesterday" if it was yesterday. - return formatted(Date.RelativeFormatStyle(presentation: .named, capitalizationContext: .beginningOfSentence)) + guard let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date()) else { fatalError() } + return yesterday.formatted(Date.RelativeFormatStyle(presentation: .named, capitalizationContext: .beginningOfSentence)) } else if let sixDaysAgo = calendar.date(byAdding: .day, value: -6, to: calendar.startOfDay(for: .now)), sixDaysAgo <= self { // The named day if it was in the last 6 days. diff --git a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift index b8137ba00..1ef15d322 100644 --- a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift +++ b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift @@ -484,7 +484,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol { return firstTimestamp > secondTimestamp } .map { key, receipt in - ReadReceipt(userID: key, formattedTimestamp: receipt.dateTimestamp?.formatted(date: .omitted, time: .shortened)) + ReadReceipt(userID: key, formattedTimestamp: receipt.dateTimestamp?.formattedMinimal()) } } diff --git a/UnitTests/Sources/DateTests.swift b/UnitTests/Sources/DateTests.swift index 9dced63f9..e3ce8a9ac 100644 --- a/UnitTests/Sources/DateTests.swift +++ b/UnitTests/Sources/DateTests.swift @@ -31,6 +31,9 @@ class DateTests: XCTestCase { let yesterday = calendar.date(byAdding: .hour, value: 1, to: startOfYesterday)! XCTAssertEqual(yesterday.formattedMinimal(), yesterday.formatted(Date.RelativeFormatStyle(presentation: .named, capitalizationContext: .beginningOfSentence))) + let nearYesterday = calendar.date(byAdding: DateComponents(hour: -10), to: today)! + XCTAssertEqual(nearYesterday.formattedMinimal(), yesterday.formatted(Date.RelativeFormatStyle(presentation: .named, capitalizationContext: .beginningOfSentence))) + let threeDaysAgo = calendar.date(byAdding: .day, value: -3, to: startOfToday)! XCTAssertEqual(threeDaysAgo.formattedMinimal(), threeDaysAgo.formatted(.dateTime.weekday(.wide))) diff --git a/changelog.d/2679.bugfix b/changelog.d/2679.bugfix new file mode 100644 index 000000000..ddd1f9038 --- /dev/null +++ b/changelog.d/2679.bugfix @@ -0,0 +1 @@ +Timestamps in room list inconsistently use absolute and relative formatting \ No newline at end of file