fix: naming of links containing &&detour

This commit is contained in:
hiddify-com
2024-08-06 23:26:36 -04:00
parent 1053f6636b
commit 599a2ddd78

View File

@@ -47,8 +47,7 @@ abstract class LinkParser {
for (final line in lines) { for (final line in lines) {
final uri = Uri.tryParse(line); final uri = Uri.tryParse(line);
if (uri == null) continue; if (uri == null) continue;
final fragment = final fragment = uri.hasFragment ? Uri.decodeComponent(uri.fragment.split("&&detour")[0]) : null;
uri.hasFragment ? Uri.decodeComponent(uri.fragment) : null;
name ??= switch (uri.scheme) { name ??= switch (uri.scheme) {
'ss' => fragment ?? ProxyType.shadowsocks.label, 'ss' => fragment ?? ProxyType.shadowsocks.label,
'ssconf' => fragment ?? ProxyType.shadowsocks.label, 'ssconf' => fragment ?? ProxyType.shadowsocks.label,
@@ -80,24 +79,17 @@ abstract class LinkParser {
final queryParams = uri.queryParameters; final queryParams = uri.queryParameters;
switch (uri.scheme) { switch (uri.scheme) {
case 'clash' || 'clashmeta' when uri.authority == 'install-config': case 'clash' || 'clashmeta' when uri.authority == 'install-config':
if (uri.authority != 'install-config' || if (uri.authority != 'install-config' || !queryParams.containsKey('url')) return null;
!queryParams.containsKey('url')) return null;
return (url: queryParams['url']!, name: queryParams['name'] ?? ''); return (url: queryParams['url']!, name: queryParams['name'] ?? '');
case 'sing-box': case 'sing-box':
if (uri.authority != 'import-remote-profile' || if (uri.authority != 'import-remote-profile' || !queryParams.containsKey('url')) return null;
!queryParams.containsKey('url')) return null;
return (url: queryParams['url']!, name: queryParams['name'] ?? ''); return (url: queryParams['url']!, name: queryParams['name'] ?? '');
case 'hiddify': case 'hiddify':
if (uri.authority == "import") { if (uri.authority == "import") {
return ( return (url: uri.path.substring(1) + (uri.hasQuery ? "?${uri.query}" : ""), name: uri.fragment);
url: uri.path.substring(1) + (uri.hasQuery ? "?${uri.query}" : ""),
name: uri.fragment
);
} }
//for backward compatibility //for backward compatibility
if ((uri.authority != 'install-config' && if ((uri.authority != 'install-config' && uri.authority != 'install-sub') || !queryParams.containsKey('url')) return null;
uri.authority != 'install-sub') ||
!queryParams.containsKey('url')) return null;
return (url: queryParams['url']!, name: queryParams['name'] ?? ''); return (url: queryParams['url']!, name: queryParams['name'] ?? '');
default: default:
return null; return null;