Add configurable iPhone widgets

This commit is contained in:
Georg Bauer
2026-08-03 22:06:32 +02:00
parent 2534010d1d
commit c67d274a95
23 changed files with 1151 additions and 56 deletions

View File

@@ -0,0 +1,52 @@
import AppIntents
import Foundation
enum WidgetEnvironment {
static let appGroup = "group.de.rfc1437.gotcha"
static func core() -> GotchaCore {
GotchaCore(
storageDirectory: FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: appGroup
)?.path
)
}
static func servers() -> [ServerRow] {
core().servers()
}
static func selection(for server: ServerRow) -> String {
"\(server.name) · \(server.url)"
}
static func server(for selection: String) -> ServerRow? {
servers().first { self.selection(for: $0) == selection }
}
}
struct WidgetServerOptionsProvider: DynamicOptionsProvider {
func results() async throws -> [String] {
WidgetEnvironment.servers().map(WidgetEnvironment.selection)
}
func defaultResult() async -> String? {
WidgetEnvironment.servers().first.map(WidgetEnvironment.selection)
}
}
struct ActivityWidgetIntent: WidgetConfigurationIntent {
static let title: LocalizedStringResource = "Activity Server"
static let description = IntentDescription("Choose the server whose recent activity appears.")
@Parameter(title: "Server", optionsProvider: WidgetServerOptionsProvider())
var server: String?
}
struct PullsWidgetIntent: WidgetConfigurationIntent {
static let title: LocalizedStringResource = "Pull Request Server"
static let description = IntentDescription("Choose the server whose open pull requests appear.")
@Parameter(title: "Server", optionsProvider: WidgetServerOptionsProvider())
var server: String?
}