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.
46 lines
1.7 KiB
46 lines
1.7 KiB
//
|
|
// TimerIdentifierAppEntity.swift
|
|
// LeCountdown
|
|
//
|
|
// Created by Laurent Morvillier on 07/03/2023.
|
|
//
|
|
|
|
import Foundation
|
|
import AppIntents
|
|
|
|
@available(iOS 16.0, macOS 13.0, watchOS 9.0, tvOS 16.0, *)
|
|
struct TimerIdentifierAppEntity: AppEntity {
|
|
|
|
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Timer Identifier")
|
|
|
|
static var defaultQuery = TimerIdentifierAppEntityQuery()
|
|
|
|
var id: String // if your identifier is not a String, conform the entity to EntityIdentifierConvertible.
|
|
var displayString: String
|
|
var displayRepresentation: DisplayRepresentation {
|
|
DisplayRepresentation(title: "\(displayString)")
|
|
}
|
|
|
|
init(id: String, displayString: String) {
|
|
self.id = id
|
|
self.displayString = displayString
|
|
}
|
|
struct TimerIdentifierAppEntityQuery: EntityQuery {
|
|
func entities(for identifiers: [TimerIdentifierAppEntity.ID]) async throws -> [TimerIdentifierAppEntity] {
|
|
|
|
await PersistenceController.shared.container.performBackgroundTask { context in
|
|
let timers = identifiers.compactMap { IntentDataProvider.main.timer(context: context, id: $0) }
|
|
return timers.map { TimerIdentifierAppEntity(id: $0.stringId, displayString: $0.displayName) }
|
|
}
|
|
}
|
|
|
|
func suggestedEntities() async throws -> [TimerIdentifierAppEntity] {
|
|
try await PersistenceController.shared.container.performBackgroundTask { context in
|
|
let timers = try IntentDataProvider.main.timers(context: context)
|
|
return timers.map { TimerIdentifierAppEntity(id: $0.stringId, displayString: $0.displayName) }
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|