CAKE-356 | applied yat record to parse_address_from_domain.dart and parse_address_from_domain_alert.dart; fixed yat_record.dart, yat_view_model.dart and yat_webview_page.dart
OleksandrSobol committed
Aug 27, 2021 at 20:46 UTC
af356bd8f108cd02a9c2a4cc03fe0f2a619f9c6c
6 files changed
+108
-29
lib/entities/parse_address_from_domain.dart
+15
-1
@@ -1,6 +1,7 @@
1
import 'package:cake_wallet/entities/openalias_record.dart';
2
import 'package:cake_wallet/entities/parsed_address.dart';
3
import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
4
+import 'package:cake_wallet/yat/yat_record.dart';
5
6
const unstoppableDomains = [
7
'crypto',
@@ -22,7 +23,20 @@ Future<ParsedAddress> parseAddressFromDomain(
23
final name = domainParts.last;
24
25
if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
25
- return ParsedAddress(address: domain);
26
+ try {
27
+ final address = await fetchYatAddress(domain);
28
+
29
+ if (address?.isEmpty ?? true) {
30
+ return ParsedAddress(address: domain);
31
+ }
32
+
33
+ return ParsedAddress(
34
+ address: address,
35
+ name: domain,
36
+ parseFrom: ParseFrom.yatRecord);
37
+ } catch (e) {
38
+ return ParsedAddress(address: domain);
39
+ }
40
}
41
42
if (unstoppableDomains.any((domain) => name.contains(domain))) {
lib/entities/parsed_address.dart
+1
-1
@@ -1,4 +1,4 @@
1
-enum ParseFrom {unstoppableDomains, openAlias, notParsed}
1
+enum ParseFrom {unstoppableDomains, openAlias, yatRecord, notParsed}
2
3
class ParsedAddress {
4
ParsedAddress({
lib/src/screens/send/widgets/parse_address_from_domain_alert.dart
+4
@@ -17,6 +17,10 @@ void showAddressAlert(BuildContext context, ParsedAddress parsedAddress) async {
17
title = S.of(context).openalias_alert_title;
18
content = S.of(context).openalias_alert_content(parsedAddress.name);
19
break;
20
+ case ParseFrom.yatRecord:
21
+ title = 'Address detected';
22
+ content = 'This address is from ${parsedAddress.name} on Yat';
23
+ break;
24
case ParseFrom.notParsed:
25
return;
26
}
lib/src/screens/yat/yat_webview_page.dart
+76
-9
@@ -1,3 +1,5 @@
1
+import 'dart:async';
2
+import 'dart:io';
3
import 'package:cake_wallet/palette.dart';
4
import 'package:cake_wallet/src/screens/base_page.dart';
5
import 'package:cake_wallet/view_model/yat_view_model.dart';
@@ -7,7 +9,37 @@ import 'package:webview_flutter/webview_flutter.dart';
9
enum YatMode {create, connect}
10
11
class YatWebViewPage extends BasePage {
10
- YatWebViewPage({this.yatViewModel, this.mode}) {
12
+ YatWebViewPage({this.yatViewModel, this.mode});
13
+
14
+ final YatMode mode;
15
+ final YatViewModel yatViewModel;
16
+
17
+ @override
18
+ String get title => 'Yat';
19
+
20
+ @override
21
+ Color get backgroundDarkColor => Colors.white;
22
+
23
+ @override
24
+ Color get titleColor => Palette.darkBlueCraiola;
25
+
26
+ @override
27
+ Widget body(BuildContext context) => YatWebViewPageBody(yatViewModel, mode);
28
+}
29
+
30
+class YatWebViewPageBody extends StatefulWidget{
31
+ YatWebViewPageBody(this.yatViewModel, this.mode);
32
+
33
+ final YatMode mode;
34
+ final YatViewModel yatViewModel;
35
+
36
+ @override
37
+ YatWebViewPageBodyState createState() =>
38
+ YatWebViewPageBodyState(yatViewModel, mode);
39
+}
40
+
41
+class YatWebViewPageBodyState extends State<YatWebViewPageBody> {
42
+ YatWebViewPageBodyState(this.yatViewModel, this.mode) {
43
switch (mode) {
44
case YatMode.create:
45
url = _baseUrl + _createSuffix;
@@ -20,7 +52,7 @@ class YatWebViewPage extends BasePage {
52
}
53
}
54
23
- static const _baseUrl = 'https://y.at';
55
+ static const _baseUrl = 'https://yat.fyi';
56
static const _signInSuffix = '/sign-in';
57
static const _createSuffix = '/create';
58
@@ -28,18 +60,53 @@ class YatWebViewPage extends BasePage {
60
final YatViewModel yatViewModel;
61
62
String url;
63
+ WebViewController _webViewController;
64
+ GlobalKey _webViewkey;
65
+ Timer _timer;
66
67
@override
33
- String get title => 'Yat';
68
+ void initState() {
69
+ super.initState();
70
+ _webViewkey = GlobalKey();
71
+ if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
72
+ _fetchYatInfo();
73
+ }
74
75
@override
36
- Color get backgroundDarkColor => Colors.white;
76
+ void dispose() {
77
+ super.dispose();
78
+ _timer?.cancel();
79
+ }
80
81
@override
39
- Color get titleColor => Palette.darkBlueCraiola;
82
+ Widget build(BuildContext context) {
83
+ return WebView(
84
+ key: _webViewkey,
85
+ initialUrl: url,
86
+ javascriptMode: JavascriptMode.unrestricted,
87
+ onWebViewCreated: (WebViewController controller) =>
88
+ setState(() => _webViewController = controller));
89
+ }
90
41
- @override
42
- Widget body(BuildContext context) => WebView(
43
- initialUrl: url,
44
- javascriptMode: JavascriptMode.unrestricted);
91
+ void _fetchYatInfo() {
92
+ final keyword = 'dashboard';
93
+ _timer?.cancel();
94
+ _timer = Timer.periodic(Duration(seconds: 1), (timer) async {
95
+
96
+ try {
97
+ if (_webViewController == null) {
98
+ return;
99
+ }
100
+
101
+ final url = await _webViewController.currentUrl();
102
+ print('URL = $url');
103
+ if (url.contains(keyword)) {
104
+ timer.cancel();
105
+ await yatViewModel.fetchCartInfo();
106
+ }
107
+ } catch (e) {
108
+ print(e);
109
+ }
110
+ });
111
+ }
112
}
\ No newline at end of file
lib/view_model/yat_view_model.dart
+9
-7
@@ -4,6 +4,7 @@ import 'package:mobx/mobx.dart';
4
import 'dart:convert';
5
import 'package:cake_wallet/yat/yat_exception.dart';
6
import 'package:http/http.dart';
7
+import 'package:cake_wallet/.secrets.g.dart' as secrets;
8
9
part 'yat_view_model.g.dart';
10
@@ -15,23 +16,24 @@ abstract class YatViewModelBase with Store {
16
final YatStore yatStore;
17
18
Future<void> fetchCartInfo() async {
18
- const _apiKey = ''; // FIXME
19
-
20
- final url = 'https://api.y.at/cart';
19
+ final url = 'https://a.y.at/cart';
20
+ final _apiKey = secrets.yatApiToken;
21
22
final response = await get(
23
url,
24
headers: {
25
- 'Accept': '*/*',
26
- 'Authorization,X-Api-Key': _apiKey
25
+ 'Accept':'*/*',
26
+ 'X-Api-Key': _apiKey
27
}
28
);
29
30
- if (response.statusCode != 200) {
30
+ print('RESPONSE = ${response.body.toString()}');
31
+
32
+ /*if (response.statusCode != 200) {
33
throw YatException(text: response.body.toString());
34
}
35
36
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
35
- yatStore.yatAddress = responseJSON[''] as String; // FIXME
37
+ yatStore.yatAddress = responseJSON[''] as String;*/ // FIXME
38
}
39
}
\ No newline at end of file
lib/yat/yat_record.dart
+3
-11
@@ -3,24 +3,16 @@ import 'package:cake_wallet/yat/yat_exception.dart';
3
import 'package:http/http.dart';
4
5
Future<String> fetchYatAddress(String emojiId) async {
6
- const _apiKey = ''; // FIXME
7
- const _requestURL = 'https://api.y.at/emoji_id/';
6
+ const _requestURL = 'https://a.y.at/emoji_id/';
7
8
final url = _requestURL + emojiId;
10
-
11
- final response = await get(
12
- url,
13
- headers: {
14
- 'Accept': '*/*',
15
- 'Authorization': 'Bearer $_apiKey'
16
- }
17
- );
9
+ final response = await get(url);
10
11
if (response.statusCode != 200) {
12
throw YatException(text: response.body.toString());
13
}
14
15
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
24
- final yatAddress = responseJSON[''] as String; // FIXME
16
+ final yatAddress = responseJSON['result'][2]['data'] as String;
17
return yatAddress;
18
}
\ No newline at end of file