- Fix haven and litecoin fee transaction priority issue - Revert removing fiat rate update and use it to update fiat rate periodically if Fiat API is not disabled
- Fix haven and litecoin fee transaction priority issue - Revert removing fiat rate update and use it to update fiat rate periodically if Fiat API is not disabled
OmarHatem committed
Dec 8, 2022 at 17:23 UTC
ce19be56a05d6cb8861e103f1c8778df6256656f
6 files changed
+104
-24
lib/bitcoin/cw_bitcoin.dart
+4
@@ -51,6 +51,10 @@ class CWBitcoin extends Bitcoin {
51
TransactionPriority deserializeBitcoinTransactionPriority(int raw)
52
=> BitcoinTransactionPriority.deserialize(raw: raw);
53
54
+ @override
55
+ TransactionPriority deserializeLitecoinTransactionPriority(int raw)
56
+ => LitecoinTransactionPriority.deserialize(raw: raw);
57
+
58
@override
59
int getFeeRate(Object wallet, TransactionPriority priority) {
60
final bitcoinWallet = wallet as ElectrumWallet;
lib/entities/preferences_key.dart
+2
@@ -22,6 +22,8 @@ class PreferencesKey {
22
'current_default_settings_migration_version';
23
static const moneroTransactionPriority = 'current_fee_priority_monero';
24
static const bitcoinTransactionPriority = 'current_fee_priority_bitcoin';
25
+ static const havenTransactionPriority = 'current_fee_priority_haven';
26
+ static const litecoinTransactionPriority = 'current_fee_priority_litecoin';
27
static const shouldShowReceiveWarning = 'should_show_receive_warning';
28
static const shouldShowYatPopup = 'should_show_yat_popup';
29
static const moneroWalletPasswordUpdateV1Base = 'monero_wallet_update_v1';
lib/reactions/bootstrap.dart
+2
@@ -1,4 +1,5 @@
1
import 'dart:async';
2
+import 'package:cake_wallet/reactions/fiat_rate_update.dart';
3
import 'package:cake_wallet/reactions/on_current_node_change.dart';
4
import 'package:flutter/cupertino.dart';
5
import 'package:flutter/widgets.dart';
@@ -31,4 +32,5 @@ Future<void> bootstrap(GlobalKey<NavigatorState> navigatorKey) async {
32
appStore, settingsStore, fiatConversionStore);
33
startCurrentFiatChangeReaction(appStore, settingsStore, fiatConversionStore);
34
startOnCurrentNodeChangeReaction(appStore);
35
+ startFiatRateUpdate(appStore, settingsStore, fiatConversionStore);
36
}
lib/reactions/fiat_rate_update.dart
new
+40
@@ -0,0 +1,40 @@
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/entities/update_haven_rate.dart';
5
+import 'package:cake_wallet/store/app_store.dart';
6
+import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
7
+import 'package:cake_wallet/store/settings_store.dart';
8
+import 'package:cw_core/wallet_type.dart';
9
+
10
+Timer? _timer;
11
+
12
+Future<void> startFiatRateUpdate(
13
+ AppStore appStore, SettingsStore settingsStore, FiatConversionStore fiatConversionStore) async {
14
+ if (_timer != null) {
15
+ return;
16
+ }
17
+
18
+ if (appStore.wallet != null && settingsStore.fiatApiMode == FiatApiMode.enabled) {
19
+ fiatConversionStore.prices[appStore.wallet!.currency] = await FiatConversionService.fetchPrice(
20
+ appStore.wallet!.currency, settingsStore.fiatCurrency);
21
+ }
22
+
23
+ _timer = Timer.periodic(Duration(seconds: 30), (_) async {
24
+ if (settingsStore.fiatApiMode == FiatApiMode.disabled) {
25
+ return;
26
+ }
27
+
28
+ try {
29
+ if (appStore.wallet!.type == WalletType.haven) {
30
+ await updateHavenRate(fiatConversionStore);
31
+ } else {
32
+ fiatConversionStore.prices[appStore.wallet!.currency] =
33
+ await FiatConversionService.fetchPrice(
34
+ appStore.wallet!.currency, settingsStore.fiatCurrency);
35
+ }
36
+ } catch (e) {
37
+ print(e);
38
+ }
39
+ });
40
+}
lib/store/settings_store.dart
+55
-24
@@ -44,7 +44,9 @@ abstract class SettingsStoreBase with Store {
44
required this.isBitcoinBuyEnabled,
45
required this.actionlistDisplayMode,
46
TransactionPriority? initialBitcoinTransactionPriority,
47
- TransactionPriority? initialMoneroTransactionPriority})
47
+ TransactionPriority? initialMoneroTransactionPriority,
48
+ TransactionPriority? initialHavenTransactionPriority,
49
+ TransactionPriority? initialLitecoinTransactionPriority})
50
: nodes = ObservableMap<WalletType, Node>.of(nodes),
51
_sharedPreferences = sharedPreferences,
52
fiatCurrency = initialFiatCurrency,
@@ -67,6 +69,14 @@ abstract class SettingsStoreBase with Store {
69
priority[WalletType.bitcoin] = initialBitcoinTransactionPriority;
70
}
71
72
+ if (initialHavenTransactionPriority != null) {
73
+ priority[WalletType.haven] = initialHavenTransactionPriority;
74
+ }
75
+
76
+ if (initialLitecoinTransactionPriority != null) {
77
+ priority[WalletType.litecoin] = initialLitecoinTransactionPriority;
78
+ }
79
+
80
reaction(
81
(_) => fiatCurrency,
82
(FiatCurrency fiatCurrency) => sharedPreferences.setString(
@@ -78,11 +88,25 @@ abstract class SettingsStoreBase with Store {
88
.setBool(PreferencesKey.shouldShowYatPopup, shouldShowYatPopup));
89
90
priority.observe((change) {
81
- final key = change.key == WalletType.monero
82
- ? PreferencesKey.moneroTransactionPriority
83
- : PreferencesKey.bitcoinTransactionPriority;
91
+ final String? key;
92
+ switch (change.key) {
93
+ case WalletType.monero:
94
+ key = PreferencesKey.moneroTransactionPriority;
95
+ break;
96
+ case WalletType.bitcoin:
97
+ key = PreferencesKey.bitcoinTransactionPriority;
98
+ break;
99
+ case WalletType.litecoin:
100
+ key = PreferencesKey.litecoinTransactionPriority;
101
+ break;
102
+ case WalletType.haven:
103
+ key = PreferencesKey.havenTransactionPriority;
104
+ break;
105
+ default:
106
+ key = null;
107
+ }
108
85
- if (change.newValue != null) {
109
+ if (change.newValue != null && key != null) {
110
sharedPreferences.setInt(key, change.newValue!.serialize());
111
}
112
});
@@ -202,33 +226,39 @@ abstract class SettingsStoreBase with Store {
226
static Future<SettingsStore> load(
227
{required Box<Node> nodeSource,
228
required bool isBitcoinBuyEnabled,
205
- TransactionPriority? initialMoneroTransactionPriority,
206
- TransactionPriority? initialBitcoinTransactionPriority,
229
FiatCurrency initialFiatCurrency = FiatCurrency.usd,
230
BalanceDisplayMode initialBalanceDisplayMode =
231
BalanceDisplayMode.availableBalance}) async {
210
- if (initialBitcoinTransactionPriority == null) {
211
- initialBitcoinTransactionPriority = bitcoin?.getMediumTransactionPriority();
212
- }
213
-
214
- if (initialMoneroTransactionPriority == null) {
215
- initialMoneroTransactionPriority = monero?.getDefaultTransactionPriority();
216
- }
232
233
final sharedPreferences = await getIt.getAsync<SharedPreferences>();
234
final currentFiatCurrency = FiatCurrency.deserialize(raw:
235
sharedPreferences.getString(PreferencesKey.currentFiatCurrencyKey)!);
221
- final savedMoneroTransactionPriority =
236
+
237
+ TransactionPriority? moneroTransactionPriority =
238
monero?.deserializeMoneroTransactionPriority(
239
raw: sharedPreferences
240
.getInt(PreferencesKey.moneroTransactionPriority)!);
225
- final savedBitcoinTransactionPriority =
241
+ TransactionPriority? bitcoinTransactionPriority =
242
bitcoin?.deserializeBitcoinTransactionPriority(sharedPreferences
243
.getInt(PreferencesKey.bitcoinTransactionPriority)!);
228
- final moneroTransactionPriority =
229
- savedMoneroTransactionPriority ?? initialMoneroTransactionPriority;
230
- final bitcoinTransactionPriority =
231
- savedBitcoinTransactionPriority ?? initialBitcoinTransactionPriority;
244
+
245
+ TransactionPriority? havenTransactionPriority;
246
+ TransactionPriority? litecoinTransactionPriority;
247
+
248
+ if (sharedPreferences.getInt(PreferencesKey.havenTransactionPriority) != null) {
249
+ havenTransactionPriority = monero?.deserializeMoneroTransactionPriority(
250
+ raw: sharedPreferences.getInt(PreferencesKey.havenTransactionPriority)!);
251
+ }
252
+ if (sharedPreferences.getInt(PreferencesKey.litecoinTransactionPriority) != null) {
253
+ litecoinTransactionPriority = bitcoin?.deserializeLitecoinTransactionPriority(
254
+ sharedPreferences.getInt(PreferencesKey.litecoinTransactionPriority)!);
255
+ }
256
+
257
+ moneroTransactionPriority ??= monero?.getDefaultTransactionPriority();
258
+ bitcoinTransactionPriority ??= bitcoin?.getMediumTransactionPriority();
259
+ havenTransactionPriority ??= monero?.getDefaultTransactionPriority();
260
+ litecoinTransactionPriority ??= bitcoin?.getLitecoinTransactionPriorityMedium();
261
+
262
final currentBalanceDisplayMode = BalanceDisplayMode.deserialize(
263
raw: sharedPreferences
264
.getInt(PreferencesKey.currentBalanceDisplayModeKey)!);
@@ -249,8 +279,7 @@ abstract class SettingsStoreBase with Store {
279
: ThemeType.bright.index;
280
final savedTheme = ThemeList.deserialize(
281
raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ??
252
- legacyTheme ??
253
- 0);
282
+ legacyTheme);
283
final actionListDisplayMode = ObservableList<ActionListDisplayMode>();
284
actionListDisplayMode.addAll(deserializeActionlistDisplayModes(
285
sharedPreferences.getInt(PreferencesKey.displayActionListModeKey) ??
@@ -296,7 +325,7 @@ abstract class SettingsStoreBase with Store {
325
if (havenNode != null) {
326
nodes[WalletType.haven] = havenNode;
327
}
299
-
328
+
329
return SettingsStore(
330
sharedPreferences: sharedPreferences,
331
nodes: nodes,
@@ -314,6 +343,8 @@ abstract class SettingsStoreBase with Store {
343
initialLanguageCode: savedLanguageCode,
344
initialMoneroTransactionPriority: moneroTransactionPriority,
345
initialBitcoinTransactionPriority: bitcoinTransactionPriority,
346
+ initialHavenTransactionPriority: havenTransactionPriority,
347
+ initialLitecoinTransactionPriority: litecoinTransactionPriority,
348
shouldShowYatPopup: shouldShowYatPopup);
349
}
350
@@ -326,7 +357,7 @@ abstract class SettingsStoreBase with Store {
357
// TransactionPriority? initialBitcoinTransactionPriority,
358
// BalanceDisplayMode initialBalanceDisplayMode =
359
// BalanceDisplayMode.availableBalance}) async {
329
-
360
+
361
// if (initialBitcoinTransactionPriority == null) {
362
// initialBitcoinTransactionPriority = bitcoin?.getMediumTransactionPriority();
363
// }
tool/configure.dart
+1
@@ -75,6 +75,7 @@ abstract class Bitcoin {
75
List<TransactionPriority> getTransactionPriorities();
76
List<TransactionPriority> getLitecoinTransactionPriorities();
77
TransactionPriority deserializeBitcoinTransactionPriority(int raw);
78
+ TransactionPriority deserializeLitecoinTransactionPriority(int raw);
79
int getFeeRate(Object wallet, TransactionPriority priority);
80
Future<void> generateNewAddress(Object wallet);
81
Object createBitcoinTransactionCredentials(List<Output> outputs, {required TransactionPriority priority, int? feeRate});