@@ -69,8 +69,8 @@ public class Manager {
6969
7070 let action = String ( path. characters. dropFirst ( ) ) // remove /
7171
72- var parameters = url. query? . parseURLParams ?? [ : ]
73- let actionParameters = Manager . filterProtocolParameters ( parameters)
72+ let parameters = url. query? . parseURLParams ?? [ : ]
73+ let actionParameters = Manager . actionParameters ( parameters)
7474
7575 // is a reponse?
7676 if action == kResponse {
@@ -98,7 +98,7 @@ public class Manager {
9898 // returnParams
9999 let comp = NSURLComponents ( URL: url, resolvingAgainstBaseURL: false ) !
100100 if let query = returnParams? . query {
101- comp. query = ( comp . query ?? " " ) + query
101+ comp &= query
102102 }
103103 if let newURL = comp. URL {
104104 Manager . openURL ( newURL)
@@ -107,13 +107,8 @@ public class Manager {
107107 }
108108 let failureCallback = { ( error: FailureCallbackErrorType ) in
109109 if let urlString = parameters [ kXCUError] , url = NSURL ( string: urlString) {
110-
111- var errorParams : Parameters = [ : ]
112- errorParams [ kXCUErrorCode] = " \( error. code) "
113- errorParams [ kXCUErrorMessage] = error. message
114-
115110 let comp = NSURLComponents ( URL: url, resolvingAgainstBaseURL: false ) !
116- comp. query = ( comp . query ?? " " ) + errorParams . query
111+ comp &= error . XCUErrorQuery
117112 if let newURL = comp. URL {
118113 Manager . openURL ( newURL)
119114 }
@@ -131,12 +126,10 @@ public class Manager {
131126 else {
132127 // unknown action, notifiy it
133128 if let errorURLString = parameters [ kXCUError] , url = NSURL ( string: errorURLString) {
134- var errorParams : Parameters = [ : ]
135- errorParams [ kXCUErrorCode] = " \( ErrorNotSupportedAction) "
136- errorParams [ kXCUErrorMessage] = " \( action) not supported by \( Manager . appName) "
137-
129+ let error = Error . errorWithCode ( . NotSupportedAction, failureReason: " \( action) not supported by \( Manager . appName) " )
130+
138131 let comp = NSURLComponents ( URL: url, resolvingAgainstBaseURL: false ) !
139- comp. query = ( comp . query ?? " " ) + errorParams . query
132+ comp &= error . XCUErrorQuery
140133 if let newURL = comp. URL {
141134 Manager . openURL ( newURL)
142135 }
@@ -145,6 +138,11 @@ public class Manager {
145138 }
146139 return false
147140 }
141+
142+ // Handle url with manager shared instance
143+ public static func handleOpenURL( url: NSURL) - > Bool {
144+ return self . sharedInstance. handleOpenURL ( url)
145+ }
148146
149147 // MARK: - perform action with temporary client
150148
@@ -174,8 +172,13 @@ public class Manager {
174172 guard let urlTypes = NSBundle . mainBundle ( ) . infoDictionary ? [ " CFBundleURLTypes " ] as? [ [ String : AnyObject ] ] else {
175173 return nil
176174 }
177- let schemes = urlTypes. flatMap { $0 [ " CFBundleURLSchemes " ] }
178- return schemes as? [ String ]
175+ var result = [ String] ( )
176+ for urlType in urlTypes {
177+ if let schemes = urlType [ " CFBundleURLSchemes " ] as? [ String ] {
178+ result += schemes
179+ }
180+ }
181+ return result. isEmpty ? nil : result
179182 }
180183
181184 // MARK: internal
@@ -194,10 +197,8 @@ public class Manager {
194197 xcuComponents. scheme = scheme
195198 xcuComponents. host = kXCUHost
196199 xcuComponents. path = kResponse
197-
198-
199- var xcuParams : Parameters = [ : ]
200- xcuParams [ kRequestID] = request. ID
200+
201+ let xcuParams : Parameters = [ kRequestID: request. ID]
201202
202203 if request. successCallback != nil {
203204 xcuComponents. query = ( xcuParams + [ kResponseType: ResponseType . success. rawValue] ) . query
@@ -227,12 +228,12 @@ public class Manager {
227228 Manager . openURL ( URL)
228229 }
229230
230- static func filterProtocolParameters ( dictionary : [ String : String] ) - > [ String : String] {
231- let resultArray : [ ( String , String ) ] = dictionary . filter { tuple in
231+ static func actionParameters ( parameters : [ String : String] ) - > [ String : String] {
232+ let resultArray : [ ( String , String ) ] = parameters . filter { tuple in
232233 return !( tuple. 0 . hasPrefix ( kXCUPrefix) || protocolKeys. contains ( tuple. 0 ) )
233234 }
234235 var result = [ String: String] ( resultArray)
235- if let source = dictionary [ kXCUSource] {
236+ if let source = parameters [ kXCUSource] {
236237 result [ kXCUSource] = source
237238 }
238239 return result
@@ -253,4 +254,22 @@ public class Manager {
253254 return NSBundle . mainBundle ( ) . infoDictionary ? [ " CFBundleDisplayName " ] as? String ?? " CallbackURLKit "
254255 }
255256
256- }
257+ }
258+
259+
260+ #if os(OSX)
261+ extension Manager {
262+
263+ public func registerToURLEvent( ) {
264+ NSAppleEventManager . sharedAppleEventManager ( ) . setEventHandler ( self , andSelector: " handleGetURLEvent:withReplyEvent: " , forEventClass: AEEventClass ( kInternetEventClass) , andEventID: AEEventID ( kAEGetURL) )
265+ }
266+
267+ public func handleGetURLEvent( event: NSAppleEventDescriptor ! , withReplyEvent replyEvent: NSAppleEventDescriptor ! )
268+ {
269+ if let urlString = event. paramDescriptorForKeyword ( AEKeyword ( keyDirectObject) ) ? . stringValue, url = NSURL ( string: urlString) {
270+ handleOpenURL ( url)
271+ }
272+ }
273+
274+ }
275+ #endif
0 commit comments