mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-20 06:08:34 +02:00
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:
co-authored by
fosse
Adegoke David
parent
5a20d342ad
commit
e5408a388e
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user