CAKE-192 | created ParsedAddress class; applied this class to parse_address_from_domain.dart, send_page.dart and exchange_page.dart

wownero
OleksandrSobol 3 years ago
parent f995342491
commit bac491c44f

@ -1,52 +1,40 @@
import 'package:cake_wallet/entities/openalias_record.dart'; 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/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'; const topLevelDomain = 'crypto';
Future<String> parseAddressFromDomain( Future<ParsedAddress> parseAddressFromDomain(
BuildContext context, String domain, String ticker) async { String domain, String ticker) async {
try { try {
final domainParts = domain.split('.'); final domainParts = domain.split('.');
final name = domainParts.last; final name = domainParts.last;
if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) { if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
return domain; return ParsedAddress(domain, ParseFrom.notParsed);
} }
if (name.contains(topLevelDomain)) { if (name.contains(topLevelDomain)) {
final address = await fetchUnstoppableDomainAddress(domain, ticker); final address = await fetchUnstoppableDomainAddress(domain, ticker);
if (address?.isEmpty ?? true) { if (address?.isEmpty ?? true) {
return domain; return ParsedAddress(domain, ParseFrom.notParsed);
} }
showAddressAlert( return ParsedAddress(address, ParseFrom.unstoppableDomains);
context,
S.of(context).address_detected,
S.of(context).address_from_domain(domain));
return address;
} }
final record = await OpenaliasRecord.fetchAddressAndName( final record = await OpenaliasRecord.fetchAddressAndName(
OpenaliasRecord.formatDomainName(domain)); OpenaliasRecord.formatDomainName(domain));
if (record == null || record.address.contains(domain)) { if (record == null || record.address.contains(domain)) {
return domain; return ParsedAddress(domain, ParseFrom.notParsed);
} }
showAddressAlert( return ParsedAddress(record.address, ParseFrom.openAlias);
context,
S.of(context).openalias_alert_title,
S.of(context).openalias_alert_content(domain));
return record.address;
} catch (e) { } catch (e) {
print(e.toString()); print(e.toString());
} }
return domain; return ParsedAddress(domain, ParseFrom.notParsed);
} }

@ -0,0 +1,8 @@
enum ParseFrom {unstoppableDomains, openAlias, notParsed}
class ParsedAddress {
ParsedAddress(this.address, this.parseFrom);
final String address;
final ParseFrom parseFrom;
}

@ -1,7 +1,9 @@
import 'dart:ui'; import 'dart:ui';
import 'package:cake_wallet/entities/parsed_address.dart';
import 'package:cake_wallet/entities/sync_status.dart'; import 'package:cake_wallet/entities/sync_status.dart';
import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/entities/wallet_type.dart';
import 'package:cake_wallet/entities/parse_address_from_domain.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:cake_wallet/src/widgets/standard_checkbox.dart';
import 'package:dotted_border/dotted_border.dart'; import 'package:dotted_border/dotted_border.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -229,7 +231,7 @@ class ExchangePage extends BasePage {
final ticker = exchangeViewModel final ticker = exchangeViewModel
.depositCurrency.title.toLowerCase(); .depositCurrency.title.toLowerCase();
exchangeViewModel.depositAddress = exchangeViewModel.depositAddress =
await parseAddressFromDomain( await applyOpenaliasOrUnstoppableDomains(
context, domain, ticker); context, domain, ticker);
}, },
), ),
@ -284,7 +286,7 @@ class ExchangePage extends BasePage {
final ticker = exchangeViewModel final ticker = exchangeViewModel
.receiveCurrency.title.toLowerCase(); .receiveCurrency.title.toLowerCase();
exchangeViewModel.receiveAddress = exchangeViewModel.receiveAddress =
await parseAddressFromDomain( await applyOpenaliasOrUnstoppableDomains(
context, domain, ticker); context, domain, ticker);
}, },
)), )),
@ -514,12 +516,12 @@ class ExchangePage extends BasePage {
var domain = template.depositAddress; var domain = template.depositAddress;
var ticker = template.depositCurrency.toLowerCase(); var ticker = template.depositCurrency.toLowerCase();
exchangeViewModel.depositAddress = exchangeViewModel.depositAddress =
await parseAddressFromDomain(context, domain, ticker); await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
domain = template.receiveAddress; domain = template.receiveAddress;
ticker = template.receiveCurrency.toLowerCase(); ticker = template.receiveCurrency.toLowerCase();
exchangeViewModel.receiveAddress = exchangeViewModel.receiveAddress =
await parseAddressFromDomain(context, domain, ticker); await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
} }
void _setReactions( void _setReactions(
@ -691,7 +693,7 @@ class ExchangePage extends BasePage {
final domain = depositAddressController.text; final domain = depositAddressController.text;
final ticker = exchangeViewModel.depositCurrency.title.toLowerCase(); final ticker = exchangeViewModel.depositCurrency.title.toLowerCase();
exchangeViewModel.depositAddress = 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 domain = receiveAddressController.text;
final ticker = exchangeViewModel.receiveCurrency.title.toLowerCase(); final ticker = exchangeViewModel.receiveCurrency.title.toLowerCase();
exchangeViewModel.receiveAddress = 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; key.currentState.addressController.text = null;
} }
} }
Future<String> 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;
}
} }

@ -1,6 +1,8 @@
import 'dart:ui'; import 'dart:ui';
import 'package:cake_wallet/entities/parsed_address.dart';
import 'package:cake_wallet/entities/transaction_priority.dart'; import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/entities/parse_address_from_domain.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/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/picker.dart';
@ -757,7 +759,24 @@ class SendPage extends BasePage {
void applyOpenaliasOrUnstoppableDomains(BuildContext context) async { void applyOpenaliasOrUnstoppableDomains(BuildContext context) async {
final domain = _addressController.text; final domain = _addressController.text;
final ticker = sendViewModel.currency.title.toLowerCase(); final ticker = sendViewModel.currency.title.toLowerCase();
_addressController.text = final parsedAddress = await parseAddressFromDomain(domain, ticker);
await parseAddressFromDomain(context, 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;
}
} }
} }

Loading…
Cancel
Save