diff --git a/lib/domain/singbox/proxy_type.dart b/lib/domain/singbox/proxy_type.dart index a6db3c27..b77cadd4 100644 --- a/lib/domain/singbox/proxy_type.dart +++ b/lib/domain/singbox/proxy_type.dart @@ -4,6 +4,7 @@ enum ProxyType { dns("DNS"), socks("SOCKS"), http("HTTP"), + shadowsocks("Shadowsocks"), vmess("VMess"), trojan("Trojan"), naive("Naive"), diff --git a/lib/utils/link_parsers.dart b/lib/utils/link_parsers.dart index ad79d87d..378ea4e3 100644 --- a/lib/utils/link_parsers.dart +++ b/lib/utils/link_parsers.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:hiddify/domain/clash/clash.dart'; +import 'package:hiddify/domain/singbox/singbox.dart'; import 'package:hiddify/utils/validators.dart'; typedef ProfileLink = ({String url, String name}); @@ -9,7 +9,15 @@ typedef ProfileLink = ({String url, String name}); abstract class LinkParser { // protocols schemas static const protocols = {'clash', 'clashmeta', 'sing-box', 'hiddify'}; - static const rawProtocols = {'vmess', 'vless', 'trojan', 'ss', 'tuic'}; + static const rawProtocols = { + 'ss', + 'vmess', + 'vless', + 'trojan', + 'tuic', + 'hysteria2', + 'ssh', + }; static ProfileLink? parse(String link) { return simple(link) ?? deep(link); @@ -32,10 +40,13 @@ abstract class LinkParser { final fragment = uri.hasFragment ? Uri.decodeComponent(uri.fragment) : null; final name = switch (uri.scheme) { - 'ss' => fragment ?? ProxyType.shadowSocks.label, - 'vless' => fragment ?? ProxyType.vless.label, - 'tuic' => fragment ?? ProxyType.tuic.label, + 'ss' => fragment ?? ProxyType.shadowsocks.label, 'vmess' => ProxyType.vmess.label, + 'vless' => fragment ?? ProxyType.vless.label, + 'trojan' => fragment ?? ProxyType.trojan.label, + 'tuic' => fragment ?? ProxyType.tuic.label, + 'hy2' || 'hysteria2' => fragment ?? ProxyType.hysteria.label, + 'ssh' => fragment ?? ProxyType.ssh.label, _ => null, }; if (name != null) {