Something in the way

This commit is contained in:
Hariharan Mudaliar 2026-01-13 14:35:23 +05:30
commit 9bd445986d
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E
19 changed files with 2395 additions and 1 deletions

View file

@ -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)