// // AddFeedIntentHandler.swift // NetNewsWire // // Created by Maurice Parker on 10/18/19. // Copyright © 2019 Ranchero Software. All rights reserved. // import Intents public enum AddFeedIntentHandlerError: LocalizedError { case communicationFailure public var errorDescription: String? { switch self { case .communicationFailure: return NSLocalizedString("Unable to communicate with NetNewsWire.", comment: "Communication failure") } } } //public class AddFeedIntentHandler: NSObject, AddFeedIntentHandling { // // override init() { // super.init() // } // // public func resolveUrl(for intent: AddFeedIntent, with completion: @escaping (AddFeedUrlResolutionResult) -> Void) { // guard let url = intent.url else { // completion(.unsupported(forReason: .required)) // return // } // completion(.success(with: url)) // } // // public func provideAccountNameOptions(for intent: AddFeedIntent, with completion: @escaping ([String]?, Error?) -> Void) { // guard let extensionContainers = ExtensionContainersFile.read() else { // completion(nil, AddFeedIntentHandlerError.communicationFailure) // return // } // // let accountNames = extensionContainers.accounts.map { $0.name } // completion(accountNames, nil) // } // // public func resolveAccountName(for intent: AddFeedIntent, with completion: @escaping (AddFeedAccountNameResolutionResult) -> Void) { // guard let accountName = intent.accountName else { // completion(AddFeedAccountNameResolutionResult.notRequired()) // return // } // // guard let extensionContainers = ExtensionContainersFile.read() else { // completion(.unsupported(forReason: .communication)) // return // } // // if extensionContainers.findAccount(forName: accountName) == nil { // completion(.unsupported(forReason: .invalid)) // } else { // completion(.success(with: accountName)) // } // } // // public func provideFolderNameOptions(for intent: AddFeedIntent, with completion: @escaping ([String]?, Error?) -> Void) { // guard let extensionContainers = ExtensionContainersFile.read() else { // completion(nil, AddFeedIntentHandlerError.communicationFailure) // return // } // // guard let accountName = intent.accountName, let account = extensionContainers.findAccount(forName: accountName) else { // completion([String](), nil) // return // } // // let folderNames = account.folders.map { $0.name } // completion(folderNames, nil) // } // // public func resolveFolderName(for intent: AddFeedIntent, with completion: @escaping (AddFeedFolderNameResolutionResult) -> Void) { // guard let accountName = intent.accountName, let folderName = intent.folderName else { // completion(AddFeedFolderNameResolutionResult.notRequired()) // return // } // // guard let extensionContainers = ExtensionContainersFile.read() else { // completion(.unsupported(forReason: .communication)) // return // } // // guard let account = extensionContainers.findAccount(forName: accountName) else { // completion(.unsupported(forReason: .invalid)) // return // } // // if account.findFolder(forName: folderName) == nil { // completion(.unsupported(forReason: .invalid)) // } else { // completion(.success(with: folderName)) // } // return // // } // // public func handle(intent: AddFeedIntent, completion: @escaping (AddFeedIntentResponse) -> Void) { // guard let url = intent.url, let extensionContainers = ExtensionContainersFile.read() else { // completion(AddFeedIntentResponse(code: .failure, userActivity: nil)) // return // } // // let account: ExtensionAccount? = { // if let accountName = intent.accountName { // return extensionContainers.findAccount(forName: accountName) // } else { // return extensionContainers.accounts.first // } // }() // // guard let validAccount = account else { // completion(AddFeedIntentResponse(code: .failure, userActivity: nil)) // return // } // // let container: ExtensionContainer? = { // if let folderName = intent.folderName { // return validAccount.findFolder(forName: folderName) // } else { // return validAccount // } // }() // // guard let validContainer = container, let containerID = validContainer.containerID else { // completion(AddFeedIntentResponse(code: .failure, userActivity: nil)) // return // } // // let request = ExtensionFeedAddRequest(name: nil, feedURL: url, destinationContainerID: containerID) // ExtensionFeedAddRequestFile.save(request) // completion(AddFeedIntentResponse(code: .success, userActivity: nil)) // } // //}