diff --git a/cw_monero/lib/api/wallet.dart b/cw_monero/lib/api/wallet.dart index 050ed2a09..b01d76565 100644 --- a/cw_monero/lib/api/wallet.dart +++ b/cw_monero/lib/api/wallet.dart @@ -80,9 +80,16 @@ String getSeedLegacy(String? language) { Map>> addressCache = {}; String getAddress({int accountIndex = 0, int addressIndex = 0}) { - + + int count = 0; + while (monero.Wallet_numSubaddresses(wptr!, accountIndex: accountIndex) - 1 < addressIndex) { + printV("adding subaddress"); monero.Wallet_addSubaddress(wptr!, accountIndex: accountIndex); + if (count > 50) { + throw Exception("Failed to add subaddress"); + } + count++; } addressCache[wptr!.address] ??= {}; diff --git a/cw_monero/lib/monero_wallet.dart b/cw_monero/lib/monero_wallet.dart index 41378e29c..dc3efcb91 100644 --- a/cw_monero/lib/monero_wallet.dart +++ b/cw_monero/lib/monero_wallet.dart @@ -162,8 +162,8 @@ abstract class MoneroWalletBase bool isMainThread = Isolate.current.debugName == "main"; printV("isMainThread: $isMainThread"); - // _autoSaveTimer = - // Timer.periodic(Duration(seconds: _autoSaveInterval), (_) async => await save()); + _autoSaveTimer = + Timer.periodic(Duration(seconds: _autoSaveInterval), (_) async => await save()); // update transaction details after restore walletAddresses.subaddressList.update(accountIndex: walletAddresses.account?.id ?? 0); @@ -203,34 +203,21 @@ abstract class MoneroWalletBase @override Future startSync({bool isBackgroundSync = false}) async { - // if (isBackgroundSync) { - // try { - // syncStatus = AttemptingSyncStatus(); - // monero_wallet.startBackgroundSync(); - // isBackgroundSyncing = true; - // _setListeners(); - // _listener?.start(); - // return; - // } catch (e) { - // isBackgroundSyncing = false; - // syncStatus = FailedSyncStatus(); - // printV(e); - // rethrow; - // } - // } - try { syncStatus = AttemptingSyncStatus(); - // monero_wallet.startRefresh(); - monero_wallet.setupBackgroundSync( - backgroundSyncType: 2, - walletPassword: password, - backgroundCachePassword: "testing-cache-password", - ); - monero_wallet.startBackgroundSync(); if (isBackgroundSync) { + monero_wallet.setupBackgroundSync( + backgroundSyncType: 2, + walletPassword: password, + backgroundCachePassword: "testing-cache-password", + ); + monero_wallet.startBackgroundSync(); isBackgroundSyncing = true; + } else { + monero_wallet.stopBackgroundSync(password); + isBackgroundSyncing = false; } + monero_wallet.startRefresh(); _setListeners(); _listener?.start(); } catch (e) { diff --git a/lib/entities/background_tasks.dart b/lib/entities/background_tasks.dart index bf005c9b7..b5416962e 100644 --- a/lib/entities/background_tasks.dart +++ b/lib/entities/background_tasks.dart @@ -146,11 +146,13 @@ Future onStart(ServiceInstance service) async { for (int i = 0; i < syncingWallets.length; i++) { final wallet = syncingWallets[i]; await wallet.stopSync(isBackgroundSync: true); + await wallet.close(); } // stop all standby wallets (just in case): for (int i = 0; i < standbyWallets.length; i++) { final wallet = standbyWallets[i]; await wallet.stopSync(isBackgroundSync: true); + await wallet.close(); } } catch (e) { printV("error stopping sync: $e");