taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 69dbd157efbf281f0e020cad9032fd36dfd3d67c
parent c4d3022607306a5d2d1d681d44be4dbb887fbe5b
Author: Marc Stibane <marc@taler.net>
Date:   Thu,  7 Nov 2024 23:17:47 +0100

Minimalistic date

Diffstat:
MTalerWallet1/Helper/TalerDater.swift | 39++++++++++++++++++++++-----------------
MTalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift | 3++-
MTalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift | 3++-
MTalerWallet1/Views/Transactions/TransactionRowView.swift | 2+-
MTalerWallet1/Views/Transactions/TransactionSummaryV.swift | 6++----
5 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/TalerWallet1/Helper/TalerDater.swift b/TalerWallet1/Helper/TalerDater.swift @@ -8,16 +8,22 @@ import taler_swift public class TalerDater: DateFormatter { public static let shared = TalerDater() - static func relativeDate(from: TimeInterval) -> String? { + static func relativeDate(_ from: TimeInterval, _ minimalistic: Bool) -> String? { if from > 0 { // transactions should always be in the past let minute = from / 60.0 // from is in seconds - if minute < 1 { return String(localized: "Right now") } - if minute < 2 { return String(localized: "1 minute ago") } - if minute < 55 { return String(localized: "\(Int(minute)) minutes ago") } - if minute < 60 { return String(localized: "About an hour ago") } - if minute < 80 { return String(localized: "1 hour ago") } - if minute < 105 { return String(localized: "About 1½ hours ago") } - if minute < 125 { return String(localized: "About 2 hours ago") } + if minute < 1 { return minimalistic ? String(localized: "Now") + : String(localized: "Right now") } + if minute < 2 { return minimalistic ? String(localized: "1 min ago") + : String(localized: "1 minute ago") } + if minute < 55 { return minimalistic ? String(localized: "\(Int(minute)) min ago") + : String(localized: "\(Int(minute)) minutes ago") } + if minute < 60 { return minimalistic ? String(localized: "~ 1 hour ago") + : String(localized: "About an hour ago") } + if minute < 75 { return String(localized: "1 hour ago") } + if minute < 105 { return minimalistic ? String(localized: "~ 1½ hours ago") + : String(localized: "About 1½ hours ago") } + if minute < 135 { return minimalistic ? String(localized: "~ 2 hours ago") + : String(localized: "About 2 hours ago") } let hour = minute / 60.0 let calendar = Calendar.current let now = Date.now @@ -37,13 +43,13 @@ public class TalerDater: DateFormatter { } /// produces a random date string between `now` and m+h+d (edit values after 60x) - public static func randomDateStr() -> String { + public static func randomDateStr(_ minimalistic: Bool) -> String { let m = 60*15 let h = 60*60*9 let d = 24*60*60*22 let t = m+h+d let randomTime = Int.random(in:1...t) - if let randomDateStr = relativeDate(from: Double(randomTime)) { + if let randomDateStr = relativeDate(Double(randomTime), minimalistic) { return randomDateStr } else { // t is too large for a relative date // return absolute date with random locale @@ -61,7 +67,7 @@ public class TalerDater: DateFormatter { // } /// converts a timestamp into a formatted date string - public static func dateString(from: Timestamp, relative: Bool = false) -> (String, Date?) { + public static func dateString(_ from: Timestamp, _ minimalistic: Bool, relative: Bool = false) -> (String, Date?) { do { let milliseconds = try from.milliseconds() let date = Date(milliseconds: milliseconds) @@ -69,7 +75,7 @@ public class TalerDater: DateFormatter { if relative { let now = Date.now let timeInterval = now.timeIntervalSince(date) - if let relativeDate = relativeDate(from: timeInterval) { + if let relativeDate = relativeDate(timeInterval, minimalistic) { return (relativeDate, date) } } @@ -90,7 +96,7 @@ public class TalerDater: DateFormatter { } public static func dateString() -> String { - return shared.string(from: Date()) + shared.string(from: Date()) } private override init() { @@ -109,16 +115,15 @@ public class TalerDater: DateFormatter { extension Date { static func - (lhs: Date, rhs: Date) -> TimeInterval { - return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate + lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate } } extension TimeInterval { - var seconds: Int { - return Int(self.rounded()) + Int(self.rounded()) } var milliseconds: Int { - return Int(self * 1000) + Int(self * 1000) } } diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift @@ -19,6 +19,7 @@ struct P2pPayURIView: View { @EnvironmentObject private var controller: Controller @Environment(\.colorScheme) private var colorScheme @Environment(\.colorSchemeContrast) private var colorSchemeContrast + @AppStorage("minimalistic") var minimalistic: Bool = false @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic @State private var peerPullDebitResponse: PreparePeerPullDebitResponse? @@ -50,7 +51,7 @@ struct P2pPayURIView: View { summary: peerPullDebitResponse.contractTerms.summary, merchant: nil) let expiration = peerPullDebitResponse.contractTerms.purse_expiration - let (dateString, date) = TalerDater.dateString(from: expiration) + let (dateString, date) = TalerDater.dateString(expiration, minimalistic) let a11yDate = TalerDater.accessibilityDate(date) ?? dateString let a11yLabel = String(localized: "Expires: \(a11yDate)", comment: "VoiceOver") Text("Expires: \(dateString)") diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift @@ -19,6 +19,7 @@ struct P2pReceiveURIView: View { @EnvironmentObject private var controller: Controller @Environment(\.colorScheme) private var colorScheme @Environment(\.colorSchemeContrast) private var colorSchemeContrast + @AppStorage("minimalistic") var minimalistic: Bool = false @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic @State private var currencyInfo: CurrencyInfo = CurrencyInfo.zero(UNKNOWN) @@ -59,7 +60,7 @@ struct P2pReceiveURIView: View { summary: peerPushCreditResponse.contractTerms.summary, merchant: nil) let expiration = peerPushCreditResponse.contractTerms.purse_expiration - let (dateString, date) = TalerDater.dateString(from: expiration) + let (dateString, date) = TalerDater.dateString(expiration, minimalistic) let a11yDate = TalerDater.accessibilityDate(date) ?? dateString let a11yLabel = String(localized: "Expires: \(a11yDate)", comment: "VoiceOver") Text("Expires: \(dateString)") diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift b/TalerWallet1/Views/Transactions/TransactionRowView.swift @@ -87,7 +87,7 @@ struct TransactionRowView: View { .accessibilityLabel(doneOrPending ? topA11y! : topA11y! + String(localized: ", canceled", comment: "VoiceOver")) let centerBottom = TimelineView(.everyMinute) { context in - let (dateString, date) = TalerDater.dateString(from: common.timestamp, relative: true) + let (dateString, date) = TalerDater.dateString(common.timestamp, minimalistic, relative: true) Text(dateString) .foregroundColor(textColor) .talerFont(.callout) diff --git a/TalerWallet1/Views/Transactions/TransactionSummaryV.swift b/TalerWallet1/Views/Transactions/TransactionSummaryV.swift @@ -117,8 +117,7 @@ struct TransactionSummaryV: View { let common = transaction.common let pending = transaction.isPending let locale = TalerDater.shared.locale - let (dateString, date) = TalerDater.dateString(from: common.timestamp) -// let (dateString, date) = TalerDater.dateString(common.timestamp, minimalistic) + let (dateString, date) = TalerDater.dateString(common.timestamp, minimalistic) let a11yDate = TalerDater.accessibilityDate(date) ?? dateString let navTitle2 = transaction.isDone ? transaction.localizedTypePast : transaction.localizedType @@ -456,8 +455,7 @@ struct TransactionSummaryV: View { let details = p2pTransaction.details if !transaction.isDone { let expiration = details.info.expiration - let (dateString, date) = TalerDater.dateString(from: expiration) -// let (dateString, date) = TalerDater.dateString(expiration, minimalistic) + let (dateString, date) = TalerDater.dateString(expiration, minimalistic) let a11yDate = TalerDater.accessibilityDate(date) ?? dateString let a11yLabel = String(localized: "Expires: \(a11yDate)", comment: "VoiceOver") Text("Expires: \(dateString)")