From d3bdc73054edf835191af3537377094504488635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E5=AE=87=E8=88=AA?= Date: Wed, 14 Jun 2017 10:01:54 +0800 Subject: [PATCH] Now handler multiper config in one ss url #165 --- ShadowsocksX-NG/AppDelegate.swift | 6 ++++-- ShadowsocksX-NG/Utils.swift | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift index 192c6d0..df7318c 100644 --- a/ShadowsocksX-NG/AppDelegate.swift +++ b/ShadowsocksX-NG/AppDelegate.swift @@ -730,11 +730,13 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele func handleURLEvent(_ event: NSAppleEventDescriptor, withReplyEvent replyEvent: NSAppleEventDescriptor) { if let urlString = event.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue { - if let url = URL(string: urlString) { + if URL(string: urlString) != nil { NotificationCenter.default.post( name: Notification.Name(rawValue: "NOTIFY_FOUND_SS_URL"), object: nil , userInfo: [ - "urls": [url], + "urls": splitProfile(url: urlString, max: 5).map({ (item: String) -> URL in + return URL(string: item)! + }), "source": "url", ]) } diff --git a/ShadowsocksX-NG/Utils.swift b/ShadowsocksX-NG/Utils.swift index 74c0f54..87a062e 100644 --- a/ShadowsocksX-NG/Utils.swift +++ b/ShadowsocksX-NG/Utils.swift @@ -25,3 +25,28 @@ extension Data { return hexBytes.joined(separator: "") } } + +func splitProfile(url: String, max: Int) -> [String] { + let ssrregexp = "ssr://([A-Za-z0-9_-]+)" + let ssregexp = "ss://([A-Za-z0-9_-]+" + + + if url.hasPrefix("ss://"){ + return splitor(url: url, regexp: ssregexp) + }else if url.hasPrefix("ssr://"){ + return splitor(url: url, regexp: ssrregexp) + } + return [""] +} + +fileprivate func splitor(url: String, regexp: String) -> [String] { + var ret: [String] = [] + var ssrUrl = url + while ssrUrl.range(of:regexp, options: .regularExpression) != nil{ + let range = ssrUrl.range(of:regexp, options: .regularExpression) + let result = ssrUrl.substring(with:range!) + ssrUrl.replaceSubrange(range!, with: "") + ret.append(result) + } + return ret +}