You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
LeCountdown/LaunchIntents/IntentHandler.swift

68 lines
2.4 KiB

//
// IntentHandler.swift
// LaunchIntents
//
// Created by Laurent Morvillier on 25/01/2023.
//
import Intents
class IntentHandler: INExtension, SelectCountdownIntentHandling {
// func resolveCountdown(for intent: SelectCountdownIntent, with completion: @escaping (CountdownPropertiesResolutionResult) -> Void) {
// }
func resolveCountdown(for intent: SelectCountdownIntent) async -> CountdownPropertiesResolutionResult {
print("***resolveCountdown")
if let countdown = intent.countdown {
return CountdownPropertiesResolutionResult.success(with: countdown)
} else {
return CountdownPropertiesResolutionResult.needsValue()
}
}
// func provideCountdownOptionsCollection(for intent: SelectCountdownIntent, with completion: @escaping (INObjectCollection<CountdownProperties>?, Error?) -> Void) {
//
//
// }
func provideCountdownOptionsCollection(for intent: SelectCountdownIntent) async throws -> INObjectCollection<CountdownProperties> {
print("*** provideCountdownOptionsCollection")
do {
let countdowns = try IntentDataProvider.main.countdowns()
let properties: [CountdownProperties] = countdowns.map { countdown in
let displayName: String
let formattedDuration = countdown.duration.minuteSecond
if let name = countdown.activity?.name, !name.isEmpty {
displayName = "\(name) (\(formattedDuration))"
} else {
displayName = formattedDuration
}
let cp = CountdownProperties(identifier: countdown.objectID.uriRepresentation().absoluteString, display: displayName)
return cp
}
let collection: INObjectCollection<CountdownProperties> = INObjectCollection(items: properties)
print("*** provide \(properties.count) countdowns")
return collection
} catch {
print("error = \(error)")
throw error
// completion(nil, error)
}
}
override func handler(for intent: INIntent) -> Any {
// This is the default implementation. If you want different objects to handle different intents,
// you can override this and return the handler you want for that particular intent.
return self
}
}