diff --git a/V2rayU/MainMenu.swift b/V2rayU/MainMenu.swift index cab9ede..7a74594 100644 --- a/V2rayU/MainMenu.swift +++ b/V2rayU/MainMenu.swift @@ -455,7 +455,7 @@ class MenuController: NSObject, NSMenuDelegate { noticeTip(title: "import server fail", subtitle: "", informativeText: "no found ss:// , ssr:// or vmess:// from Pasteboard") } } - + @IBAction func pingSpeed(_ sender: NSMenuItem) { let itemList = V2rayServer.list() if itemList.count == 0 { @@ -477,24 +477,30 @@ class MenuController: NSObject, NSMenuDelegate { } func importUri(url: String) { - let uri = url.trimmingCharacters(in: .whitespaces) + let urls = url.split(separator: "\n") + + for url in urls { + let uri = url.trimmingCharacters(in: .whitespaces) - if uri.count == 0 { - noticeTip(title: "import server fail", subtitle: "", informativeText: "import error: uri not found") - return - } + if uri.count == 0 { + noticeTip(title: "import server fail", subtitle: "", informativeText: "import error: uri not found") + continue + } + + // ss://YWVzLTI1Ni1jZmI6ZUlXMERuazY5NDU0ZTZuU3d1c3B2OURtUzIwMXRRMERAMTcyLjEwNS43MS44Mjo4MDk5#翻墙党325.06美国 类型这种含中文的格式不是标准的URL格式 +// if URL(string: uri) == nil { + if !ImportUri.supportProtocol(uri: uri) { + noticeTip(title: "import server fail", subtitle: "", informativeText: "no found ss:// , ssr:// or vmess://") + continue + } + + if let importUri = ImportUri.importUri(uri: uri) { + self.saveServer(importUri: importUri) + continue + } - if URL(string: uri) == nil { noticeTip(title: "import server fail", subtitle: "", informativeText: "no found ss:// , ssr:// or vmess://") - return } - - if let importUri = ImportUri.importUri(uri: uri) { - self.saveServer(importUri: importUri) - return - } - - noticeTip(title: "import server fail", subtitle: "", informativeText: "no found ss:// , ssr:// or vmess://") } func saveServer(importUri: ImportUri) { diff --git a/V2rayU/Scanner.swift b/V2rayU/Scanner.swift index ca40fa7..fc4b0a2 100644 --- a/V2rayU/Scanner.swift +++ b/V2rayU/Scanner.swift @@ -158,21 +158,28 @@ class ImportUri { } func importSSUri(uri: String) { - if URL(string: uri) == nil { + if URL(string: uri) == nil && uri.index(of: "#") == nil { self.error = "invalid ss url" return } + // 支持 ss://YWVzLTI1Ni1jZmI6ZjU1LmZ1bi0wNTM1NDAxNkA0NS43OS4xODAuMTExOjExMDc4#翻墙党300.16美国 格式 + let aUri = uri.split(separator: "#") + self.uri = uri let ss = ShadowsockUri() - ss.Init(url: URL(string: uri)!) + ss.Init(url: URL(string: String(aUri[0]))!) if ss.error.count > 0 { self.error = ss.error self.isValid = false return } - self.remark = ss.remark + if ss.remark.count == 0 && aUri.count > 1 { + self.remark = String(aUri[1]) + } else { + self.remark = ss.remark + } let v2ray = V2rayConfig() var ssServer = V2rayOutboundShadowsockServer() @@ -520,7 +527,7 @@ class ShadowsockUri { self.error = "error: decodeUrl" return } - guard var parsedUrl = URLComponents(string: decodedUrl) else { + guard let parsedUrl = URLComponents(string: decodedUrl) else { self.error = "error: parsedUrl" return }