Skip to content

Commit 2bd6e8f

Browse files
authored
fix: saved esplora and wallet load
1 parent f007eac commit 2bd6e8f

File tree

4 files changed

+110
-67
lines changed

4 files changed

+110
-67
lines changed

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@
421421
}
422422
}
423423
}
424+
},
425+
"Loading wallet..." : {
426+
424427
},
425428
"Navigation Title" : {
426429
"extractionState" : "stale",

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 91 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,26 @@ private class BDKService {
2525
let storedNetworkString = try? keyClient.getNetwork() ?? Network.signet.description
2626
self.network = Network(stringValue: storedNetworkString ?? "") ?? .signet
2727

28-
switch self.network {
29-
case .bitcoin:
30-
self.esploraURL = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
31-
case .testnet:
32-
self.esploraURL = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
33-
case .regtest:
34-
self.esploraURL = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
35-
case .signet:
36-
self.esploraURL = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
37-
case .testnet4:
38-
self.esploraURL =
39-
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
28+
if let savedURL = try? keyClient.getEsploraURL() {
29+
self.esploraURL = savedURL
30+
} else {
31+
switch self.network {
32+
case .bitcoin:
33+
self.esploraURL =
34+
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
35+
case .testnet:
36+
self.esploraURL =
37+
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
38+
case .regtest:
39+
self.esploraURL =
40+
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
41+
case .signet:
42+
self.esploraURL =
43+
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
44+
case .testnet4:
45+
self.esploraURL =
46+
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
47+
}
4048
}
4149

4250
self.esploraClient = EsploraClient(url: self.esploraURL)
@@ -119,26 +127,33 @@ private class BDKService {
119127
}
120128

121129
func createWallet(words: String?) throws {
130+
let savedURL = try? keyClient.getEsploraURL()
131+
122132
let documentsDirectoryURL = URL.documentsDirectory
123133
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
124134

125135
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
126136
try FileManager.default.removeItem(at: walletDataDirectoryURL)
127137
}
128138

129-
let baseUrl: String
130-
switch self.network {
131-
case .bitcoin:
132-
baseUrl = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
133-
case .testnet:
134-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
135-
case .regtest:
136-
baseUrl = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
137-
case .signet:
138-
baseUrl = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
139-
case .testnet4:
140-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
141-
}
139+
let baseUrl =
140+
savedURL
141+
?? {
142+
let defaultURL =
143+
switch self.network {
144+
case .bitcoin:
145+
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
146+
case .testnet:
147+
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
148+
case .regtest:
149+
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
150+
case .signet:
151+
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
152+
case .testnet4:
153+
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
154+
}
155+
return defaultURL
156+
}()
142157

143158
var words12: String
144159
if let words = words, !words.isEmpty {
@@ -193,27 +208,33 @@ private class BDKService {
193208
}
194209

195210
func createWallet(descriptor: String?) throws {
211+
let savedURL = try? keyClient.getEsploraURL()
212+
196213
let documentsDirectoryURL = URL.documentsDirectory
197214
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
198215

199216
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
200217
try FileManager.default.removeItem(at: walletDataDirectoryURL)
201-
} else {
202218
}
203219

204-
let baseUrl: String
205-
switch self.network {
206-
case .bitcoin:
207-
baseUrl = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
208-
case .testnet:
209-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
210-
case .regtest:
211-
baseUrl = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
212-
case .signet:
213-
baseUrl = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
214-
case .testnet4:
215-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
216-
}
220+
let baseUrl =
221+
savedURL
222+
?? {
223+
let defaultURL =
224+
switch self.network {
225+
case .bitcoin:
226+
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
227+
case .testnet:
228+
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
229+
case .regtest:
230+
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
231+
case .signet:
232+
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
233+
case .testnet4:
234+
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
235+
}
236+
return defaultURL
237+
}()
217238

218239
guard let descriptorString = descriptor, !descriptorString.isEmpty else {
219240
throw WalletError.walletNotFound
@@ -268,26 +289,33 @@ private class BDKService {
268289
}
269290

270291
func createWallet(xpub: String?) throws {
292+
let savedURL = try? keyClient.getEsploraURL()
293+
271294
let documentsDirectoryURL = URL.documentsDirectory
272295
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
273296

274297
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
275298
try FileManager.default.removeItem(at: walletDataDirectoryURL)
276299
}
277300

278-
let baseUrl: String
279-
switch self.network {
280-
case .bitcoin:
281-
baseUrl = Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
282-
case .testnet:
283-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
284-
case .regtest:
285-
baseUrl = Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
286-
case .signet:
287-
baseUrl = Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
288-
case .testnet4:
289-
baseUrl = Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
290-
}
301+
let baseUrl =
302+
savedURL
303+
?? {
304+
let defaultURL =
305+
switch self.network {
306+
case .bitcoin:
307+
Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.first ?? ""
308+
case .testnet:
309+
Constants.Config.EsploraServerURLNetwork.Testnet.allValues.first ?? ""
310+
case .regtest:
311+
Constants.Config.EsploraServerURLNetwork.Regtest.allValues.first ?? ""
312+
case .signet:
313+
Constants.Config.EsploraServerURLNetwork.Signet.allValues.first ?? ""
314+
case .testnet4:
315+
Constants.Config.EsploraServerURLNetwork.Testnet4.allValues.first ?? ""
316+
}
317+
return defaultURL
318+
}()
291319

292320
guard let xpubString = xpub, !xpubString.isEmpty else {
293321
throw WalletError.walletNotFound
@@ -363,20 +391,28 @@ private class BDKService {
363391
}
364392

365393
func deleteWallet() throws {
394+
let savedURL = try? keyClient.getEsploraURL()
395+
let savedNetwork = try? keyClient.getNetwork()
396+
366397
if let bundleID = Bundle.main.bundleIdentifier {
367398
UserDefaults.standard.removePersistentDomain(forName: bundleID)
368399
}
400+
369401
try self.keyClient.deleteBackupInfo()
370-
try self.keyClient.deleteEsplora()
371-
try self.keyClient.deleteNetwork()
372402

373403
let documentsDirectoryURL = URL.documentsDirectory
374404
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
375-
376405
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
377406
try FileManager.default.removeItem(at: walletDataDirectoryURL)
378407
}
379408

409+
if let savedURL = savedURL {
410+
try keyClient.saveEsploraURL(savedURL)
411+
}
412+
if let savedNetwork = savedNetwork {
413+
try keyClient.saveNetwork(savedNetwork)
414+
}
415+
380416
needsFullScan = true
381417
}
382418

BDKSwiftExampleWallet/View Model/HomeViewModel.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class HomeViewModel: ObservableObject {
1414
let bdkClient: BDKClient
1515

1616
var homeViewError: AppError?
17+
var isWalletLoaded = false
1718
var showingHomeViewErrorAlert = false
1819

1920
init(bdkClient: BDKClient = .live) {
@@ -23,6 +24,7 @@ class HomeViewModel: ObservableObject {
2324
func loadWallet() {
2425
do {
2526
try bdkClient.loadWallet()
27+
isWalletLoaded = true
2628
} catch let error as DescriptorError {
2729
let errorMessage: String
2830
switch error {

BDKSwiftExampleWallet/View/HomeView.swift

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,24 @@ struct HomeView: View {
1212
@Binding var navigationPath: NavigationPath
1313

1414
var body: some View {
15-
1615
ZStack {
1716
Color(uiColor: UIColor.systemBackground)
1817

19-
WalletView(
20-
viewModel: .init(
21-
bdkClient: .live,
22-
priceClient: .live
23-
),
24-
sendNavigationPath: $navigationPath
25-
)
26-
.tint(.primary)
27-
.onAppear {
28-
viewModel.loadWallet()
18+
if !viewModel.isWalletLoaded {
19+
ProgressView("Loading wallet...")
20+
} else {
21+
WalletView(
22+
viewModel: .init(
23+
bdkClient: .live,
24+
priceClient: .live
25+
),
26+
sendNavigationPath: $navigationPath
27+
)
28+
.tint(.primary)
2929
}
30-
30+
}
31+
.onAppear {
32+
viewModel.loadWallet()
3133
}
3234
.alert(isPresented: $viewModel.showingHomeViewErrorAlert) {
3335
Alert(

0 commit comments

Comments
 (0)