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 03:47:45 +01:00 committed by GitHub
parent 604432a66c
commit 72184f5837
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -75,6 +75,12 @@ class MoneroRestoreWalletFromKeysCredentials extends WalletCredentials {
final String spendKey; final String spendKey;
} }
enum OpenWalletTry {
initial,
cacheRestored,
cacheRemoved,
}
class MoneroWalletService extends WalletService< class MoneroWalletService extends WalletService<
MoneroNewWalletCredentials, MoneroNewWalletCredentials,
MoneroRestoreWalletFromSeedCredentials, MoneroRestoreWalletFromSeedCredentials,
@ -139,7 +145,7 @@ class MoneroWalletService extends WalletService<
} }
@override @override
Future<MoneroWallet> openWallet(String name, String password, {bool? retryOnFailure}) async { Future<MoneroWallet> openWallet(String name, String password, {OpenWalletTry openWalletTry = OpenWalletTry.initial}) async {
try { try {
final path = await pathForWallet(name: name, type: getType()); final path = await pathForWallet(name: name, type: getType());
@ -172,12 +178,16 @@ class MoneroWalletService extends WalletService<
} catch (e) { } catch (e) {
// TODO: Implement Exception for wallet list service. // TODO: Implement Exception for wallet list service.
if (retryOnFailure == false) { switch (openWalletTry) {
rethrow; 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);
} }
} }