From 53db7079b4342d1b02c7b19bc01e17ac1ce2af2f Mon Sep 17 00:00:00 2001 From: shannon Date: Mon, 10 Mar 2025 12:18:36 -0400 Subject: [PATCH] Use shortest possible timestamp on notifications Contributes to #399 [BUG] Multiple interactions do not collapse into a single notification --- .../NotificationRowView.swift | 4 ++-- MastodonSDK/Sources/MastodonUI/Extension/Date.swift | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Mastodon/In Progress New Layout and Datamodel/NotificationRowView.swift b/Mastodon/In Progress New Layout and Datamodel/NotificationRowView.swift index 51e4870c0..b8035f009 100644 --- a/Mastodon/In Progress New Layout and Datamodel/NotificationRowView.swift +++ b/Mastodon/In Progress New Layout and Datamodel/NotificationRowView.swift @@ -602,7 +602,7 @@ struct NotificationRowView: View { Text(string) .frame(maxWidth: .infinity, alignment: .leading) case .timeSinceLabel(let date): - Text(date.localizedAbbreviatedSlowedTimeAgoSinceNow) + Text(date.localizedExtremelyAbbreviatedTimeElapsedUntilNow) .font(.subheadline) .frame(height: actionSuperheaderHeight) .fixedSize(horizontal: true, vertical: false) @@ -628,7 +628,7 @@ struct NotificationRowView: View { HStack(alignment: .top, spacing: 2) { Text(string) .frame(maxWidth: .infinity, alignment: .leading) - Text(date.localizedAbbreviatedSlowedTimeAgoSinceNow) + Text(date.localizedExtremelyAbbreviatedTimeElapsedUntilNow) .font(.subheadline) .frame(height: actionSuperheaderHeight) .fixedSize(horizontal: true, vertical: false) diff --git a/MastodonSDK/Sources/MastodonUI/Extension/Date.swift b/MastodonSDK/Sources/MastodonUI/Extension/Date.swift index 59fb808dd..addb18cac 100644 --- a/MastodonSDK/Sources/MastodonUI/Extension/Date.swift +++ b/MastodonSDK/Sources/MastodonUI/Extension/Date.swift @@ -9,6 +9,14 @@ import Foundation import MastodonAsset import MastodonLocalization +let extremeDateAbbreviatingFormatter: DateComponentsFormatter = { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.year, .month, .day, .hour, .minute, .second] + formatter.unitsStyle = .abbreviated + formatter.maximumUnitCount = 1 + return formatter +}() + extension Date { static let calendar = Calendar(identifier: .gregorian) @@ -35,6 +43,11 @@ extension Date { public var localizedAbbreviatedSlowedTimeAgoSinceNow: String { return Date.relativeTimestampFormatter.localizedString(for: self, relativeTo: Date()) } + + public var localizedExtremelyAbbreviatedTimeElapsedUntilNow: String { + let interval = Date.now.timeIntervalSince(self) + return extremeDateAbbreviatingFormatter.string(from: interval) ?? "" + } } extension Date {