commit a4e489b08832f9c3f1400c73d615eecffb25689e
parent 65ef85cf2fd581bc63d10dca8fb1354dd5df6cc3
Author: Marc Stibane <marc@taler.net>
Date: Tue, 29 Apr 2025 08:20:22 +0200
centValue
Diffstat:
3 files changed, 34 insertions(+), 39 deletions(-)
diff --git a/TalerWallet1/Views/OIM/OIMView.swift b/TalerWallet1/Views/OIM/OIMView.swift
@@ -8,16 +8,6 @@
import SwiftUI
import taler_swift
-fileprivate func intValue(_ amount: Amount?) -> UInt64 {
- if let amount {
- if !amount.isZero {
- let int = amount.integer * 100 // TODO: currency specs instead of 100
- let frac = amount.fraction / 1_000_000 // drop 6 zeroes
- return int + UInt64(frac)
- }
- }
- return 0
-}
// MARK: -
struct OIMnavBack<Content: View>: View {
let stack: CallStack
@@ -154,7 +144,7 @@ struct OIMView: View {
.frame(width: 66, height: 66)
}
- let maxAvailable = cash.max(available: intValue(available))
+ let maxAvailable = cash.max(available: available?.centValue ?? 0)
// let _ = print("maxAvailable", maxAvailable)
OIMbackground() {
@@ -227,17 +217,17 @@ struct OIMView: View {
}
}
.task(id: isOpen) {
- availableVal = intValue(available)
- cash.update(availableVal)
- let maxAvailable = cash.max(available: intValue(available))
+ availableVal = available?.centValue ?? 0
+ cash.update(availableVal) // set cash to available
+// let maxAvailable = cash.max(available: availableVal)
// print("OIMView.task availableVal", availableVal, maxAvailable)
debugTick += 1
}
- .onAppear {
- let maxAvailable = cash.max(available: intValue(available))
+// .onAppear {
+// let maxAvailable = cash.max(available: available?.centValue ?? 0)
// print("OIMView.onAppear availableVal", availableVal, maxAvailable)
- debugTick += 1
- }
+// debugTick += 1
+// }
.onDisappear {
cash.moveBack()
sending = false
@@ -266,8 +256,8 @@ struct OIMEditView: View {
// available minus amountVal - what's still available from the balance when amount is on the table
var isAvailable: UInt64 {
if useAvailable {
- let have = intValue(available)
- let want = intValue(amount)
+ let have = available.centValue
+ let want = amount.centValue
if have > want {
return have - want
}
@@ -332,7 +322,7 @@ struct OIMEditView: View {
}
VStack {
Spacer()
- let maxAvailable = useAvailable ? cash.max(available: intValue(available)) : 0
+ let maxAvailable = useAvailable ? cash.max(available: available.centValue) : 0
OIMcurrencyScroller(stack: stack.push(),
cash: cash,
availableVal: $availableVal, // ==> available - amount
@@ -346,14 +336,10 @@ struct OIMEditView: View {
.opacity(sending ? 0.01 : 1.0)
}
// .border(.red)
-
-// .task {
-// availableVal = intValue(available) - intValue(amount)
-// }
} // ZStack
}
.task {
- amountVal = intValue(amount)
+ amountVal = amount.centValue
availableVal = isAvailable
cash.update(amountVal)
}
@@ -439,7 +425,7 @@ struct OIMSubjectView: View {
// .border(.red)
}
}.task {
- let amountVal = intValue(amount)
+ amountVal = amount.centValue
withAnimation(.basic1) {
smallAmount = true
}
diff --git a/TalerWallet1/Views/OIM/OIMpayView.swift b/TalerWallet1/Views/OIM/OIMpayView.swift
@@ -8,17 +8,6 @@
import SwiftUI
import taler_swift
-fileprivate func intValue(_ amount: Amount?) -> UInt64 {
- if let amount {
- if !amount.isZero {
- let int = amount.integer * 100 // TODO: currency specs instead of 100
- let frac = amount.fraction / 1_000_000 // drop 6 zeroes
- return int + UInt64(frac)
- }
- }
- return 0
-}
-
// MARK: -
@available(iOS 16.4, *)
struct OIMpayView: View {
@@ -52,7 +41,7 @@ struct OIMpayView: View {
#endif
}
.task {
- amountVal = intValue(amount)
+ amountVal = amount?.centValue ?? 0
}
}
diff --git a/taler-swift/Sources/taler-swift/Amount.swift b/taler-swift/Sources/taler-swift/Amount.swift
@@ -110,6 +110,26 @@ public final class Amount: Codable, Hashable, @unchecked Sendable, CustomStringC
}
}
+ public var milliValue: UInt64 {
+ if !isZero {
+ let oneThousand: UInt64 = 1000
+ let base = UInt64(fractionalBase()) / oneThousand
+ let thousandths = UInt64(fraction) / base
+ return integer * oneThousand + thousandths
+ }
+ return 0
+ }
+
+ public var centValue: UInt64 {
+ if !isZero {
+ let oneHundred: UInt64 = 100
+ let base = UInt64(fractionalBase()) / oneHundred
+ let hundredths = UInt64(fraction) / base
+ return integer * oneHundred + hundredths
+ }
+ return 0
+ }
+
/// The floating point representation of the integer.
public var intValue: Double {
Double(integer)