Skip to content

Commit eee86f0

Browse files
committed
works
1 parent 0dd7747 commit eee86f0

File tree

7 files changed

+270
-78
lines changed

7 files changed

+270
-78
lines changed

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,6 @@
674674
}
675675
},
676676
"Testnet" : {
677-
"extractionState" : "stale",
678677
"localizations" : {
679678
"fr" : {
680679
"stringUnit" : {

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 68 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,51 @@ private class BDKService {
1313

1414
private var balance: Balance?
1515
private var connection: Connection?
16-
private let esploraClient: EsploraClient
16+
private var esploraClient: EsploraClient
1717
private let keyClient: KeyClient
1818
private var needsFullScan: Bool = false
19-
var network: Network
19+
private(set) var network: Network
20+
private(set) var esploraURL: String
2021
private var wallet: Wallet?
2122

22-
init(
23-
keyClient: KeyClient = .live
24-
) {
25-
let storedNetworkString = try! keyClient.getNetwork() ?? Network.signet.description
26-
let storedEsploraURL =
27-
try! keyClient.getEsploraURL()
28-
?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
29-
30-
self.network = Network(stringValue: storedNetworkString) ?? .signet
23+
init(keyClient: KeyClient = .live) {
3124
self.keyClient = keyClient
32-
self.esploraClient = EsploraClient(url: storedEsploraURL)
25+
26+
let storedNetworkString = try? keyClient.getNetwork() ?? Network.signet.description
27+
self.network = Network(stringValue: storedNetworkString ?? "") ?? .signet
28+
29+
self.esploraURL =
30+
try! keyClient.getEsploraURL() ?? Constants.Config.EsploraServerURLNetwork.Signet.mutiny
31+
self.esploraClient = EsploraClient(url: self.esploraURL)
32+
33+
print("BDKService initialized - Network: \(self.network), Esplora URL: \(self.esploraURL)")
34+
}
35+
36+
func updateNetwork(_ newNetwork: Network) {
37+
if newNetwork != self.network {
38+
print("Updating network from \(self.network) to \(newNetwork)")
39+
self.network = newNetwork
40+
try? keyClient.saveNetwork(newNetwork.description)
41+
updateEsploraClient()
42+
} else {
43+
print("Network update skipped: already set to \(newNetwork)")
44+
}
45+
}
46+
47+
func updateEsploraURL(_ newURL: String) {
48+
if newURL != self.esploraURL {
49+
print("Updating Esplora URL from \(self.esploraURL) to \(newURL)")
50+
self.esploraURL = newURL
51+
try? keyClient.saveEsploraURL(newURL)
52+
updateEsploraClient()
53+
} else {
54+
print("Esplora URL update skipped: already set to \(newURL)")
55+
}
56+
}
57+
58+
private func updateEsploraClient() {
59+
print("Updating Esplora client with URL: \(self.esploraURL)")
60+
self.esploraClient = EsploraClient(url: self.esploraURL)
3361
}
3462

3563
func getAddress() throws -> String {
@@ -311,6 +339,10 @@ struct BDKClient {
311339
let getBackupInfo: () throws -> BackupInfo
312340
let needsFullScan: () -> Bool
313341
let setNeedsFullScan: (Bool) -> Void
342+
let getNetwork: () -> Network
343+
let getEsploraURL: () -> String
344+
let updateNetwork: (Network) -> Void
345+
let updateEsploraURL: (String) -> Void
314346
}
315347

316348
extension BDKClient {
@@ -345,7 +377,25 @@ extension BDKClient {
345377
},
346378
getBackupInfo: { try BDKService.shared.getBackupInfo() },
347379
needsFullScan: { BDKService.shared.needsFullScanOfWallet() },
348-
setNeedsFullScan: { value in BDKService.shared.setNeedsFullScan(value) }
380+
setNeedsFullScan: { value in BDKService.shared.setNeedsFullScan(value) },
381+
getNetwork: {
382+
let network = BDKService.shared.network
383+
print("BDKClient: Getting network - \(network)")
384+
return network
385+
},
386+
getEsploraURL: {
387+
let url = BDKService.shared.esploraURL
388+
print("BDKClient: Getting Esplora URL - \(url)")
389+
return url
390+
},
391+
updateNetwork: { newNetwork in
392+
print("BDKClient: Updating network to \(newNetwork)")
393+
BDKService.shared.updateNetwork(newNetwork)
394+
},
395+
updateEsploraURL: { newURL in
396+
print("BDKClient: Updating Esplora URL to \(newURL)")
397+
BDKService.shared.updateEsploraURL(newURL)
398+
}
349399
)
350400
}
351401

@@ -395,7 +445,11 @@ extension BDKClient {
395445
)
396446
},
397447
needsFullScan: { true },
398-
setNeedsFullScan: { _ in }
448+
setNeedsFullScan: { _ in },
449+
getNetwork: { .signet },
450+
getEsploraURL: { "https://blockstream.info/api" },
451+
updateNetwork: { _ in },
452+
updateEsploraURL: { _ in }
399453
)
400454
}
401455
#endif

BDKSwiftExampleWallet/View Model/Activity/TransactionListViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,9 @@ class TransactionListViewModel {
4343
return savedEsploraURL
4444
}
4545

46+
func getNetwork() -> String? {
47+
let savedNetwork = try? keyClient.getNetwork()
48+
return savedNetwork
49+
}
50+
4651
}

BDKSwiftExampleWallet/View Model/OnboardingViewModel.swift

Lines changed: 141 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,43 @@ class OnboardingViewModel: ObservableObject {
2020
@Published var createWithPersistError: CreateWithPersistError?
2121
@Published var networkColor = Color.gray
2222
@Published var onboardingViewError: AppError?
23+
// @Published var selectedNetwork: Network = .signet {
24+
// didSet {
25+
// do {
26+
// let networkString = selectedNetwork.description
27+
// try keyClient.saveNetwork(networkString)
28+
// selectedURL = availableURLs.first ?? ""
29+
// try keyClient.saveEsploraURL(selectedURL)
30+
// } catch {
31+
// DispatchQueue.main.async {
32+
// self.onboardingViewError = .generic(message: error.localizedDescription)
33+
// }
34+
// }
35+
// }
36+
// }
37+
// @Published var selectedURL: String = "" {
38+
// didSet {
39+
// do {
40+
// try keyClient.saveEsploraURL(selectedURL)
41+
// } catch {
42+
// DispatchQueue.main.async {
43+
// self.onboardingViewError = .generic(message: error.localizedDescription)
44+
// }
45+
// }
46+
// }
47+
// }
2348
@Published var selectedNetwork: Network = .signet {
2449
didSet {
25-
do {
26-
let networkString = selectedNetwork.description
27-
try keyClient.saveNetwork(networkString)
28-
selectedURL = availableURLs.first ?? ""
29-
try keyClient.saveEsploraURL(selectedURL)
30-
} catch {
31-
DispatchQueue.main.async {
32-
self.onboardingViewError = .generic(message: error.localizedDescription)
33-
}
34-
}
50+
print("OnboardingViewModel: Network changed from \(oldValue) to \(selectedNetwork)")
51+
bdkClient.updateNetwork(selectedNetwork)
52+
selectedURL = availableURLs.first ?? ""
53+
bdkClient.updateEsploraURL(selectedURL)
3554
}
3655
}
3756
@Published var selectedURL: String = "" {
3857
didSet {
39-
do {
40-
try keyClient.saveEsploraURL(selectedURL)
41-
} catch {
42-
DispatchQueue.main.async {
43-
self.onboardingViewError = .generic(message: error.localizedDescription)
44-
}
45-
}
58+
print("OnboardingViewModel: Esplora URL changed from \(oldValue) to \(selectedURL)")
59+
bdkClient.updateEsploraURL(selectedURL)
4660
}
4761
}
4862
@Published var words: String = "" {
@@ -63,6 +77,18 @@ class OnboardingViewModel: ObservableObject {
6377
return Constants.Config.EsploraServerURLNetwork.Signet.allValues
6478
}
6579
}
80+
private func availableURLs(for network: Network) -> [String] {
81+
switch network {
82+
case .signet:
83+
return Constants.Config.EsploraServerURLNetwork.Signet.allValues
84+
case .testnet:
85+
return Constants.Config.EsploraServerURLNetwork.Testnet.allValues
86+
case .bitcoin:
87+
return Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues
88+
case .regtest:
89+
return Constants.Config.EsploraServerURLNetwork.Regtest.allValues
90+
}
91+
}
6692
var buttonColor: Color {
6793
switch selectedNetwork {
6894
case .bitcoin:
@@ -76,27 +102,112 @@ class OnboardingViewModel: ObservableObject {
76102
}
77103
}
78104

105+
// init(
106+
// bdkClient: BDKClient = .live,
107+
// keyClient: KeyClient = .live
108+
// ) {
109+
// self.bdkClient = bdkClient
110+
// self.keyClient = keyClient
111+
// print("OnboardingViewModel: Initializing")
112+
//
113+
// let currentNetwork = bdkClient.getNetwork()
114+
// let currentURL = bdkClient.getEsploraURL()
115+
//
116+
// // Set network
117+
// if let storedNetwork = try? keyClient.getNetwork().flatMap({ Network(stringValue: $0) }) {
118+
// self.selectedNetwork = storedNetwork
119+
// if storedNetwork != currentNetwork {
120+
// print("OnboardingViewModel: Network changed from \(currentNetwork) to \(storedNetwork)")
121+
// bdkClient.updateNetwork(storedNetwork)
122+
// } else {
123+
// print("OnboardingViewModel: Network unchanged: \(currentNetwork)")
124+
// }
125+
// } else {
126+
// self.selectedNetwork = currentNetwork
127+
// print("OnboardingViewModel: Using current network: \(currentNetwork)")
128+
// }
129+
//
130+
// // Set Esplora URL
131+
// if let storedURL = try? keyClient.getEsploraURL(), isValidURL(storedURL, for: self.selectedNetwork) {
132+
// self.selectedURL = storedURL
133+
// } else if isValidURL(currentURL, for: self.selectedNetwork) {
134+
// self.selectedURL = currentURL
135+
// } else {
136+
// self.selectedURL = availableURLs(for: self.selectedNetwork).first ?? ""
137+
// }
138+
//
139+
// if self.selectedURL != currentURL {
140+
// print("OnboardingViewModel: Esplora URL changed from \(currentURL) to \(self.selectedURL)")
141+
// bdkClient.updateEsploraURL(self.selectedURL)
142+
// } else {
143+
// print("OnboardingViewModel: Esplora URL unchanged: \(self.selectedURL)")
144+
// }
145+
//
146+
// print("OnboardingViewModel: Initialized with network \(self.selectedNetwork) and URL \(self.selectedURL)")
147+
// }
148+
79149
init(
80150
bdkClient: BDKClient = .live,
81151
keyClient: KeyClient = .live
82152
) {
83153
self.bdkClient = bdkClient
84154
self.keyClient = keyClient
85-
do {
86-
if let networkString = try keyClient.getNetwork() {
87-
self.selectedNetwork = Network(stringValue: networkString) ?? .signet
88-
} else {
89-
self.selectedNetwork = .signet
90-
}
91-
if let esploraURL = try keyClient.getEsploraURL() {
92-
self.selectedURL = esploraURL
155+
print("OnboardingViewModel: Initializing")
156+
157+
let currentNetwork = bdkClient.getNetwork()
158+
let currentURL = bdkClient.getEsploraURL()
159+
160+
// Set network
161+
if let storedNetwork = try? keyClient.getNetwork().flatMap({ Network(stringValue: $0) }) {
162+
self.selectedNetwork = storedNetwork
163+
if storedNetwork != currentNetwork {
164+
print(
165+
"OnboardingViewModel: Network changed from \(currentNetwork) to \(storedNetwork)"
166+
)
167+
bdkClient.updateNetwork(storedNetwork)
93168
} else {
94-
self.selectedURL = availableURLs.first ?? ""
95-
}
96-
} catch {
97-
DispatchQueue.main.async {
98-
self.onboardingViewError = .generic(message: error.localizedDescription)
169+
print("OnboardingViewModel: Network unchanged: \(currentNetwork)")
99170
}
171+
} else {
172+
self.selectedNetwork = currentNetwork
173+
print("OnboardingViewModel: Using current network: \(currentNetwork)")
174+
}
175+
176+
// Set Esplora URL
177+
if let storedURL = try? keyClient.getEsploraURL(),
178+
isValidURL(storedURL, for: self.selectedNetwork)
179+
{
180+
self.selectedURL = storedURL
181+
} else if isValidURL(currentURL, for: self.selectedNetwork) {
182+
self.selectedURL = currentURL
183+
} else {
184+
self.selectedURL = availableURLs(for: self.selectedNetwork).first ?? ""
185+
}
186+
187+
if self.selectedURL != currentURL {
188+
print(
189+
"OnboardingViewModel: Esplora URL changed from \(currentURL) to \(self.selectedURL)"
190+
)
191+
bdkClient.updateEsploraURL(self.selectedURL)
192+
} else {
193+
print("OnboardingViewModel: Esplora URL unchanged: \(self.selectedURL)")
194+
}
195+
196+
print(
197+
"OnboardingViewModel: Initialized with network \(self.selectedNetwork) and URL \(self.selectedURL)"
198+
)
199+
}
200+
201+
private func isValidURL(_ url: String, for network: Network) -> Bool {
202+
switch network {
203+
case .signet:
204+
return Constants.Config.EsploraServerURLNetwork.Signet.allValues.contains(url)
205+
case .testnet:
206+
return Constants.Config.EsploraServerURLNetwork.Testnet.allValues.contains(url)
207+
case .bitcoin:
208+
return Constants.Config.EsploraServerURLNetwork.Bitcoin.allValues.contains(url)
209+
case .regtest:
210+
return Constants.Config.EsploraServerURLNetwork.Regtest.allValues.contains(url)
100211
}
101212
}
102213

0 commit comments

Comments
 (0)