import 'dart:async'; import 'package:hash_wallet/entities/exchange_api_mode.dart'; import 'package:hash_wallet/entities/fiat_api_mode.dart'; import 'package:hash_wallet/evm/evm.dart'; import 'package:hash_wallet/generated/i18n.dart'; import 'package:hash_wallet/reactions/wallet_connect.dart'; import 'package:hash_wallet/src/widgets/alert_with_one_action.dart'; import 'package:hash_wallet/store/app_store.dart'; import 'package:hash_wallet/store/settings_store.dart'; import 'package:hash_wallet/utils/show_pop_up.dart'; import 'package:hash_wallet/utils/tor.dart'; import 'package:cw_core/balance.dart'; import 'package:cw_core/transaction_history.dart'; import 'package:cw_core/transaction_info.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:flutter/material.dart'; import 'package:mobx/mobx.dart'; part 'connection_sync_view_model.g.dart'; class ConnectionSyncViewModel = ConnectionSyncViewModelBase with _$ConnectionSyncViewModel; abstract class ConnectionSyncViewModelBase with Store { ConnectionSyncViewModelBase(this._settingsStore, this._wallet); final SettingsStore _settingsStore; final WalletBase, TransactionInfo> _wallet; @computed bool get lookupTwitter => _settingsStore.lookupsTwitter; @computed bool get lookupsZanoAlias => _settingsStore.lookupsZanoAlias; @computed bool get looksUpMastodon => _settingsStore.lookupsMastodon; @computed bool get looksUpYatService => _settingsStore.lookupsYatService; @computed bool get looksUpUnstoppableDomains => _settingsStore.lookupsUnstoppableDomains; @computed bool get looksUpOpenAlias => _settingsStore.lookupsOpenAlias; @computed bool get looksUpENS => _settingsStore.lookupsENS; @computed bool get looksUpWellKnown => _settingsStore.lookupsWellKnown; @computed ExchangeApiMode get exchangeStatus => _settingsStore.exchangeStatus; @computed FiatApiMode get fiatApiMode => _settingsStore.fiatApiMode; @computed bool get disableAutomaticExchangeStatusUpdates => _settingsStore.disableAutomaticExchangeStatusUpdates; @computed bool get builtinTor => _settingsStore.currentBuiltinTor; @computed bool get hasPowNodes => [WalletType.nano, WalletType.banano].contains(_wallet.type); @computed bool get useMempoolFeeAPI => _settingsStore.useMempoolFeeAPI; @computed bool get canUseMempoolFeeAPI => _wallet.type == WalletType.bitcoin; @computed bool get useBlinkProtection => _settingsStore.useBlinkProtection; bool get canUseBlinkProtection => canSupportBlinkProtection(_wallet.chainId); @computed bool get useEtherscan => _settingsStore.useEtherscan; @computed bool get usePolygonScan => _settingsStore.usePolygonScan; @computed bool get useBaseScan => _settingsStore.useBaseScan; @computed bool get useArbiScan => _settingsStore.useArbiScan; @computed bool get useBscScan => _settingsStore.useBscScan; @computed bool get canUseEtherscan => _wallet.chainId == 1; @computed bool get canUsePolygonScan => _wallet.chainId == 137; @computed bool get canUseBaseScan => _wallet.chainId == 8453; @computed bool get canUseArbiScan => _wallet.chainId == 42161; @computed bool get canUseBscScan => _wallet.chainId == 56; @action void setLookupsTwitter(bool value) => _settingsStore.lookupsTwitter = value; @action void setLookupsZanoAlias(bool value) => _settingsStore.lookupsZanoAlias = value; @action void setLookupsMastodon(bool value) => _settingsStore.lookupsMastodon = value; @action void setLookupsENS(bool value) => _settingsStore.lookupsENS = value; @action void setLookupsWellKnown(bool value) => _settingsStore.lookupsWellKnown = value; @action void setLookupsYatService(bool value) => _settingsStore.lookupsYatService = value; @action void setLookupsUnstoppableDomains(bool value) => _settingsStore.lookupsUnstoppableDomains = value; @action void setLookupsOpenAlias(bool value) => _settingsStore.lookupsOpenAlias = value; @action void setUseMempoolFeeAPI(bool value) => _settingsStore.useMempoolFeeAPI = value; @action void setDisableAutomaticExchangeStatusUpdates(bool value) => _settingsStore.disableAutomaticExchangeStatusUpdates = value; @action void setFiatMode(FiatApiMode fiatApiMode) => _settingsStore.fiatApiMode = fiatApiMode; @action void setExchangeApiMode(ExchangeApiMode value) => _settingsStore.exchangeStatus = value; @action void setUseBlinkProtection(bool value) => _settingsStore.useBlinkProtection = value; @action void setUseEtherscan(bool value) { _settingsStore.useEtherscan = value; evm!.updateScanProviderUsageState(_wallet, value); } @action void setUsePolygonScan(bool value) { _settingsStore.usePolygonScan = value; evm!.updateScanProviderUsageState(_wallet, value); } @action void setUseBaseScan(bool value) { _settingsStore.useBaseScan = value; evm!.updateScanProviderUsageState(_wallet, value); } @action void setUseArbiScan(bool value) { _settingsStore.useArbiScan = value; evm!.updateScanProviderUsageState(_wallet, value); } @action void setUseBscScan(bool value) { _settingsStore.useBscScan = value; evm!.updateScanProviderUsageState(_wallet, value); } @action void setBuiltinTor(bool value, BuildContext context) { if (value) { unawaited( showPopUp( context: context, builder: (BuildContext context) { return AlertWithOneAction( alertTitle: S.of(context).tor_connection, alertContent: S.of(context).tor_experimental, buttonText: S.of(context).ok, buttonAction: () => Navigator.of(context).pop(true), ); }, ), ); } _settingsStore.currentBuiltinTor = value; if (value) { unawaited(ensureTorStarted(context: context).then((_) async { if (_settingsStore.currentBuiltinTor == false) return; int? chainId; if (isEVMCompatibleChain(_wallet.type)) { chainId = evm!.getSelectedChainId(_wallet); } await _wallet.connectToNode( node: _settingsStore.getCurrentNode(_wallet.type, chainId: chainId)); })); } else { unawaited(ensureTorStopped(context: context).then((_) async { if (_settingsStore.currentBuiltinTor == true) return; int? chainId; if (isEVMCompatibleChain(_wallet.type)) { chainId = evm!.getSelectedChainId(_wallet); } await _wallet.connectToNode( node: _settingsStore.getCurrentNode(_wallet.type, chainId: chainId)); })); } } }