import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/monero/monero.dart'; import 'package:cake_wallet/zcash/zcash.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:mobx/mobx.dart'; part 'rescan_view_model.g.dart'; class RescanViewModel = RescanViewModelBase with _$RescanViewModel; enum RescanWalletState { rescaning, none } abstract class RescanViewModelBase with Store { RescanViewModelBase(this.wallet) : state = RescanWalletState.none, isButtonEnabled = false, doSingleScan = false; final WalletBase wallet; @observable RescanWalletState state; @observable bool isButtonEnabled; @observable bool doSingleScan; @computed bool get isSilentPaymentsScan => wallet.type == WalletType.bitcoin; @computed bool get isMwebScan => wallet.type == WalletType.litecoin; Future get savedRestoreHeight async => switch (wallet.type) { WalletType.monero => wallet.walletInfo.restoreHeight != 0 ? wallet.walletInfo.restoreHeight : monero!.getRestoreHeight(wallet), WalletType.zcash => await zcash!.getBirthHeight(wallet), _ => null, }; Future get isBitcoinMempoolAPIEnabled async => wallet.type == WalletType.bitcoin && await bitcoin!.checkIfMempoolAPIIsEnabled(wallet); @action Future rescanCurrentWallet({required int restoreHeight}) async { state = RescanWalletState.rescaning; if (wallet.type != WalletType.bitcoin) { wallet.rescan(height: restoreHeight); wallet.transactionHistory.clear(); } else { bitcoin!.rescan(wallet, height: restoreHeight, doSingleScan: doSingleScan); } state = RescanWalletState.none; } }