commit 69dbd157efbf281f0e020cad9032fd36dfd3d67c
parent c4d3022607306a5d2d1d681d44be4dbb887fbe5b
Author: Marc Stibane <marc@taler.net>
Date: Thu, 7 Nov 2024 23:17:47 +0100
Minimalistic date
Diffstat:
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)")