Skip to content

Commit 840e0f8

Browse files
committed
added network indicator
1 parent 364a996 commit 840e0f8

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

BDKSwiftExampleWallet/Service/BDKSyncService/KyotoService.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ extension KyotoService {
1313
}
1414

1515
extension Notification.Name {
16-
static let shouldUpdateWallet = Notification.Name("ShouldUpdateWallet")
16+
static let walletDidUpdate = Notification.Name("walletDidUpdate")
17+
static let walletDidConnect = Notification.Name("walletDidConnect")
18+
static let walletDidDisconnect = Notification.Name("walletDidDisconnect")
1719
}
1820

1921
final class KyotoService: BDKSyncService {
@@ -27,7 +29,13 @@ final class KyotoService: BDKSyncService {
2729

2830
private var client: CbfClient?
2931
private var node: CbfNode?
30-
private var isConnected = false
32+
private var isConnected = false {
33+
didSet {
34+
isConnected ?
35+
NotificationCenter.default.post(name: .walletDidConnect, object: nil) :
36+
NotificationCenter.default.post(name: .walletDidDisconnect, object: nil)
37+
}
38+
}
3139
private var isScanRunning = false
3240

3341
private var fullScanProgress: FullScanProgress?
@@ -152,7 +160,7 @@ final class KyotoService: BDKSyncService {
152160
if let update = await client?.update() {
153161
do {
154162
try wallet?.applyUpdate(update: update)
155-
NotificationCenter.default.post(name: .shouldUpdateWallet, object: nil)
163+
NotificationCenter.default.post(name: .walletDidUpdate, object: nil)
156164
print("Updated wallet")
157165
} catch {
158166
print(error)

BDKSwiftExampleWallet/View Model/WalletViewModel.swift

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class WalletViewModel {
4545
var syncMode: SyncMode {
4646
bdkClient.getSyncMode() ?? .esplora
4747
}
48+
var isConnected: Bool = false
4849

4950
init(
5051
bdkClient: BDKClient = .live,
@@ -58,13 +59,31 @@ class WalletViewModel {
5859
self.priceClient = priceClient
5960
self.transactions = transactions
6061
self.walletSyncState = walletSyncState
61-
NotificationCenter.default.addObserver(self, selector: #selector(receiveNotification(_:)), name: .shouldUpdateWallet, object: nil)
62+
addNotifications()
63+
}
64+
65+
deinit {
66+
NotificationCenter.default.removeObserver(self)
67+
}
68+
69+
private func addNotifications() {
70+
NotificationCenter.default.addObserver(self, selector: #selector(receiveNotification(_:)), name: .walletDidUpdate, object: nil)
71+
NotificationCenter.default.addObserver(self, selector: #selector(receiveNotification(_:)), name: .walletDidConnect, object: nil)
72+
NotificationCenter.default.addObserver(self, selector: #selector(receiveNotification(_:)), name: .walletDidConnect, object: nil)
6273
}
6374

6475
@objc private func receiveNotification(_ notification: Notification) {
65-
if notification.name == .shouldUpdateWallet {
76+
switch notification.name {
77+
case .walletDidUpdate:
6678
getBalance()
6779
getTransactions()
80+
case .walletDidConnect:
81+
isConnected = true
82+
83+
case .walletDidDisconnect:
84+
isConnected = false
85+
86+
default: break
6887
}
6988
}
7089

BDKSwiftExampleWallet/View/WalletView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,12 @@ struct WalletView: View {
182182
)
183183
}
184184
.toolbar {
185+
if viewModel.syncMode == .kyoto {
186+
ToolbarItem(placement: .topBarLeading) {
187+
Image(systemName: viewModel.isConnected ? "network" : "network.slash")
188+
.foregroundStyle(viewModel.isConnected ? .blue : .red)
189+
}
190+
}
185191
ToolbarItem(placement: .navigationBarTrailing) {
186192
Button {
187193
showSettingsView = true

0 commit comments

Comments
 (0)