taler-ios

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

commit 49c0604cf88ac34ab5586ce98956f7d6de725c12
parent fbc5f12cf922f731c9ed45fbda5bf31cd0fd4ab4
Author: Marc Stibane <marc@taler.net>
Date:   Fri, 30 Jun 2023 17:34:16 +0200

BalanceReloaded

Diffstat:
MTalerWallet1/Controllers/PublicConstants.swift | 6++++++
MTalerWallet1/Views/Balances/BalancesListView.swift | 32++++++++++++++++++++------------
2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/TalerWallet1/Controllers/PublicConstants.swift b/TalerWallet1/Controllers/PublicConstants.swift @@ -27,6 +27,7 @@ public let TALERURI = "talerUri" public let TRANSACTIONTRANSITION = "transactionTransition" +/// Notifications sent by wallet-core extension Notification.Name { static let BalanceChange = Notification.Name("balance-change") static let TransactionStateTransition = Notification.Name(TransactionTransition.TransitionType.transition.rawValue) @@ -40,3 +41,8 @@ extension Notification.Name { static let ProposalAccepted = Notification.Name("proposal-accepted") static let ProposalDownloaded = Notification.Name("proposal-downloaded") } + +/// Notifications for internal synchronization +extension Notification.Name { + static let BalanceReloaded = Notification.Name("balanceReloaded") +} diff --git a/TalerWallet1/Views/Balances/BalancesListView.swift b/TalerWallet1/Views/Balances/BalancesListView.swift @@ -14,9 +14,8 @@ struct BalancesListView: View { let navTitle: String let hamburgerAction: () -> Void - @State var balances: [Balance] = [] @EnvironmentObject private var model: WalletModel - + @State private var balances: [Balance] = [] @State private var centsToTransfer: UInt64 = 0 @State private var summary: String = "" @State private var showQRScanner: Bool = false @@ -61,8 +60,11 @@ struct BalancesListView: View { }) } - private func reloadAction() async { - balances = await model.balancesM() + private func reloadAction() async -> Int { + let reloaded = await model.balancesM() + let count = reloaded.count + balances = reloaded + return count } var body: some View { @@ -80,10 +82,13 @@ struct BalancesListView: View { .overlay { if balances.isEmpty { WalletEmptyView() - .refreshable { + .refreshable { // already async symLog.log("refreshing") - await reloadAction() // this closure is already async, no need for a Task - // TODO: reload transactions + let count = await reloadAction() + if count > 0 { +// postNotificationM(.BalanceReloaded) + NotificationCenter.default.post(name: .BalanceReloaded, object: nil) + } } } @@ -102,7 +107,7 @@ struct BalancesListView: View { } // sheet .task { symLog.log(".task getBalances") - await reloadAction() + _ = await reloadAction() } // task } } @@ -114,7 +119,7 @@ extension BalancesListView { @Binding var balances: [Balance] @Binding var centsToTransfer: UInt64 @Binding var summary: String - var reloadAction: () async -> Void + var reloadAction: () async -> Int @State private var shouldLoad = false var body: some View { @@ -128,10 +133,13 @@ extension BalancesListView { centsToTransfer: $centsToTransfer, summary: $summary) } - .refreshable { + .refreshable { // already async symLog?.log("refreshing") - await reloadAction() // this closure is already async, no need for a Task - // TODO: reload transactions + let count = await reloadAction() + if count > 0 { +// postNotificationM(.BalanceReloaded) + NotificationCenter.default.post(name: .BalanceReloaded, object: nil) + } } .listStyle(myListStyle.style).anyView }