open wallet even when cache file backup is corrupted (#1720)
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
cyan committed
Mar 27, 2025 at 03:47 UTC
72184f5837a8af2b76aa2e7f06e0d9431fb15939
1 file changed
+16
-6
cw_monero/lib/monero_wallet_service.dart
+16
-6
@@ -75,6 +75,12 @@ class MoneroRestoreWalletFromKeysCredentials extends WalletCredentials {
75
final String spendKey;
76
}
77
78
+enum OpenWalletTry {
79
+ initial,
80
+ cacheRestored,
81
+ cacheRemoved,
82
+}
83
+
84
class MoneroWalletService extends WalletService<
85
MoneroNewWalletCredentials,
86
MoneroRestoreWalletFromSeedCredentials,
@@ -139,7 +145,7 @@ class MoneroWalletService extends WalletService<
145
}
146
147
@override
142
- Future<MoneroWallet> openWallet(String name, String password, {bool? retryOnFailure}) async {
148
+ Future<MoneroWallet> openWallet(String name, String password, {OpenWalletTry openWalletTry = OpenWalletTry.initial}) async {
149
try {
150
final path = await pathForWallet(name: name, type: getType());
151
@@ -172,12 +178,16 @@ class MoneroWalletService extends WalletService<
178
} catch (e) {
179
// TODO: Implement Exception for wallet list service.
180
175
- if (retryOnFailure == false) {
176
- rethrow;
181
+ switch (openWalletTry) {
182
+ case OpenWalletTry.initial:
183
+ await restoreOrResetWalletFiles(name);
184
+ return await openWallet(name, password, openWalletTry: OpenWalletTry.cacheRestored);
185
+ case OpenWalletTry.cacheRestored:
186
+ await removeCache(name);
187
+ return await openWallet(name, password, openWalletTry: OpenWalletTry.cacheRemoved);
188
+ case OpenWalletTry.cacheRemoved:
189
+ rethrow;
190
}
178
-
179
- await restoreOrResetWalletFiles(name);
180
- return await openWallet(name, password, retryOnFailure: false);
191
}
192
}
193