v4.10.0 & v1.7.0 (#1113)

* New versions

* update the new version text after macos [skip ci]

* add cake-wallet headers

* add nano/banano to getAddressFromStringPattern

* Revert "Exolix integration (#1080)"

This reverts commit 9eb6867ab9.

* fix: Bug in conditions check and clean up of repeated code in switch cases (#1117)

* update build numbers [skip ci]

---------

Co-authored-by: fosse <matt.cfosse@gmail.com>
Co-authored-by: Adegoke David <64401859+Blazebrain@users.noreply.github.com>
This commit is contained in:
Omar Hatem
2023-10-09 18:18:59 +03:00
committed by GitHub
co-authored by fosse Adegoke David
parent 5a20d342ad
commit e5408a388e
32 changed files with 146 additions and 554 deletions
@@ -98,11 +98,6 @@ abstract class DashboardViewModelBase with Store {
caption: ExchangeProviderDescription.trocador.title,
onChanged: () => tradeFilterStore
.toggleDisplayExchange(ExchangeProviderDescription.trocador)),
FilterItem(
value: () => tradeFilterStore.displayExolix,
caption: ExchangeProviderDescription.exolix.title,
onChanged: () => tradeFilterStore
.toggleDisplayExchange(ExchangeProviderDescription.exolix)),
]
},
subname = '',
@@ -92,9 +92,8 @@ class TransactionListItem extends ActionListItem with Keyable {
break;
case WalletType.nano:
amount = calculateFiatAmountRaw(
cryptoAmount: nanoUtil!
.getRawAsDecimal(nano!.getTransactionAmountRaw(transaction).toString(), nanoUtil!.rawPerNano)
.toDouble(),
cryptoAmount: double.parse(nanoUtil!.getRawAsDecimalString(
nano!.getTransactionAmountRaw(transaction).toString(), nanoUtil!.rawPerNano)),
price: price);
break;
case WalletType.ethereum:
@@ -1,5 +1,4 @@
import 'dart:async';
import 'package:cake_wallet/exchange/exolix/exolix_exchange_provider.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart';
import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart';
import 'package:cake_wallet/exchange/trocador/trocador_exchange_provider.dart';
@@ -54,9 +53,6 @@ abstract class ExchangeTradeViewModelBase with Store {
case ExchangeProviderDescription.trocador:
_provider = TrocadorExchangeProvider();
break;
case ExchangeProviderDescription.exolix:
_provider = ExolixExchangeProvider();
break;
}
_updateItems();
@@ -6,8 +6,6 @@ import 'package:cake_wallet/core/wallet_change_listener_view_model.dart';
import 'package:cake_wallet/entities/exchange_api_mode.dart';
import 'package:cake_wallet/entities/preferences_key.dart';
import 'package:cake_wallet/entities/wallet_contact.dart';
import 'package:cake_wallet/exchange/exolix/exolix_exchange_provider.dart';
import 'package:cake_wallet/exchange/exolix/exolix_request.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_request.dart';
import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart';
@@ -152,7 +150,6 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
SideShiftExchangeProvider(),
SimpleSwapExchangeProvider(),
TrocadorExchangeProvider(useTorOnly: _useTorOnly),
ExolixExchangeProvider(),
];
@observable
@@ -549,17 +546,6 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
amount = isFixedRateMode ? receiveAmount : depositAmount;
}
if (provider is ExolixExchangeProvider) {
request = ExolixRequest(
from: depositCurrency,
to: receiveCurrency,
fromAmount: depositAmount.replaceAll(',', '.'),
toAmount: receiveAmount.replaceAll(',', '.'),
refundAddress: depositAddress,
address: receiveAddress);
amount = isFixedRateMode ? receiveAmount : depositAmount;
}
amount = amount.replaceAll(',', '.');
if (limitsState is LimitsLoadedSuccessfully) {
+9 -3
View File
@@ -278,7 +278,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
List<bool> conditionsList = [];
for (var output in outputs) {
final show = checkThroughChecksToDisplayTOTP(output.address);
final show = checkThroughChecksToDisplayTOTP(output.extractedAddress);
conditionsList.add(show);
}
@@ -427,9 +428,14 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
}
}
String translateErrorMessage(String error, WalletType walletType, CryptoCurrency currency,) {
String translateErrorMessage(
String error,
WalletType walletType,
CryptoCurrency currency,
) {
if (walletType == WalletType.ethereum || walletType == WalletType.haven) {
if (error.contains('gas required exceeds allowance') || error.contains('insufficient funds for')) {
if (error.contains('gas required exceeds allowance') ||
error.contains('insufficient funds for')) {
return S.current.do_not_have_enough_gas_asset(currency.toString());
}
}
+69 -100
View File
@@ -201,38 +201,15 @@ abstract class Setup2FAViewModelBase with Store {
@observable
ObservableList<VerboseControlSettings> selected2FASettings;
//! The code here works, but can be improved
//! Still trying out various ways to improve it
@action
void selectCakePreset(Cake2FAPresetsOptions cake2FAPreset) {
// The tabs are ordered in the format [Narrow || Normal || Verbose]
// Where Narrow = 0, Normal = 1 and Verbose = 2
switch (cake2FAPreset) {
case Cake2FAPresetsOptions.narrow:
activateCake2FANarrowPreset();
break;
case Cake2FAPresetsOptions.normal:
activateCake2FANormalPreset();
break;
case Cake2FAPresetsOptions.aggressive:
activateCake2FAAggressivePreset();
break;
default:
activateCake2FANormalPreset();
}
}
@action
void checkIfTheCurrentSettingMatchesAnyOfThePresets() {
final hasNormalPreset = checkIfTheNormalPresetIsPresent();
final hasNarrowPreset = checkIfTheNarrowPresetIsPresent();
final hasVerbosePreset = checkIfTheVerbosePresetIsPresent();
if (hasNormalPreset || hasNarrowPreset || hasVerbosePreset) {
unhighlightTabs = false;
} else {
unhighlightTabs = true;
}
if (hasNormalPreset || hasNarrowPreset || hasVerbosePreset) return;
noCake2FAPresetSelected();
}
@action
@@ -288,32 +265,8 @@ abstract class Setup2FAViewModelBase with Store {
}
@action
void activateCake2FANormalPreset() {
_settingsStore.selectedCake2FAPreset = Cake2FAPresetsOptions.normal;
setAllControlsToFalse();
switchShouldRequireTOTP2FAForSendsToNonContact(true);
switchShouldRequireTOTP2FAForSendsToContact(true);
switchShouldRequireTOTP2FAForSendsToInternalWallets(true);
switchShouldRequireTOTP2FAForExchangesToInternalWallets(true);
switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings(true);
}
@action
void activateCake2FANarrowPreset() {
_settingsStore.selectedCake2FAPreset = Cake2FAPresetsOptions.narrow;
setAllControlsToFalse();
switchShouldRequireTOTP2FAForSendsToNonContact(true);
switchShouldRequireTOTP2FAForAddingContacts(true);
switchShouldRequireTOTP2FAForCreatingNewWallet(true);
switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings(true);
}
@action
void activateCake2FAAggressivePreset() {
_settingsStore.selectedCake2FAPreset = Cake2FAPresetsOptions.aggressive;
setAllControlsToFalse();
switchShouldRequireTOTP2FAForAccessingWallet(true);
switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings(true);
void noCake2FAPresetSelected() {
_settingsStore.selectedCake2FAPreset = Cake2FAPresetsOptions.none;
}
@action
@@ -330,90 +283,106 @@ abstract class Setup2FAViewModelBase with Store {
unhighlightTabs = false;
}
final Map<Cake2FAPresetsOptions, List<VerboseControlSettings>> presetsMap = {
Cake2FAPresetsOptions.normal: [
VerboseControlSettings.sendsToContacts,
VerboseControlSettings.sendsToNonContacts,
VerboseControlSettings.sendsToInternalWallets,
VerboseControlSettings.securityAndBackupSettings,
VerboseControlSettings.exchangesToInternalWallets
],
Cake2FAPresetsOptions.narrow: [
VerboseControlSettings.addingContacts,
VerboseControlSettings.sendsToNonContacts,
VerboseControlSettings.creatingNewWallets,
VerboseControlSettings.securityAndBackupSettings,
],
Cake2FAPresetsOptions.aggressive: [
VerboseControlSettings.accessWallet,
VerboseControlSettings.securityAndBackupSettings,
],
Cake2FAPresetsOptions.none: [],
};
@action
void switchShouldRequireTOTP2FAForAccessingWallet(bool value) {
_settingsStore.shouldRequireTOTP2FAForAccessingWallet = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.accessWallet);
} else {
selected2FASettings.remove(VerboseControlSettings.accessWallet);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
void selectCakePreset(Cake2FAPresetsOptions preset) {
presetsMap[preset]?.forEach(toggleControl);
_settingsStore.selectedCake2FAPreset = preset;
}
@action
void toggleControl(VerboseControlSettings control, [bool value = true]) {
final methodsMap = {
VerboseControlSettings.sendsToContacts: switchShouldRequireTOTP2FAForSendsToContact,
VerboseControlSettings.accessWallet: switchShouldRequireTOTP2FAForAccessingWallet,
VerboseControlSettings.addingContacts: switchShouldRequireTOTP2FAForAddingContacts,
VerboseControlSettings.creatingNewWallets: switchShouldRequireTOTP2FAForCreatingNewWallet,
VerboseControlSettings.sendsToNonContacts: switchShouldRequireTOTP2FAForSendsToNonContact,
VerboseControlSettings.sendsToInternalWallets:
switchShouldRequireTOTP2FAForSendsToInternalWallets,
VerboseControlSettings.securityAndBackupSettings:
switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings,
VerboseControlSettings.exchangesToInternalWallets:
switchShouldRequireTOTP2FAForExchangesToInternalWallets,
};
methodsMap[control]?.call(value);
}
@action
void switchShouldRequireTOTP2FAForSendsToContact(bool value) {
_settingsStore.shouldRequireTOTP2FAForSendsToContact = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.sendsToContacts);
} else {
selected2FASettings.remove(VerboseControlSettings.sendsToContacts);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.sendsToContacts, value);
}
@action
void switchShouldRequireTOTP2FAForAccessingWallet(bool value) {
_settingsStore.shouldRequireTOTP2FAForAccessingWallet = value;
updateSelectedSettings(VerboseControlSettings.accessWallet, value);
}
@action
void switchShouldRequireTOTP2FAForSendsToNonContact(bool value) {
_settingsStore.shouldRequireTOTP2FAForSendsToNonContact = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.sendsToNonContacts);
} else {
selected2FASettings.remove(VerboseControlSettings.sendsToNonContacts);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.sendsToNonContacts, value);
}
@action
void switchShouldRequireTOTP2FAForSendsToInternalWallets(bool value) {
_settingsStore.shouldRequireTOTP2FAForSendsToInternalWallets = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.sendsToInternalWallets);
} else {
selected2FASettings.remove(VerboseControlSettings.sendsToInternalWallets);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.sendsToInternalWallets, value);
}
@action
void switchShouldRequireTOTP2FAForExchangesToInternalWallets(bool value) {
_settingsStore.shouldRequireTOTP2FAForExchangesToInternalWallets = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.exchangesToInternalWallets);
} else {
selected2FASettings.remove(VerboseControlSettings.exchangesToInternalWallets);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.exchangesToInternalWallets, value);
}
@action
void switchShouldRequireTOTP2FAForAddingContacts(bool value) {
_settingsStore.shouldRequireTOTP2FAForAddingContacts = value;
if (value)
selected2FASettings.add(VerboseControlSettings.addingContacts);
else {
selected2FASettings.remove(VerboseControlSettings.addingContacts);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.addingContacts, value);
}
@action
void switchShouldRequireTOTP2FAForCreatingNewWallet(bool value) {
_settingsStore.shouldRequireTOTP2FAForCreatingNewWallets = value;
if (value) {
selected2FASettings.add(VerboseControlSettings.creatingNewWallets);
} else {
selected2FASettings.remove(VerboseControlSettings.creatingNewWallets);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
updateSelectedSettings(VerboseControlSettings.creatingNewWallets, value);
}
@action
void switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings(bool value) {
_settingsStore.shouldRequireTOTP2FAForAllSecurityAndBackupSettings = value;
if (value)
selected2FASettings.add(VerboseControlSettings.securityAndBackupSettings);
else {
selected2FASettings.remove(VerboseControlSettings.securityAndBackupSettings);
updateSelectedSettings(VerboseControlSettings.securityAndBackupSettings, value);
}
@action
void updateSelectedSettings(VerboseControlSettings control, bool value) {
if (value) {
selected2FASettings.add(control);
} else {
selected2FASettings.remove(control);
}
checkIfTheCurrentSettingMatchesAnyOfThePresets();
}
-5
View File
@@ -53,11 +53,6 @@ abstract class SupportViewModelBase with Store {
icon: 'assets/images/simpleSwap.png',
linkTitle: 'support@simpleswap.io',
link: 'mailto:support@simpleswap.io'),
LinkListItem(
title: 'Exolix',
icon: 'assets/images/exolix.png',
linkTitle: 'support@exolix.com',
link: 'mailto:support@exolix.com'),
if (!isMoneroOnly) ... [
LinkListItem(
title: 'Wyre',
@@ -2,7 +2,6 @@ import 'dart:async';
import 'package:cake_wallet/exchange/changenow/changenow_exchange_provider.dart';
import 'package:cake_wallet/exchange/exchange_provider.dart';
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
import 'package:cake_wallet/exchange/exolix/exolix_exchange_provider.dart';
import 'package:cake_wallet/exchange/morphtoken/morphtoken_exchange_provider.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart';
import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart';
@@ -55,9 +54,6 @@ abstract class TradeDetailsViewModelBase with Store {
case ExchangeProviderDescription.trocador:
_provider = TrocadorExchangeProvider();
break;
case ExchangeProviderDescription.exolix:
_provider = ExolixExchangeProvider();
break;
}
_updateItems();
@@ -161,12 +157,6 @@ abstract class TradeDetailsViewModelBase with Store {
items.add(StandartListItem(
title: '${trade.providerName} ${S.current.password}', value: trade.password ?? ''));
}
if (trade.provider == ExchangeProviderDescription.exolix) {
final buildURL = 'https://exolix.com/transaction/${trade.id.toString()}';
items.add(
TrackTradeListItem(title: 'Track', value: buildURL, onTap: () => _launchUrl(buildURL)));
}
}
void _launchUrl(String url) {