mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
Something in the way
This commit is contained in:
parent
018050081d
commit
9bd445986d
19 changed files with 2395 additions and 1 deletions
|
|
@ -8,6 +8,7 @@
|
|||
import SwiftUI
|
||||
import Defaults
|
||||
import Lottie
|
||||
import Foundation
|
||||
|
||||
private let availableDirectories = FileManager
|
||||
.default
|
||||
|
|
@ -97,6 +98,86 @@ enum AnimationSource: Codable, Hashable, Equatable {
|
|||
}
|
||||
}
|
||||
|
||||
// MARK: - Extension Authorization Models
|
||||
|
||||
enum ExtensionPermissionScope: String, CaseIterable, Codable, Defaults.Serializable {
|
||||
case liveActivities
|
||||
case lockScreenWidgets
|
||||
|
||||
var displayName: String {
|
||||
switch self {
|
||||
case .liveActivities: return "Live Activities"
|
||||
case .lockScreenWidgets: return "Lock Screen Widgets"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum ExtensionAuthorizationStatus: String, CaseIterable, Codable, Defaults.Serializable {
|
||||
case pending
|
||||
case authorized
|
||||
case denied
|
||||
case revoked
|
||||
|
||||
var isActive: Bool {
|
||||
switch self {
|
||||
case .authorized: return true
|
||||
case .pending, .denied, .revoked: return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ExtensionAuthorizationEntry: Codable, Defaults.Serializable, Identifiable, Hashable {
|
||||
let bundleIdentifier: String
|
||||
var appName: String
|
||||
var status: ExtensionAuthorizationStatus
|
||||
var allowedScopes: Set<ExtensionPermissionScope>
|
||||
var requestedAt: Date
|
||||
var grantedAt: Date?
|
||||
var lastActivityAt: Date?
|
||||
var lastDeniedReason: String?
|
||||
var notes: String?
|
||||
|
||||
var id: String { bundleIdentifier }
|
||||
|
||||
init(
|
||||
bundleIdentifier: String,
|
||||
appName: String,
|
||||
status: ExtensionAuthorizationStatus,
|
||||
allowedScopes: Set<ExtensionPermissionScope> = Set(ExtensionPermissionScope.allCases),
|
||||
requestedAt: Date = .now,
|
||||
grantedAt: Date? = nil,
|
||||
lastActivityAt: Date? = nil,
|
||||
lastDeniedReason: String? = nil,
|
||||
notes: String? = nil
|
||||
) {
|
||||
self.bundleIdentifier = bundleIdentifier
|
||||
self.appName = appName
|
||||
self.status = status
|
||||
self.allowedScopes = allowedScopes
|
||||
self.requestedAt = requestedAt
|
||||
self.grantedAt = grantedAt
|
||||
self.lastActivityAt = lastActivityAt
|
||||
self.lastDeniedReason = lastDeniedReason
|
||||
self.notes = notes
|
||||
}
|
||||
|
||||
var isAuthorized: Bool { status.isActive }
|
||||
}
|
||||
|
||||
struct ExtensionRateLimitRecord: Codable, Defaults.Serializable, Hashable, Identifiable {
|
||||
let bundleIdentifier: String
|
||||
var activityTimestamps: [Date]
|
||||
var widgetTimestamps: [Date]
|
||||
|
||||
var id: String { bundleIdentifier }
|
||||
|
||||
init(bundleIdentifier: String, activityTimestamps: [Date] = [], widgetTimestamps: [Date] = []) {
|
||||
self.bundleIdentifier = bundleIdentifier
|
||||
self.activityTimestamps = activityTimestamps
|
||||
self.widgetTimestamps = widgetTimestamps
|
||||
}
|
||||
}
|
||||
|
||||
enum CalendarSelectionState: Codable, Defaults.Serializable {
|
||||
case all
|
||||
case selected(Set<String>)
|
||||
|
|
@ -714,6 +795,16 @@ extension Defaults.Keys {
|
|||
static let selectedAIModel = Key<AIModel?>("selectedAIModel", default: nil)
|
||||
static let enableThinkingMode = Key<Bool>("enableThinkingMode", default: false)
|
||||
static let localModelEndpoint = Key<String>("localModelEndpoint", default: "http://localhost:11434")
|
||||
|
||||
// MARK: Third-Party Extensions
|
||||
static let enableThirdPartyExtensions = Key<Bool>("enableThirdPartyExtensions", default: true)
|
||||
static let enableExtensionLiveActivities = Key<Bool>("enableExtensionLiveActivities", default: true)
|
||||
static let enableExtensionLockScreenWidgets = Key<Bool>("enableExtensionLockScreenWidgets", default: true)
|
||||
static let extensionAuthorizationEntries = Key<[ExtensionAuthorizationEntry]>("extensionAuthorizationEntries", default: [])
|
||||
static let extensionRateLimitRecords = Key<[ExtensionRateLimitRecord]>("extensionRateLimitRecords", default: [])
|
||||
static let extensionDiagnosticsLoggingEnabled = Key<Bool>("extensionDiagnosticsLoggingEnabled", default: true)
|
||||
static let extensionLiveActivityCapacity = Key<Int>("extensionLiveActivityCapacity", default: 4)
|
||||
static let extensionLockScreenWidgetCapacity = Key<Int>("extensionLockScreenWidgetCapacity", default: 4)
|
||||
|
||||
// MARK: Keyboard Shortcuts
|
||||
static let enableShortcuts = Key<Bool>("enableShortcuts", default: true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue