51
}
52
53
final match = RegExp(addressPattern).firstMatch(raw);
54
- return match?.group(0)?.replaceAllMapped(RegExp('[^0-9a-zA-Z]|bitcoincash:|nano_'), (Match match) {
54
+ return match?.group(0)?.replaceAllMapped(RegExp('[^0-9a-zA-Z]|bitcoincash:|nano_'),
55
+ (Match match) {
56
String group = match.group(0)!;
57
if (group.startsWith('bitcoincash:') || group.startsWith('nano_')) {
58
return group;
69
return emailRegex.hasMatch(address);
70
}
71
71
-
72
+ // TODO: refactor this to take Crypto currency instead of ticker, or at least pass in the tag as well
73
Future<ParsedAddress> resolve(BuildContext context, String text, String ticker) async {
74
try {
75
if (text.startsWith('@') && !text.substring(1).contains('@')) {
77
final formattedName = text.substring(1);
78
final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName);
79
final addressFromBio = extractAddressByType(
79
- raw: twitterUser.description, type: CryptoCurrency.fromString(ticker));
80
+ raw: twitterUser.description,
81
+ type: CryptoCurrency.fromString(ticker, walletCurrency: wallet.currency));
82
if (addressFromBio != null) {
83
return ParsedAddress.fetchTwitterAddress(
84
address: addressFromBio,
89
90
final pinnedTweet = twitterUser.pinnedTweet?.text;
91
if (pinnedTweet != null) {
90
- final addressFromPinnedTweet =
91
- extractAddressByType(raw: pinnedTweet, type: CryptoCurrency.fromString(ticker));
92
+ final addressFromPinnedTweet = extractAddressByType(
93
+ raw: pinnedTweet,
94
+ type: CryptoCurrency.fromString(ticker, walletCurrency: wallet.currency));
95
if (addressFromPinnedTweet != null) {
96
return ParsedAddress.fetchTwitterAddress(
97
address: addressFromPinnedTweet,
111
final userName = subText.substring(0, hostNameIndex);
112
113
final mastodonUser =
111
- await MastodonAPI.lookupUserByUserName(userName: userName, apiHost: hostName);
114
+ await MastodonAPI.lookupUserByUserName(userName: userName, apiHost: hostName);
115
116
if (mastodonUser != null) {
114
- String? addressFromBio =
115
- extractAddressByType(raw: mastodonUser.note, type: CryptoCurrency.fromString(ticker));
117
+ String? addressFromBio = extractAddressByType(
118
+ raw: mastodonUser.note, type: CryptoCurrency.fromString(ticker));
119
120
if (addressFromBio != null) {
121
return ParsedAddress.fetchMastodonAddress(
125
profileName: mastodonUser.username);
126
} else {
127
final pinnedPosts =
125
- await MastodonAPI.getPinnedPosts(userId: mastodonUser.id, apiHost: hostName);
128
+ await MastodonAPI.getPinnedPosts(userId: mastodonUser.id, apiHost: hostName);
129
130
if (pinnedPosts.isNotEmpty) {
131
final userPinnedPostsText = pinnedPosts.map((item) => item.content).join('\n');
153
}
154
}
155
if (text.hasOnlyEmojis) {
153
- if(settingsStore.lookupsYatService) {
156
+ if (settingsStore.lookupsYatService) {
157
if (walletType != WalletType.haven) {
158
final addresses = await yatService.fetchYatAddress(text, ticker);
159
return ParsedAddress.fetchEmojiAddress(addresses: addresses, name: text);
169
}
170
171
if (unstoppableDomains.any((domain) => name.trim() == domain)) {
169
- if(settingsStore.lookupsUnstoppableDomains) {
172
+ if (settingsStore.lookupsUnstoppableDomains) {
173
final address = await fetchUnstoppableDomainAddress(text, ticker);
174
return ParsedAddress.fetchUnstoppableDomainAddress(address: address, name: text);
175
}
185
}
186
187
if (formattedName.contains(".")) {
185
- if(settingsStore.lookupsOpenAlias) {
188
+ if (settingsStore.lookupsOpenAlias) {
189
final txtRecord = await OpenaliasRecord.lookupOpenAliasRecord(formattedName);
190
if (txtRecord != null) {
191
final record = await OpenaliasRecord.fetchAddressAndName(
204
String? addressFromBio = extractAddressByType(
205
raw: nostrUserData.about, type: CryptoCurrency.fromString(ticker));
206
if (addressFromBio != null) {
204
- return ParsedAddress.nostrAddress(address: addressFromBio, name: text);
207
+ return ParsedAddress.nostrAddress(
208
+ address: addressFromBio,
209
+ name: text,
210
+ profileImageUrl: nostrUserData.picture,
211
+ profileName: nostrUserData.name);
212
}
213
}
214
}