@@ -201,112 +201,36 @@ extension SettingsStore {
201201 }
202202
203203 func menuBarMetricPreference( for provider: UsageProvider ) -> MenuBarMetricPreference {
204- if Self . isBalanceOnlyProvider ( provider) , provider != . mistral {
205- return . automatic
206- }
207- if provider == . mistral {
208- let raw = self . menuBarMetricPreferencesRaw [ provider. rawValue] ?? " "
209- let preference = MenuBarMetricPreference ( rawValue: raw) ?? . automatic
210- switch preference {
211- case . automatic, . monthlyPlan:
212- return preference
213- case . primary, . secondary, . primaryAndSecondary, . tertiary, . extraUsage, . average:
214- return . automatic
215- }
216- }
217- if provider == . openrouter {
218- let raw = self . menuBarMetricPreferencesRaw [ provider. rawValue] ?? " "
219- let preference = MenuBarMetricPreference ( rawValue: raw) ?? . automatic
220- switch preference {
221- case . automatic, . primary:
222- return preference
223- case . secondary, . primaryAndSecondary, . average, . tertiary, . extraUsage, . monthlyPlan:
224- return . automatic
225- }
226- }
227204 let raw = self . menuBarMetricPreferencesRaw [ provider. rawValue] ?? " "
228205 let preference = MenuBarMetricPreference ( rawValue: raw) ?? . automatic
229- if preference == . average, !self . menuBarMetricSupportsAverage ( for: provider) {
230- return . automatic
231- }
232- if preference == . primaryAndSecondary, !self . menuBarMetricSupportsPrimaryAndSecondary ( for: provider) {
233- return . automatic
234- }
235- if preference == . tertiary, !self . menuBarMetricSupportsTertiary ( for: provider) {
236- return . automatic
237- }
238- if preference == . extraUsage, !self . menuBarMetricSupportsExtraUsage ( for: provider) {
239- return . automatic
240- }
241- if preference == . monthlyPlan {
242- return . automatic
243- }
244- return preference
206+ return self . menuBarMetricSupports ( preference, for: provider) ? preference : . automatic
245207 }
246208
247209 func setMenuBarMetricPreference( _ preference: MenuBarMetricPreference , for provider: UsageProvider ) {
248- if Self . isBalanceOnlyProvider ( provider) , provider != . mistral {
249- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
250- return
251- }
252- if provider == . mistral {
253- switch preference {
254- case . automatic, . monthlyPlan:
255- self . menuBarMetricPreferencesRaw [ provider. rawValue] = preference. rawValue
256- case . primary, . secondary, . primaryAndSecondary, . tertiary, . extraUsage, . average:
257- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
258- }
259- return
260- }
261- if provider == . openrouter {
262- switch preference {
263- case . automatic, . primary:
264- self . menuBarMetricPreferencesRaw [ provider. rawValue] = preference. rawValue
265- case . secondary, . primaryAndSecondary, . average, . tertiary, . extraUsage, . monthlyPlan:
266- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
267- }
268- return
269- }
270- if preference == . primaryAndSecondary, !self . menuBarMetricSupportsPrimaryAndSecondary ( for: provider) {
271- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
272- return
273- }
274- if preference == . tertiary, !self . menuBarMetricSupportsTertiary ( for: provider) {
275- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
276- return
277- }
278- if preference == . extraUsage, !self . menuBarMetricSupportsExtraUsage ( for: provider) {
279- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
280- return
281- }
282- if preference == . monthlyPlan {
283- self . menuBarMetricPreferencesRaw [ provider. rawValue] = MenuBarMetricPreference . automatic. rawValue
284- return
285- }
286- self . menuBarMetricPreferencesRaw [ provider. rawValue] = preference. rawValue
210+ let resolved = self . menuBarMetricSupports ( preference, for: provider) ? preference : . automatic
211+ self . menuBarMetricPreferencesRaw [ provider. rawValue] = resolved. rawValue
287212 }
288213
289214 func menuBarMetricSupportsAverage( for provider: UsageProvider ) -> Bool {
290- provider == . gemini
215+ self . menuBarMetricCapabilities ( for : provider ) . supports ( . average )
291216 }
292217
293218 func menuBarMetricSupportsPrimaryAndSecondary( for provider: UsageProvider ) -> Bool {
294- provider == . codex || provider == . claude
219+ self . menuBarMetricCapabilities ( for : provider) . supports ( . primaryAndSecondary )
295220 }
296221
297222 func menuBarMetricSupportsTertiary( for provider: UsageProvider ) -> Bool {
298- provider == . cursor || provider == . perplexity
223+ self . menuBarMetricCapabilities ( for : provider) . supports ( . tertiary )
299224 }
300225
301226 func menuBarMetricSupportsTertiary( for provider: UsageProvider , snapshot: UsageSnapshot ? ) -> Bool {
302- if provider == . cursor {
303- return snapshot? . tertiary != nil
304- }
305- return self . menuBarMetricSupportsTertiary ( for: provider)
227+ let capabilities = self . menuBarMetricCapabilities ( for: provider)
228+ guard capabilities. supports ( . tertiary) else { return false }
229+ return !capabilities. tertiaryRequiresWindow || snapshot? . tertiary != nil
306230 }
307231
308232 func menuBarMetricSupportsExtraUsage( for provider: UsageProvider ) -> Bool {
309- provider == . cursor || provider == . claude
233+ self . menuBarMetricCapabilities ( for : provider) . supports ( . extraUsage )
310234 }
311235
312236 func menuBarMetricSupportsExtraUsage( for provider: UsageProvider , snapshot: UsageSnapshot ? ) -> Bool {
@@ -340,7 +264,26 @@ extension SettingsStore {
340264 self . resetTimesShowAbsolute ? . absolute : . countdown
341265 }
342266
343- static func isBalanceOnlyProvider( _ provider: UsageProvider ) -> Bool {
344- ProviderDescriptorRegistry . descriptor ( for: provider) . metadata. balanceOnly
267+ private func menuBarMetricCapabilities( for provider: UsageProvider ) -> ProviderMenuBarMetricCapabilities {
268+ ProviderDescriptorRegistry . descriptor ( for: provider) . menuBarMetrics
269+ }
270+
271+ private func menuBarMetricSupports( _ preference: MenuBarMetricPreference , for provider: UsageProvider ) -> Bool {
272+ self . menuBarMetricCapabilities ( for: provider) . supports ( preference. providerMetric)
273+ }
274+ }
275+
276+ extension MenuBarMetricPreference {
277+ fileprivate var providerMetric : ProviderMenuBarMetric {
278+ switch self {
279+ case . automatic: . automatic
280+ case . primary: . primary
281+ case . secondary: . secondary
282+ case . primaryAndSecondary: . primaryAndSecondary
283+ case . tertiary: . tertiary
284+ case . extraUsage: . extraUsage
285+ case . average: . average
286+ case . monthlyPlan: . monthlyPlan
287+ }
345288 }
346289}
0 commit comments