// // XCBActions.swift // Tusker // // Created by Shadowfacts on 9/23/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import UIKit struct XCBActions { // MARK: - Posts static func postStatus(_ url: XCallbackURL) -> Bool { let session = XCBManager.createSession(type: .postStatus, url: url) let mentioning = url.arguments["mentioning"] let text = url.arguments["text"] func postStatusSilently() { var status = "" if let mentioning = mentioning { status += mentioning } if let text = text { status += text } let request = MastodonController.shared.client.createStatus(text: status) MastodonController.shared.client.run(request) { response in if case let .success(status, _) = response { session.complete(with: .success, additionalData: [ "statusURL": status.url?.absoluteString, "statusURI": status.uri ]) } else if case let .failure(error) = response { session.complete(with: .error, additionalData: [ "error": error.localizedDescription ]) } } } func showComposeStatus() { let vc = ComposeViewController.create(for: session, mentioning: mentioning, text: text) UIApplication.shared.keyWindow!.rootViewController!.present(vc, animated: true) } let silent = Bool(url.arguments["silent"] ?? "false") ?? false if silent { if let source = url.source { let permission = Preferences.shared.silentActions[source] ?? .undecided switch permission { case .accepted: postStatusSilently() case .rejected: showComposeStatus() case .undecided: let alert = UIAlertController(title: "\(source) wants to perform actions silently", message: "Accepting will allow \(source) to perform actions without your confirmation, rejecting will always prompt for confirmation.", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Accept", style: .default, handler: { (_) in Preferences.shared.silentActions[source] = .accepted postStatusSilently() })) alert.addAction(UIAlertAction(title: "Reject", style: .default, handler: { (_) in Preferences.shared.silentActions[source] = .rejected showComposeStatus() })) UIApplication.shared.keyWindow!.rootViewController!.present(alert, animated: true) } } else { session.complete(with: .error, additionalData: ["error": "Cannot perform silent action without source app, x-source parameter must be specified"]) } } else { showComposeStatus() } return true } }