import 'dart:async'; import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/monero/monero.dart'; import 'package:mobx/mobx.dart'; import 'package:cw_core/wallet_base.dart'; part 'monero_background_sync.g.dart'; class DevMoneroBackgroundSync = DevMoneroBackgroundSyncBase with _$DevMoneroBackgroundSync; abstract class DevMoneroBackgroundSyncBase with Store { DevMoneroBackgroundSyncBase(WalletBase wallet) : wallet = wallet; final WalletBase wallet; @observable Timer? refreshTimer; @observable String? localBlockHeight; @observable String? nodeBlockHeight; @observable String? primaryAddress; @observable String? publicViewKey; @observable String? privateViewKey; @observable String? publicSpendKey; @observable String? privateSpendKey; @observable String? passphrase; @observable String? seed; @observable String? seedLegacy; @observable int tick = -1; @observable bool isBackgroundSyncing = false; Future _setValues() async { localBlockHeight = (await monero!.getCurrentHeight()).toString(); nodeBlockHeight = (await monero!.getNodeHeight(wallet)).toString(); final keys = monero!.getKeys(wallet); primaryAddress = keys["primaryAddress"]; publicViewKey = keys["publicViewKey"]; privateViewKey = keys["privateViewKey"]; publicSpendKey = keys["publicSpendKey"]; privateSpendKey = keys["privateSpendKey"]; passphrase = keys["passphrase"]; seed = wallet.seed; seedLegacy = monero!.getLegacySeed(wallet, "English"); tick = refreshTimer?.tick ?? -1; isBackgroundSyncing = monero!.isBackgroundSyncRunning(wallet); } @action Future manualRescan() async { await wallet.rescan(height: await monero!.getNodeHeight(wallet) - 10000); } @action void startRefreshTimer() { refreshTimer = Timer.periodic(Duration(seconds: 1), (timer) async { await _setValues(); }); } @action void stopRefreshTimer() { refreshTimer?.cancel(); refreshTimer = null; } @action void startBackgroundSync() { unawaited(monero!.startBackgroundSync(wallet)); } @action Future stopBackgroundSync() async { final keyService = getIt.get(); final password = await keyService.getWalletPassword(walletName: wallet.name); await monero!.stopBackgroundSync(wallet, password); } }