From bac491c44f33e6ba0b69fd74dc2fd7bb378b3c5e Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Wed, 7 Jul 2021 17:31:16 +0300 Subject: [PATCH] CAKE-192 | created ParsedAddress class; applied this class to parse_address_from_domain.dart, send_page.dart and exchange_page.dart --- lib/entities/parse_address_from_domain.dart | 30 +++++----------- lib/entities/parsed_address.dart | 8 +++++ lib/src/screens/exchange/exchange_page.dart | 38 +++++++++++++++++---- lib/src/screens/send/send_page.dart | 23 +++++++++++-- 4 files changed, 70 insertions(+), 29 deletions(-) create mode 100644 lib/entities/parsed_address.dart diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index b8112036..0c2b864d 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -1,52 +1,40 @@ import 'package:cake_wallet/entities/openalias_record.dart'; +import 'package:cake_wallet/entities/parsed_address.dart'; import 'package:cake_wallet/entities/unstoppable_domain_address.dart'; -import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart'; -import 'package:flutter/material.dart'; -import 'package:cake_wallet/generated/i18n.dart'; const topLevelDomain = 'crypto'; -Future parseAddressFromDomain( - BuildContext context, String domain, String ticker) async { +Future parseAddressFromDomain( + String domain, String ticker) async { try { final domainParts = domain.split('.'); final name = domainParts.last; if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) { - return domain; + return ParsedAddress(domain, ParseFrom.notParsed); } if (name.contains(topLevelDomain)) { final address = await fetchUnstoppableDomainAddress(domain, ticker); if (address?.isEmpty ?? true) { - return domain; + return ParsedAddress(domain, ParseFrom.notParsed); } - showAddressAlert( - context, - S.of(context).address_detected, - S.of(context).address_from_domain(domain)); - - return address; + return ParsedAddress(address, ParseFrom.unstoppableDomains); } final record = await OpenaliasRecord.fetchAddressAndName( OpenaliasRecord.formatDomainName(domain)); if (record == null || record.address.contains(domain)) { - return domain; + return ParsedAddress(domain, ParseFrom.notParsed); } - showAddressAlert( - context, - S.of(context).openalias_alert_title, - S.of(context).openalias_alert_content(domain)); - - return record.address; + return ParsedAddress(record.address, ParseFrom.openAlias); } catch (e) { print(e.toString()); } - return domain; + return ParsedAddress(domain, ParseFrom.notParsed); } \ No newline at end of file diff --git a/lib/entities/parsed_address.dart b/lib/entities/parsed_address.dart new file mode 100644 index 00000000..f293d99c --- /dev/null +++ b/lib/entities/parsed_address.dart @@ -0,0 +1,8 @@ +enum ParseFrom {unstoppableDomains, openAlias, notParsed} + +class ParsedAddress { + ParsedAddress(this.address, this.parseFrom); + + final String address; + final ParseFrom parseFrom; +} \ No newline at end of file diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index 2209fe01..693eade7 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -1,7 +1,9 @@ import 'dart:ui'; +import 'package:cake_wallet/entities/parsed_address.dart'; import 'package:cake_wallet/entities/sync_status.dart'; import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/entities/parse_address_from_domain.dart'; +import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart'; import 'package:cake_wallet/src/widgets/standard_checkbox.dart'; import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/cupertino.dart'; @@ -229,7 +231,7 @@ class ExchangePage extends BasePage { final ticker = exchangeViewModel .depositCurrency.title.toLowerCase(); exchangeViewModel.depositAddress = - await parseAddressFromDomain( + await applyOpenaliasOrUnstoppableDomains( context, domain, ticker); }, ), @@ -284,7 +286,7 @@ class ExchangePage extends BasePage { final ticker = exchangeViewModel .receiveCurrency.title.toLowerCase(); exchangeViewModel.receiveAddress = - await parseAddressFromDomain( + await applyOpenaliasOrUnstoppableDomains( context, domain, ticker); }, )), @@ -514,12 +516,12 @@ class ExchangePage extends BasePage { var domain = template.depositAddress; var ticker = template.depositCurrency.toLowerCase(); exchangeViewModel.depositAddress = - await parseAddressFromDomain(context, domain, ticker); + await applyOpenaliasOrUnstoppableDomains(context, domain, ticker); domain = template.receiveAddress; ticker = template.receiveCurrency.toLowerCase(); exchangeViewModel.receiveAddress = - await parseAddressFromDomain(context, domain, ticker); + await applyOpenaliasOrUnstoppableDomains(context, domain, ticker); } void _setReactions( @@ -691,7 +693,7 @@ class ExchangePage extends BasePage { final domain = depositAddressController.text; final ticker = exchangeViewModel.depositCurrency.title.toLowerCase(); exchangeViewModel.depositAddress = - await parseAddressFromDomain(context, domain, ticker); + await applyOpenaliasOrUnstoppableDomains(context, domain, ticker); } }); @@ -701,7 +703,7 @@ class ExchangePage extends BasePage { final domain = receiveAddressController.text; final ticker = exchangeViewModel.receiveCurrency.title.toLowerCase(); exchangeViewModel.receiveAddress = - await parseAddressFromDomain(context, domain, ticker); + await applyOpenaliasOrUnstoppableDomains(context, domain, ticker); } }); @@ -775,4 +777,28 @@ class ExchangePage extends BasePage { key.currentState.addressController.text = null; } } + + Future applyOpenaliasOrUnstoppableDomains( + BuildContext context, String domain, String ticker) async { + final parsedAddress = await parseAddressFromDomain(domain, ticker); + + switch (parsedAddress.parseFrom) { + case ParseFrom.unstoppableDomains: + showAddressAlert( + context, + S.of(context).address_detected, + S.of(context).address_from_domain(domain)); + break; + case ParseFrom.openAlias: + showAddressAlert( + context, + S.of(context).openalias_alert_title, + S.of(context).openalias_alert_content(domain)); + break; + case ParseFrom.notParsed: + break; + } + + return parsedAddress.address; + } } diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 3d7e011e..2aa4ebb8 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -1,6 +1,8 @@ import 'dart:ui'; +import 'package:cake_wallet/entities/parsed_address.dart'; import 'package:cake_wallet/entities/transaction_priority.dart'; import 'package:cake_wallet/entities/parse_address_from_domain.dart'; +import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; @@ -757,7 +759,24 @@ class SendPage extends BasePage { void applyOpenaliasOrUnstoppableDomains(BuildContext context) async { final domain = _addressController.text; final ticker = sendViewModel.currency.title.toLowerCase(); - _addressController.text = - await parseAddressFromDomain(context, domain, ticker); + final parsedAddress = await parseAddressFromDomain(domain, ticker); + _addressController.text = parsedAddress.address; + + switch (parsedAddress.parseFrom) { + case ParseFrom.unstoppableDomains: + showAddressAlert( + context, + S.of(context).address_detected, + S.of(context).address_from_domain(domain)); + break; + case ParseFrom.openAlias: + showAddressAlert( + context, + S.of(context).openalias_alert_title, + S.of(context).openalias_alert_content(domain)); + break; + case ParseFrom.notParsed: + break; + } } }