mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-11-20 02:59:26 +01:00
Merge branch 'soru/fix-links' into 'main'
fix: Punycode-encode unicode domains for platforms which can't handle them Closes #343 See merge request famedly/fluffychat!467
This commit is contained in:
commit
672d359c8b
@ -11,6 +11,13 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
|
"cantOpenUri": "Can't open the URI {uri}",
|
||||||
|
"@cantOpenUri": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {
|
||||||
|
"uri": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"chats": "Chats",
|
"chats": "Chats",
|
||||||
"@chats": {
|
"@chats": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
|
@ -7,6 +7,8 @@ import 'package:fluffychat/config/app_config.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
import 'package:punycode/punycode.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
|
|
||||||
class UrlLauncher {
|
class UrlLauncher {
|
||||||
final String url;
|
final String url;
|
||||||
@ -19,7 +21,34 @@ class UrlLauncher {
|
|||||||
url.toLowerCase().startsWith(AppConfig.schemePrefix)) {
|
url.toLowerCase().startsWith(AppConfig.schemePrefix)) {
|
||||||
return openMatrixToUrl();
|
return openMatrixToUrl();
|
||||||
}
|
}
|
||||||
launch(url);
|
final uri = Uri.tryParse(url);
|
||||||
|
if (uri == null) {
|
||||||
|
// we can't open this thing
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text(L10n.of(context).cantOpenUri(url))));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!{'https', 'http'}.contains(uri.scheme)) {
|
||||||
|
// just launch non-https / non-http uris directly
|
||||||
|
launch(url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (uri.host == null) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text(L10n.of(context).cantOpenUri(url))));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// okay, we have either an http or an https URI.
|
||||||
|
// As some platforms have issues with opening unicode URLs, we are going to help
|
||||||
|
// them out by punycode-encoding them for them ourself.
|
||||||
|
final newHost = uri.host.split('.').map((hostPartEncoded) {
|
||||||
|
final hostPart = Uri.decodeComponent(hostPartEncoded);
|
||||||
|
final hostPartPunycode = punycodeEncode(hostPart);
|
||||||
|
return hostPartPunycode != hostPart + '-'
|
||||||
|
? 'xn--$hostPartPunycode'
|
||||||
|
: hostPart;
|
||||||
|
}).join('.');
|
||||||
|
launch(uri.replace(host: newHost).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void openMatrixToUrl() async {
|
void openMatrixToUrl() async {
|
||||||
|
11
pubspec.lock
11
pubspec.lock
@ -670,12 +670,12 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.5"
|
version: "0.3.5"
|
||||||
matrix_link_text:
|
matrix_link_text:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: matrix_link_text
|
name: matrix_link_text
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1"
|
version: "0.4.2"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -930,6 +930,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
|
punycode:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: punycode
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
quiver:
|
quiver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -47,6 +47,7 @@ dependencies:
|
|||||||
localstorage: ^4.0.0+1
|
localstorage: ^4.0.0+1
|
||||||
lottie: ^1.1.0
|
lottie: ^1.1.0
|
||||||
matrix: ^0.1.11
|
matrix: ^0.1.11
|
||||||
|
matrix_link_text: ^0.4.2
|
||||||
native_imaging:
|
native_imaging:
|
||||||
git: https://gitlab.com/famedly/libraries/native_imaging.git
|
git: https://gitlab.com/famedly/libraries/native_imaging.git
|
||||||
open_noti_settings: ^0.2.0
|
open_noti_settings: ^0.2.0
|
||||||
@ -55,6 +56,7 @@ dependencies:
|
|||||||
permission_handler: ^8.1.4+2
|
permission_handler: ^8.1.4+2
|
||||||
pin_code_text_field: ^1.8.0
|
pin_code_text_field: ^1.8.0
|
||||||
provider: ^5.0.0
|
provider: ^5.0.0
|
||||||
|
punycode: ^1.0.0
|
||||||
receive_sharing_intent: ^1.4.5
|
receive_sharing_intent: ^1.4.5
|
||||||
record: ^3.0.0
|
record: ^3.0.0
|
||||||
scroll_to_index: ^2.0.0
|
scroll_to_index: ^2.0.0
|
||||||
|
Loading…
Reference in New Issue
Block a user