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