dev
dart 84 lines 2.82 KB
Raw
1 import 'dart:async';
2 import 'package:cake_wallet/core/fiat_conversion_service.dart';
3 import 'package:cake_wallet/entities/fiat_api_mode.dart';
4 import 'package:cake_wallet/evm/evm.dart';
5 import 'package:cake_wallet/reactions/wallet_connect.dart';
6 import 'package:cake_wallet/solana/solana.dart';
7 import 'package:cake_wallet/store/app_store.dart';
8 import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
9 import 'package:cake_wallet/store/settings_store.dart';
10 import 'package:cake_wallet/tron/tron.dart';
11 import 'package:cw_core/crypto_currency.dart';
12 import 'package:cw_core/utils/print_verbose.dart';
13 import 'package:cw_core/wallet_type.dart';
14 import 'package:mobx/mobx.dart';
15
16 Timer? _timer;
17
18 Future<void> startFiatRateUpdate(
19 AppStore appStore, SettingsStore settingsStore, FiatConversionStore fiatConversionStore) async {
20 if (_timer != null) {
21 return;
22 }
23
24 final _updateFiat = (_) async {
25 try {
26 if (appStore.wallet == null || settingsStore.fiatApiMode == FiatApiMode.disabled) {
27 return;
28 }
29
30 fiatConversionStore.prices[appStore.wallet!.currency] =
31 await FiatConversionService.fetchPrice(
32 crypto: appStore.wallet!.currency,
33 fiat: settingsStore.fiatCurrency,
34 torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly);
35
36 Iterable<CryptoCurrency>? currencies;
37 if (isEVMCompatibleChain(appStore.wallet!.type)) {
38 currencies = evm!.getERC20Currencies(appStore.wallet!).where((element) => element.enabled);
39 }
40
41 if (appStore.wallet!.type == WalletType.solana) {
42 currencies =
43 solana!.getSPLTokenCurrencies(appStore.wallet!).where((element) => element.enabled);
44 }
45
46 if (appStore.wallet!.type == WalletType.tron) {
47 currencies =
48 tron!.getTronTokenCurrencies(appStore.wallet!).where((element) => element.enabled);
49 }
50
51 if (currencies != null) {
52 for (final currency in currencies) {
53 // skip potential scams:
54 if (currency.isPotentialScam) {
55 continue;
56 }
57 () async {
58 fiatConversionStore.prices[currency] = await FiatConversionService.fetchPrice(
59 crypto: currency,
60 fiat: settingsStore.fiatCurrency,
61 torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly);
62 }.call();
63 }
64 }
65 } catch (e) {
66 printV(e);
67 }
68 };
69
70 _timer = Timer.periodic(Duration(seconds: 30), _updateFiat);
71 // also run immediately:
72 _updateFiat(null);
73
74 // setup autorun to listen to changes in fiatApiMode
75 autorun((_) {
76 // restart the timer if fiatApiMode was re-enabled
77 if (settingsStore.fiatApiMode != FiatApiMode.disabled) {
78 _timer = Timer.periodic(Duration(seconds: 30), _updateFiat);
79 _updateFiat(null);
80 } else {
81 _timer?.cancel();
82 }
83 });
84 }