Files
2026-07-13 12:22:33 +08:00

43 lines
1.5 KiB
Swift

import CodexBarCore
@MainActor
final class ClaudeProviderRuntime: ProviderRuntime {
let id: UsageProvider = .claude
private var lastSwapConfiguration: Configuration?
func start(context: ProviderRuntimeContext) {
self.reconcileSwapConfiguration(context: context)
}
func stop(context: ProviderRuntimeContext) {
self.lastSwapConfiguration = nil
context.store.clearClaudeSwapAccountState()
}
func settingsDidChange(context: ProviderRuntimeContext) {
self.reconcileSwapConfiguration(context: context)
}
private func reconcileSwapConfiguration(context: ProviderRuntimeContext) {
let configuration = Configuration(
providerEnabled: context.store.isEnabled(.claude),
enabled: context.settings.claudeSwapEnabled,
executablePath: context.settings.claudeSwapExecutablePath)
guard configuration != self.lastSwapConfiguration else { return }
self.lastSwapConfiguration = configuration
// Cancel before clearing so an old executable can never repopulate the menu.
context.store.clearClaudeSwapAccountState()
guard configuration.providerEnabled, configuration.enabled, !configuration.executablePath.isEmpty else {
return
}
context.store.scheduleClaudeSwapAccountRefresh()
}
private struct Configuration: Equatable {
let providerEnabled: Bool
let enabled: Bool
let executablePath: String
}
}