open wallet even when cache file backup is corrupted (#1720)

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
This commit is contained in:
cyan
2025-03-27 04:47:45 +02:00
committed by GitHub
co-authored by Omar Hatem
parent 604432a66c
commit 72184f5837
+16 -6
View File
@@ -75,6 +75,12 @@ class MoneroRestoreWalletFromKeysCredentials extends WalletCredentials {
final String spendKey;
}
enum OpenWalletTry {
initial,
cacheRestored,
cacheRemoved,
}
class MoneroWalletService extends WalletService<
MoneroNewWalletCredentials,
MoneroRestoreWalletFromSeedCredentials,
@@ -139,7 +145,7 @@ class MoneroWalletService extends WalletService<
}
@override
Future<MoneroWallet> openWallet(String name, String password, {bool? retryOnFailure}) async {
Future<MoneroWallet> openWallet(String name, String password, {OpenWalletTry openWalletTry = OpenWalletTry.initial}) async {
try {
final path = await pathForWallet(name: name, type: getType());
@@ -172,12 +178,16 @@ class MoneroWalletService extends WalletService<
} catch (e) {
// TODO: Implement Exception for wallet list service.
if (retryOnFailure == false) {
rethrow;
switch (openWalletTry) {
case OpenWalletTry.initial:
await restoreOrResetWalletFiles(name);
return await openWallet(name, password, openWalletTry: OpenWalletTry.cacheRestored);
case OpenWalletTry.cacheRestored:
await removeCache(name);
return await openWallet(name, password, openWalletTry: OpenWalletTry.cacheRemoved);
case OpenWalletTry.cacheRemoved:
rethrow;
}
await restoreOrResetWalletFiles(name);
return await openWallet(name, password, retryOnFailure: false);
}
}