42 lines
1.3 KiB
Swift
42 lines
1.3 KiB
Swift
import CodexBarCore
|
|
|
|
struct MenuOpenRefreshPlan: Equatable {
|
|
struct Inputs {
|
|
let refreshAllOnOpen: Bool
|
|
let enabledProviders: [UsageProvider]
|
|
let visibleProviders: [UsageProvider]
|
|
let refreshingProviders: Set<UsageProvider>
|
|
let staleProviders: Set<UsageProvider>
|
|
let missingProviders: Set<UsageProvider>
|
|
}
|
|
|
|
enum Scheduling: Equatable {
|
|
case sequential
|
|
case concurrent
|
|
}
|
|
|
|
let providers: [UsageProvider]
|
|
let scheduling: Scheduling
|
|
let refreshCodexDashboard: Bool
|
|
|
|
static func resolve(_ inputs: Inputs) -> Self {
|
|
if inputs.refreshAllOnOpen {
|
|
return Self(
|
|
providers: inputs.enabledProviders,
|
|
scheduling: .concurrent,
|
|
refreshCodexDashboard: inputs.enabledProviders.contains(.codex))
|
|
}
|
|
|
|
let enabled = Set(inputs.enabledProviders)
|
|
let providers = inputs.visibleProviders.filter {
|
|
enabled.contains($0) &&
|
|
(inputs.refreshingProviders.contains($0) || inputs.staleProviders.contains($0) ||
|
|
inputs.missingProviders.contains($0))
|
|
}
|
|
return Self(
|
|
providers: providers,
|
|
scheduling: .sequential,
|
|
refreshCodexDashboard: false)
|
|
}
|
|
}
|