// // XCBManager.swift // Tusker // // Created by Shadowfacts on 9/23/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import UIKit class XCBManager { static var specs: [XCallbackURLSpec] = [ XCallbackURLSpec(path: "/postStatus", arguments: ["mentioning": true, "text": true], handle: postStatus) ] static var currentSession: XCBSession? static func handle(url: URL) -> Bool { guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return false } if let spec = specs.first(where: { $0.matches(components) }) { let xcbURL = XCallbackURL(spec: spec, components: components) return spec.handle(xcbURL) } return false } static func didComplete(session type: XCBSessionType, result: XCBSessionResult) { if let currentSession = currentSession, currentSession.type == type { currentSession.complete(with: result) self.currentSession = nil } } private static func createSession(type: XCBSessionType, url: XCallbackURL) -> XCBSession { let session = XCBSession(type: type, success: url.success, error: url.error, cancel: url.cancel) currentSession = session return session } static func postStatus(_ url: XCallbackURL) -> Bool { let mentioning = url.arguments["mentioning"] let text = url.arguments["text"] if let window = UIApplication.shared.keyWindow { let session = createSession(type: .postStatus, url: url) let vc = ComposeViewController.create(for: session, mentioning: mentioning, text: text) window.rootViewController?.present(vc, animated: true) return true } return false } }