43 lines
1.5 KiB
Swift
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
|
|
}
|
|
}
|