281 lines · 9.6 KB · Swift
RawDownload
import CodexBarCoreimport Foundationimport ServiceManagement extension SettingsStore {    var refreshFrequency: RefreshFrequency {        get { self.defaultsState.refreshFrequency }        set {            self.defaultsState.refreshFrequency = newValue            self.userDefaults.set(newValue.rawValue, forKey: "refreshFrequency")        }    }     var launchAtLogin: Bool {        get { self.defaultsState.launchAtLogin }        set {            self.defaultsState.launchAtLogin = newValue            self.userDefaults.set(newValue, forKey: "launchAtLogin")            LaunchAtLoginManager.setEnabled(newValue)        }    }     var debugMenuEnabled: Bool {        get { self.defaultsState.debugMenuEnabled }        set {            self.defaultsState.debugMenuEnabled = newValue            self.userDefaults.set(newValue, forKey: "debugMenuEnabled")        }    }     var debugDisableKeychainAccess: Bool {        get { self.defaultsState.debugDisableKeychainAccess }        set {            self.defaultsState.debugDisableKeychainAccess = newValue            self.userDefaults.set(newValue, forKey: "debugDisableKeychainAccess")            Self.sharedDefaults?.set(newValue, forKey: "debugDisableKeychainAccess")            KeychainAccessGate.isDisabled = newValue        }    }     var debugFileLoggingEnabled: Bool {        get { self.defaultsState.debugFileLoggingEnabled }        set {            self.defaultsState.debugFileLoggingEnabled = newValue            self.userDefaults.set(newValue, forKey: "debugFileLoggingEnabled")            CodexBarLog.setFileLoggingEnabled(newValue)        }    }     var debugLogLevel: CodexBarLog.Level {        get {            let raw = self.defaultsState.debugLogLevelRaw            return CodexBarLog.parseLevel(raw) ?? .verbose        }        set {            self.defaultsState.debugLogLevelRaw = newValue.rawValue            self.userDefaults.set(newValue.rawValue, forKey: "debugLogLevel")            CodexBarLog.setLogLevel(newValue)        }    }     var debugKeepCLISessionsAlive: Bool {        get { self.defaultsState.debugKeepCLISessionsAlive }        set {            self.defaultsState.debugKeepCLISessionsAlive = newValue            self.userDefaults.set(newValue, forKey: "debugKeepCLISessionsAlive")        }    }     var isVerboseLoggingEnabled: Bool {        self.debugLogLevel.rank <= CodexBarLog.Level.verbose.rank    }     private var debugLoadingPatternRaw: String? {        get { self.defaultsState.debugLoadingPatternRaw }        set {            self.defaultsState.debugLoadingPatternRaw = newValue            if let raw = newValue {                self.userDefaults.set(raw, forKey: "debugLoadingPattern")            } else {                self.userDefaults.removeObject(forKey: "debugLoadingPattern")            }        }    }     var statusChecksEnabled: Bool {        get { self.defaultsState.statusChecksEnabled }        set {            self.defaultsState.statusChecksEnabled = newValue            self.userDefaults.set(newValue, forKey: "statusChecksEnabled")        }    }     var sessionQuotaNotificationsEnabled: Bool {        get { self.defaultsState.sessionQuotaNotificationsEnabled }        set {            self.defaultsState.sessionQuotaNotificationsEnabled = newValue            self.userDefaults.set(newValue, forKey: "sessionQuotaNotificationsEnabled")        }    }     var usageBarsShowUsed: Bool {        get { self.defaultsState.usageBarsShowUsed }        set {            self.defaultsState.usageBarsShowUsed = newValue            self.userDefaults.set(newValue, forKey: "usageBarsShowUsed")        }    }     var resetTimesShowAbsolute: Bool {        get { self.defaultsState.resetTimesShowAbsolute }        set {            self.defaultsState.resetTimesShowAbsolute = newValue            self.userDefaults.set(newValue, forKey: "resetTimesShowAbsolute")        }    }     var menuBarShowsBrandIconWithPercent: Bool {        get { self.defaultsState.menuBarShowsBrandIconWithPercent }        set {            self.defaultsState.menuBarShowsBrandIconWithPercent = newValue            self.userDefaults.set(newValue, forKey: "menuBarShowsBrandIconWithPercent")        }    }     private var menuBarDisplayModeRaw: String? {        get { self.defaultsState.menuBarDisplayModeRaw }        set {            self.defaultsState.menuBarDisplayModeRaw = newValue            if let raw = newValue {                self.userDefaults.set(raw, forKey: "menuBarDisplayMode")            } else {                self.userDefaults.removeObject(forKey: "menuBarDisplayMode")            }        }    }     var menuBarDisplayMode: MenuBarDisplayMode {        get { MenuBarDisplayMode(rawValue: self.menuBarDisplayModeRaw ?? "") ?? .percent }        set { self.menuBarDisplayModeRaw = newValue.rawValue }    }     var showAllTokenAccountsInMenu: Bool {        get { self.defaultsState.showAllTokenAccountsInMenu }        set {            self.defaultsState.showAllTokenAccountsInMenu = newValue            self.userDefaults.set(newValue, forKey: "showAllTokenAccountsInMenu")        }    }     var menuBarMetricPreferencesRaw: [String: String] {        get { self.defaultsState.menuBarMetricPreferencesRaw }        set {            self.defaultsState.menuBarMetricPreferencesRaw = newValue            self.userDefaults.set(newValue, forKey: "menuBarMetricPreferences")        }    }     var costUsageEnabled: Bool {        get { self.defaultsState.costUsageEnabled }        set {            self.defaultsState.costUsageEnabled = newValue            self.userDefaults.set(newValue, forKey: "tokenCostUsageEnabled")        }    }     var hidePersonalInfo: Bool {        get { self.defaultsState.hidePersonalInfo }        set {            self.defaultsState.hidePersonalInfo = newValue            self.userDefaults.set(newValue, forKey: "hidePersonalInfo")        }    }     var randomBlinkEnabled: Bool {        get { self.defaultsState.randomBlinkEnabled }        set {            self.defaultsState.randomBlinkEnabled = newValue            self.userDefaults.set(newValue, forKey: "randomBlinkEnabled")        }    }     var menuBarShowsHighestUsage: Bool {        get { self.defaultsState.menuBarShowsHighestUsage }        set {            self.defaultsState.menuBarShowsHighestUsage = newValue            self.userDefaults.set(newValue, forKey: "menuBarShowsHighestUsage")        }    }     var claudeWebExtrasEnabled: Bool {        get { self.claudeWebExtrasEnabledRaw }        set { self.claudeWebExtrasEnabledRaw = newValue }    }     private var claudeWebExtrasEnabledRaw: Bool {        get { self.defaultsState.claudeWebExtrasEnabledRaw }        set {            self.defaultsState.claudeWebExtrasEnabledRaw = newValue            self.userDefaults.set(newValue, forKey: "claudeWebExtrasEnabled")            CodexBarLog.logger(LogCategories.settings).info(                "Claude web extras updated",                metadata: ["enabled": newValue ? "1" : "0"])        }    }     var showOptionalCreditsAndExtraUsage: Bool {        get { self.defaultsState.showOptionalCreditsAndExtraUsage }        set {            self.defaultsState.showOptionalCreditsAndExtraUsage = newValue            self.userDefaults.set(newValue, forKey: "showOptionalCreditsAndExtraUsage")        }    }     var openAIWebAccessEnabled: Bool {        get { self.defaultsState.openAIWebAccessEnabled }        set {            self.defaultsState.openAIWebAccessEnabled = newValue            self.userDefaults.set(newValue, forKey: "openAIWebAccessEnabled")            CodexBarLog.logger(LogCategories.settings).info(                "OpenAI web access updated",                metadata: ["enabled": newValue ? "1" : "0"])        }    }     var jetbrainsIDEBasePath: String {        get { self.defaultsState.jetbrainsIDEBasePath }        set {            self.defaultsState.jetbrainsIDEBasePath = newValue            self.userDefaults.set(newValue, forKey: "jetbrainsIDEBasePath")        }    }     var mergeIcons: Bool {        get { self.defaultsState.mergeIcons }        set {            self.defaultsState.mergeIcons = newValue            self.userDefaults.set(newValue, forKey: "mergeIcons")        }    }     var switcherShowsIcons: Bool {        get { self.defaultsState.switcherShowsIcons }        set {            self.defaultsState.switcherShowsIcons = newValue            self.userDefaults.set(newValue, forKey: "switcherShowsIcons")        }    }     private var selectedMenuProviderRaw: String? {        get { self.defaultsState.selectedMenuProviderRaw }        set {            self.defaultsState.selectedMenuProviderRaw = newValue            if let raw = newValue {                self.userDefaults.set(raw, forKey: "selectedMenuProvider")            } else {                self.userDefaults.removeObject(forKey: "selectedMenuProvider")            }        }    }     var selectedMenuProvider: UsageProvider? {        get { self.selectedMenuProviderRaw.flatMap(UsageProvider.init(rawValue:)) }        set {            self.selectedMenuProviderRaw = newValue?.rawValue        }    }     var providerDetectionCompleted: Bool {        get { self.defaultsState.providerDetectionCompleted }        set {            self.defaultsState.providerDetectionCompleted = newValue            self.userDefaults.set(newValue, forKey: "providerDetectionCompleted")        }    }     var debugLoadingPattern: LoadingPattern? {        get { self.debugLoadingPatternRaw.flatMap(LoadingPattern.init(rawValue:)) }        set { self.debugLoadingPatternRaw = newValue?.rawValue }    }}