[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-ios] 16/54: Dummy
From: |
gnunet |
Subject: |
[taler-taler-ios] 16/54: Dummy |
Date: |
Fri, 30 Jun 2023 22:33:48 +0200 |
This is an automated email from the git hooks/post-receive script.
marc-stibane pushed a commit to branch master
in repository taler-ios.
commit a75849a9b23042a12d4c0f28615f0e4bd1c1747d
Author: Marc Stibane <marc@taler.net>
AuthorDate: Wed Jun 21 20:29:03 2023 +0200
Dummy
---
TalerWallet1/Backend/Transaction.swift | 54 +++++++++++++--
.../Views/Exchange/ManualWithdrawDone.swift | 13 ++--
.../Views/Sheets/P2P_Sheets/P2pAcceptDone.swift | 12 ++--
.../Views/Transactions/TransactionDetailView.swift | 78 ++++++++++++++++------
.../Views/Transactions/TransactionRowView.swift | 5 +-
.../Views/Transactions/TransactionsListView.swift | 2 +-
.../WithdrawAcceptDone.swift | 12 ++--
7 files changed, 125 insertions(+), 51 deletions(-)
diff --git a/TalerWallet1/Backend/Transaction.swift
b/TalerWallet1/Backend/Transaction.swift
index 3a16618..2e278b2 100644
--- a/TalerWallet1/Backend/Transaction.swift
+++ b/TalerWallet1/Backend/Transaction.swift
@@ -97,6 +97,7 @@ enum TxAction: String, Codable {
struct TransactionCommon: Decodable {
enum TransactionType: String, Codable {
+ case dummy
case withdrawal
case deposit
case payment
@@ -165,6 +166,7 @@ struct WithdrawalTransactionDetails: Decodable {
struct WithdrawalTransaction {
var common: TransactionCommon
var details: WithdrawalTransactionDetails
+ var loaded: Timestamp
}
struct PaymentTransactionDetails: Decodable {
@@ -180,6 +182,7 @@ struct PaymentTransactionDetails: Decodable {
struct PaymentTransaction {
var common: TransactionCommon
var details: PaymentTransactionDetails
+ var loaded: Timestamp
}
struct RefundTransactionDetails: Decodable {
@@ -193,6 +196,7 @@ struct RefundTransactionDetails: Decodable {
struct RefundTransaction {
var common: TransactionCommon
var details: RefundTransactionDetails
+ var loaded: Timestamp
}
struct RewardTransactionDetails: Decodable {
@@ -203,6 +207,7 @@ struct RewardTransactionDetails: Decodable {
struct RewardTransaction {
var common: TransactionCommon
var details: RewardTransactionDetails
+ var loaded: Timestamp
}
//struct TipTransactionDetails: Decodable {
@@ -213,6 +218,7 @@ struct RewardTransaction {
//struct TipTransaction {
// var common: TransactionCommon
// var details: TipTransactionDetails
+// var loaded: Timestamp
//}
enum RefreshReason: String, Decodable {
@@ -238,6 +244,7 @@ struct RefreshTransactionDetails: Decodable {
struct RefreshTransaction {
var common: TransactionCommon
var details: RefreshTransactionDetails
+ var loaded: Timestamp
}
struct P2pShortInfo: Codable {
@@ -254,9 +261,15 @@ struct P2PTransactionDetails: Codable {
struct P2PTransaction {
var common: TransactionCommon
var details: P2PTransactionDetails
+ var loaded: Timestamp
+}
+struct DummyTransaction {
+ var common: TransactionCommon
+ var loaded: Timestamp
}
enum Transaction: Decodable, Hashable, Identifiable {
+ case dummy (DummyTransaction)
case withdrawal (WithdrawalTransaction)
case payment (PaymentTransaction)
case refund (RefundTransaction)
@@ -268,29 +281,30 @@ enum Transaction: Decodable, Hashable, Identifiable {
init(from decoder: Decoder) throws {
do {
let common = try TransactionCommon.init(from: decoder)
+ let now = Timestamp.now()
switch (common.type) {
case .withdrawal:
let details = try WithdrawalTransactionDetails.init(from:
decoder)
- self = .withdrawal(WithdrawalTransaction(common: common,
details: details))
+ self = .withdrawal(WithdrawalTransaction(common: common,
details: details, loaded: now))
case .payment:
let details = try PaymentTransactionDetails.init(from:
decoder)
- self = .payment(PaymentTransaction(common: common,
details: details))
+ self = .payment(PaymentTransaction(common: common,
details: details, loaded: now))
case .refund:
let details = try RefundTransactionDetails.init(from:
decoder)
- self = .refund(RefundTransaction(common: common, details:
details))
+ self = .refund(RefundTransaction(common: common, details:
details, loaded: now))
case .reward:
let details = try RewardTransactionDetails.init(from:
decoder)
- self = .reward(RewardTransaction(common: common, details:
details))
+ self = .reward(RewardTransaction(common: common, details:
details, loaded: now))
// case .tip:
// let details = try TipTransactionDetails.init(from:
decoder)
-// self = .tip(TipTransaction(common: common, details:
details))
+// self = .tip(TipTransaction(common: common, details:
details, loaded: now))
case .refresh:
let details = try RefreshTransactionDetails.init(from:
decoder)
- self = .refresh(RefreshTransaction(common: common,
details: details))
+ self = .refresh(RefreshTransaction(common: common,
details: details, loaded: now))
case .peerPushDebit, .peerPullCredit, .scanPullDebit,
.scanPushCredit:
let details = try P2PTransactionDetails.init(from: decoder)
- self = .peer2peer(P2PTransaction(common: common, details:
details))
+ self = .peer2peer(P2PTransaction(common: common, details:
details, loaded: now))
default:
let context = DecodingError.Context(
codingPath: decoder.codingPath,
@@ -323,6 +337,7 @@ enum Transaction: Decodable, Hashable, Identifiable {
var localizedType: String {
switch common.type {
+ case .dummy: return String("Dummy")
case .withdrawal: return String(localized: "Withdrawal")
case .deposit: return String(localized: "Deposit")
case .payment: return String(localized: "Payment")
@@ -379,6 +394,8 @@ enum Transaction: Decodable, Hashable, Identifiable {
var common: TransactionCommon {
switch self {
+ case .dummy(let dummyTransaction):
+ return dummyTransaction.common
case .withdrawal(let withdrawalTransaction):
return withdrawalTransaction.common
case .payment(let paymentTransaction):
@@ -396,9 +413,32 @@ enum Transaction: Decodable, Hashable, Identifiable {
}
}
+ var loaded: Timestamp {
+ switch self {
+ case .dummy(let dummyTransaction):
+ return dummyTransaction.loaded
+ case .withdrawal(let withdrawalTransaction):
+ return withdrawalTransaction.loaded
+ case .payment(let paymentTransaction):
+ return paymentTransaction.loaded
+ case .refund(let refundTransaction):
+ return refundTransaction.loaded
+ case .reward(let rewardTransaction):
+ return rewardTransaction.loaded
+// case .tip(let tipTransaction):
+// return tipTransaction.loaded
+ case .refresh(let refreshTransaction):
+ return refreshTransaction.loaded
+ case .peer2peer(let p2pTransaction):
+ return p2pTransaction.loaded
+ }
+ }
+
func detailsToShow() -> Dictionary<String, String> {
var result: [String:String] = [:]
switch self {
+ case .dummy(let dummyTransaction):
+ break
case .withdrawal(let withdrawalTransaction):
result[EXCHANGEBASEURL] =
withdrawalTransaction.details.exchangeBaseUrl
case .payment(let paymentTransaction):
diff --git a/TalerWallet1/Views/Exchange/ManualWithdrawDone.swift
b/TalerWallet1/Views/Exchange/ManualWithdrawDone.swift
index 0afd531..d057333 100644
--- a/TalerWallet1/Views/Exchange/ManualWithdrawDone.swift
+++ b/TalerWallet1/Views/Exchange/ManualWithdrawDone.swift
@@ -17,7 +17,7 @@ struct ManualWithdrawDone: View {
@EnvironmentObject private var model: WalletModel
@State var acceptManualWithdrawalResult: AcceptManualWithdrawalResult?
- @State var withdrawalTransaction: Transaction?
+ @State var transactionId: String?
func reloadOneAction(_ transactionId: String) async throws -> Transaction {
return try await model.getTransactionByIdT(transactionId)
@@ -29,10 +29,10 @@ struct ManualWithdrawDone: View {
let _ = symLog.vlog() // just to get the # to compare it with
.onAppear & onDisappear
#endif
VStack {
- if let transaction = withdrawalTransaction {
- TransactionDetailView(transaction: transaction,
- reloadAction: reloadOneAction,
- doneAction:
ViewState.shared.popToRootView)
+ if let transactionId {
+ TransactionDetailView(transactionId: transactionId,
+ reloadAction: reloadOneAction,
+ doneAction:
ViewState.shared.popToRootView)
.navigationBarBackButtonHidden(true) // exit only
by Done-Button
.navigationTitle(navTitle)
} else {
@@ -48,8 +48,7 @@ struct ManualWithdrawDone: View {
let result = try await
model.sendAcceptManualWithdrawalM(exchange.exchangeBaseUrl,
amount: amount, restrictAge: 0)
print(result as Any)
- let transaction = try await
model.getTransactionByIdT(result!.transactionId)
- withdrawalTransaction = transaction
+ transactionId = result!.transactionId
} catch { // TODO: error
symLog.log(error.localizedDescription)
}
diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
index 34380e6..17669c4 100644
--- a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
+++ b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
@@ -16,7 +16,7 @@ struct P2pAcceptDone: View {
@EnvironmentObject private var model: WalletModel
@State private var confirmTransferUrl: String? = nil
- @State private var transaction: Transaction? = nil
+ @State private var transactionId: String? = nil
func reloadOneAction(_ transactionId: String) async throws -> Transaction {
return try await model.getTransactionByIdT(transactionId)
@@ -28,10 +28,10 @@ struct P2pAcceptDone: View {
let _ = symLog.vlog() // just to get the # to compare it with
.onAppear & onDisappear
#endif
VStack {
- if let transaction {
- TransactionDetailView(transaction: transaction,
- reloadAction: reloadOneAction,
- doneAction: { dismissTop() })
+ if let transactionId {
+ TransactionDetailView(transactionId: transactionId,
+ reloadAction: reloadOneAction,
+ doneAction: { dismissTop() })
.navigationBarBackButtonHidden(true)
.interactiveDismissDisabled() // can only use "Done"
button to dismiss
.navigationTitle(navTitle)
@@ -47,7 +47,7 @@ struct P2pAcceptDone: View {
if let exchangeBaseUrl {
let result = try await
model.sendAcceptIntWithdrawalM(exchangeBaseUrl, withdrawURL: url.absoluteString)
confirmTransferUrl = result!.confirmTransferUrl
- transaction = try await
model.getTransactionByIdT(result!.transactionId)
+ transactionId = result!.transactionId
}
} catch { // TODO: error
symLog.log(error.localizedDescription)
diff --git a/TalerWallet1/Views/Transactions/TransactionDetailView.swift
b/TalerWallet1/Views/Transactions/TransactionDetailView.swift
index 1310696..59351d4 100644
--- a/TalerWallet1/Views/Transactions/TransactionDetailView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionDetailView.swift
@@ -6,12 +6,30 @@ import SwiftUI
import taler_swift
import SymLog
+extension Transaction { // for Dummys
+ init(dummy: Bool) {
+ let amount = try! Amount(fromString: "KUDOS:0")
+ let now = Timestamp.now()
+ let common = TransactionCommon(type: .dummy,
+ txState: TransactionState(major:
.pending),
+ amountEffective: amount,
+ amountRaw: amount,
+ transactionId: "",
+ timestamp: now,
+ txActions: [])
+ self = .dummy(DummyTransaction(common: common, loaded: now))
+ }
+}
+// MARK: -
struct TransactionDetailView: View {
private let symLog = SymLogV()
@AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
@AppStorage("developerMode") var developerMode: Bool = false
- @State var transaction: Transaction
+ var transactionId: String
+ @State var transaction: Transaction = Transaction(dummy: true)
+ @State var viewId: Int = 0
+
var reloadAction: ((_ transactionId: String) async throws -> Transaction)
var deleteAction: ((_ transactionId: String) async throws -> Void)?
var abortAction: ((_ transactionId: String) async throws -> Void)?
@@ -26,12 +44,15 @@ struct TransactionDetailView: View {
#endif
let common = transaction.common
let pending = transaction.isPending
+ let loaded = TalerDater.dateString(from: transaction.loaded)
let dateString = TalerDater.dateString(from: common.timestamp)
let localizedType = transaction.localizedType
let navTitle = pending ? String(localized: "Pending \(localizedType)")
: localizedType
Group {
List {
+ Text("Loaded: \(loaded)")
+ .font(.title2)
if developerMode {
if transaction.isSuspendable { if let suspendAction {
TransactionButton(transactionId: common.transactionId,
@@ -59,7 +80,8 @@ struct TransactionDetailView: View {
if let doneAction {
DoneButton(doneAction: doneAction)
}
- }.listStyle(myListStyle.style).anyView
+ }.id(viewId)
+ .listStyle(myListStyle.style).anyView
}.onNotification(.TransactionStateTransition) { notification in
if let transition = notification.userInfo?[TRANSACTIONTRANSITION]
as? TransactionTransition {
if transition.transactionId == common.transactionId {
@@ -69,9 +91,10 @@ struct TransactionDetailView: View {
doneAction()
}} else { Task { do {
symLog.log("newState: \(newState), reloading
transaction")
+ withAnimation() { transaction = Transaction(dummy:
true); viewId += 1 }
let reloadedTransaction = try await
reloadAction(common.transactionId)
- transaction = reloadedTransaction // redraw
symLog.log("reloaded transaction:
\(reloadedTransaction.common.txState.major)")
+ withAnimation() { transaction = reloadedTransaction;
viewId += 1 } // redraw
} catch {
symLog.log(error.localizedDescription)
}}}
@@ -81,6 +104,15 @@ struct TransactionDetailView: View {
}
}
.navigationTitle(navTitle)
+ .task {
+ do {
+ symLog.log("task")
+ let reloadedTransaction = try await reloadAction(transactionId)
+ withAnimation() { transaction = reloadedTransaction } //
redraw
+ } catch {
+ withAnimation() { transaction = Transaction(dummy: true) }
+ }
+ }
.onAppear {
symLog.log("onAppear")
DebugViewC.shared.setViewID(VIEW_TRANSACTIONDETAIL)
@@ -99,6 +131,8 @@ struct TransactionDetailView: View {
let common = transaction.common
let pending = transaction.isPending
switch transaction {
+ case .dummy(let dummyTransaction):
+ Text("Dummy")
case .withdrawal(let withdrawalTransaction):
let details = withdrawalTransaction.details
if pending {
@@ -197,23 +231,23 @@ struct TransactionDetailView: View {
}
// MARK: -
#if DEBUG
-struct TransactionDetail_Previews: PreviewProvider {
- static func deleteTransactionDummy(transactionId: String) async throws {}
- static func doneActionDummy() {}
- static var withdrawal = Transaction(incoming: true,
- pending: true,
- id: "some withdrawal ID",
- time: Timestamp(from:
1_666_000_000_000))
- static var payment = Transaction(incoming: false,
- pending: false,
- id: "some payment ID",
- time: Timestamp(from:
1_666_666_000_000))
- static func reloadActionDummy(transactionId: String) async -> Transaction
{ return withdrawal }
- static var previews: some View {
- Group {
- TransactionDetailView(transaction: withdrawal, reloadAction:
reloadActionDummy, doneAction: doneActionDummy)
- TransactionDetailView(transaction: payment, reloadAction:
reloadActionDummy, deleteAction: deleteTransactionDummy)
- }
- }
-}
+//struct TransactionDetail_Previews: PreviewProvider {
+// static func deleteTransactionDummy(transactionId: String) async throws {}
+// static func doneActionDummy() {}
+// static var withdrawal = Transaction(incoming: true,
+// pending: true,
+// id: "some withdrawal ID",
+// time: Timestamp(from:
1_666_000_000_000))
+// static var payment = Transaction(incoming: false,
+// pending: false,
+// id: "some payment ID",
+// time: Timestamp(from:
1_666_666_000_000))
+// static func reloadActionDummy(transactionId: String) async ->
Transaction { return withdrawal }
+// static var previews: some View {
+// Group {
+// TransactionDetailView(transaction: withdrawal, reloadAction:
reloadActionDummy, doneAction: doneActionDummy)
+// TransactionDetailView(transaction: payment, reloadAction:
reloadActionDummy, deleteAction: deleteTransactionDummy)
+// }
+// }
+//}
#endif
diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift
b/TalerWallet1/Views/Transactions/TransactionRowView.swift
index b6e9286..b64cec7 100644
--- a/TalerWallet1/Views/Transactions/TransactionRowView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionRowView.swift
@@ -93,6 +93,7 @@ extension Transaction { // for PreViews
transactionId: id,
timestamp: time,
txActions: [.abort])
+ let now = Timestamp.now()
if incoming {
// if pending then manual else bank-integrated
let payto =
"payto://iban/SANDBOXX/DE159593?receiver-name=Exchange+Company&amount=KUDOS%3A9.99&message=Taler+Withdrawal+J41FQPJGAP1BED1SFSXHC989EN8HRDYAHK688MQ228H6SKBMV0AG"
@@ -103,7 +104,7 @@ extension Transaction { // for PreViews
exchangePaytoUris: pending ? [payto]
: nil)
let wDetails = WithdrawalTransactionDetails(exchangeBaseUrl:
DEMOEXCHANGE,
withdrawalDetails:
withdrawalDetails)
- self = .withdrawal(WithdrawalTransaction(common: common, details:
wDetails))
+ self = .withdrawal(WithdrawalTransaction(common: common, details:
wDetails, loaded: now))
} else {
let merchant = Merchant(name: "some random shop")
let info = OrderShortInfo(orderId: "some order ID",
@@ -114,7 +115,7 @@ extension Transaction { // for PreViews
totalRefundRaw: try!
Amount(fromString: refRaw),
totalRefundEffective: try!
Amount(fromString: refEff),
info: info)
- self = .payment(PaymentTransaction(common: common, details:
pDetails))
+ self = .payment(PaymentTransaction(common: common, details:
pDetails, loaded: now))
}
}
}
diff --git a/TalerWallet1/Views/Transactions/TransactionsListView.swift
b/TalerWallet1/Views/Transactions/TransactionsListView.swift
index 6303b49..eae9b75 100644
--- a/TalerWallet1/Views/Transactions/TransactionsListView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionsListView.swift
@@ -100,7 +100,7 @@ extension TransactionsListView {
// let common = transaction.common
NavigationLink { LazyView { // whole row like
in a tableView
// pending may not be deleted, but only aborted
- TransactionDetailView(transaction: transaction,
+ TransactionDetailView(transactionId:
transaction.id,
reloadAction: reloadOneAction,
deleteAction: deleteAction,
abortAction: abortAction,
diff --git a/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawAcceptDone.swift
b/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawAcceptDone.swift
index e7cf2a1..99df0ff 100644
--- a/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawAcceptDone.swift
+++ b/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawAcceptDone.swift
@@ -16,7 +16,7 @@ struct WithdrawAcceptDone: View {
@EnvironmentObject private var model: WalletModel
@State private var confirmTransferUrl: String? = nil
- @State private var transaction: Transaction? = nil
+ @State private var transactionId: String? = nil
func reloadOneAction(_ transactionId: String) async throws -> Transaction {
return try await model.getTransactionByIdT(transactionId)
@@ -28,10 +28,10 @@ struct WithdrawAcceptDone: View {
let _ = symLog.vlog() // just to get the # to compare it with
.onAppear & onDisappear
#endif
VStack {
- if let transaction {
- TransactionDetailView(transaction: transaction,
- reloadAction: reloadOneAction,
- doneAction: { dismissTop() })
+ if let transactionId {
+ TransactionDetailView(transactionId: transactionId,
+ reloadAction: reloadOneAction,
+ doneAction: { dismissTop() })
.navigationBarBackButtonHidden(true)
.interactiveDismissDisabled() // can only use "Done"
button to dismiss
.navigationTitle(navTitle)
@@ -47,7 +47,7 @@ struct WithdrawAcceptDone: View {
if let exchangeBaseUrl {
let result = try await
model.sendAcceptIntWithdrawalM(exchangeBaseUrl, withdrawURL: url.absoluteString)
confirmTransferUrl = result!.confirmTransferUrl
- transaction = try await
model.getTransactionByIdT(result!.transactionId)
+ transactionId = result!.transactionId
}
} catch { // TODO: error
symLog.log(error.localizedDescription)
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-ios] 01/54: Big update after DD37, (continued)
- [taler-taler-ios] 01/54: Big update after DD37, gnunet, 2023/06/30
- [taler-taler-ios] 13/54: Overhaul withdraw + p2p, gnunet, 2023/06/30
- [taler-taler-ios] 17/54: for debugging time-outs, gnunet, 2023/06/30
- [taler-taler-ios] 10/54: Reduce Logging, gnunet, 2023/06/30
- [taler-taler-ios] 12/54: Localization, gnunet, 2023/06/30
- [taler-taler-ios] 08/54: Preparations for localization + accessability, gnunet, 2023/06/30
- [taler-taler-ios] 19/54: remove dismissFirst, gnunet, 2023/06/30
- [taler-taler-ios] 14/54: Made Model a Singleton, gnunet, 2023/06/30
- [taler-taler-ios] 40/54: TransactionType, gnunet, 2023/06/30
- [taler-taler-ios] 26/54: PeerPullDebit, gnunet, 2023/06/30
- [taler-taler-ios] 16/54: Dummy,
gnunet <=
- [taler-taler-ios] 34/54: sizeCategory, task, gnunet, 2023/06/30
- [taler-taler-ios] 06/54: Notifications, gnunet, 2023/06/30
- [taler-taler-ios] 42/54: BalanceRow, gnunet, 2023/06/30
- [taler-taler-ios] 15/54: Suspend-Resume, gnunet, 2023/06/30
- [taler-taler-ios] 21/54: Sounds, P2P receive, gnunet, 2023/06/30
- [taler-taler-ios] 07/54: Big Model update, removed unneccessary thread-safety code, gnunet, 2023/06/30
- [taler-taler-ios] 41/54: playSound, gnunet, 2023/06/30
- [taler-taler-ios] 30/54: bugfix, gnunet, 2023/06/30
- [taler-taler-ios] 43/54: confirmTransferUrl, gnunet, 2023/06/30
- [taler-taler-ios] 33/54: log only release builds, gnunet, 2023/06/30