CAKE-192 | created ParsedAddress class; applied this class to parse_address_from_domain.dart, send_page.dart and exchange_page.dart
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;
|
||||||
|
}
|
Loading…
Reference in new issue