taler-ios

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

commit b49fa4b5c7f00c51d4c9a52218aef1ac9bfead78
parent 48c54e435214be9f4dab7484b082f63abd03df4e
Author: Marc Stibane <marc@taler.net>
Date:   Sat, 31 Oct 2026 18:13:54 +0100

Mailbox, messages

Diffstat:
MTalerWallet1/Controllers/Controller.swift | 30++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+), 0 deletions(-)

diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -135,6 +135,7 @@ class Controller: ObservableObject { @Published var scannedURLs: [ScannedURL] = [] @Published var contacts: [ContactEntry] = [] @Published var mailboxConfiguration: MailboxConfiguration? = nil + @Published var messages: [MailboxMessage] = [] @Published var backendState: BackendState = .none // only used for launch animation @Published var currencyTicker: Int = 0 // updates whenever a new currency is added @@ -386,6 +387,17 @@ class Controller: ObservableObject { } return nil } + // MARK: - + @MainActor + @discardableResult + func createMailbox() async ->MailboxConfiguration? { + if mailboxConfiguration == nil { + let model = WalletModel.shared + let configuration = try? await model.initializeMailbox() + mailboxConfiguration = configuration + } + return mailboxConfiguration + } @MainActor @discardableResult func loadContacts(_ stack: CallStack) async -> Int? { @@ -405,6 +417,24 @@ class Controller: ObservableObject { } return nil } + @MainActor + func refreshMailbox(_ stack: CallStack) async { + // Do we have a mailbox? + let model = WalletModel.shared + if let mailboxConfiguration { + if let response = try? await model.refreshMailbox(mailboxConfiguration) { + messages = response.messages +#if DEBUG // TODO: tell user? + if let expiration = response.mailboxExpiration { + if expiration != mailboxConfiguration.expiration { + let expirationDate = TalerDater.dateString(expiration) + self.logger.log("••Mailbox expiration changed: \(expirationDate.0)") + } + } +#endif + } + } + } // MARK: - @MainActor @discardableResult