Skip to content

Commit c346340

Browse files
authored
Merge pull request #1733 from dstier-git/refresh-on-open
feat: add refresh-on-open setting
2 parents 129f696 + 1f3bb58 commit c346340

31 files changed

Lines changed: 336 additions & 10 deletions

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Unreleased
44

5+
### Added
6+
- Menu: add an opt-in setting to refresh provider usage whenever the menu opens without changing the periodic refresh clock. Thanks @dstier-git!
7+
58
### Fixed
69
- Claude web usage: bound stale requests so Auto can reach CLI fallback instead of hanging indefinitely.
710
- Claude history: keep OAuth utilization separate across account switches while preserving continuity through token refreshes.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import CodexBarCore
2+
3+
struct MenuOpenRefreshPlan: Equatable {
4+
struct Inputs {
5+
let refreshAllOnOpen: Bool
6+
let enabledProviders: [UsageProvider]
7+
let visibleProviders: [UsageProvider]
8+
let refreshingProviders: Set<UsageProvider>
9+
let staleProviders: Set<UsageProvider>
10+
let missingProviders: Set<UsageProvider>
11+
}
12+
13+
enum Scheduling: Equatable {
14+
case sequential
15+
case concurrent
16+
}
17+
18+
let providers: [UsageProvider]
19+
let scheduling: Scheduling
20+
let refreshCodexDashboard: Bool
21+
22+
static func resolve(_ inputs: Inputs) -> Self {
23+
if inputs.refreshAllOnOpen {
24+
return Self(
25+
providers: inputs.enabledProviders,
26+
scheduling: .concurrent,
27+
refreshCodexDashboard: inputs.enabledProviders.contains(.codex))
28+
}
29+
30+
let enabled = Set(inputs.enabledProviders)
31+
let providers = inputs.visibleProviders.filter {
32+
enabled.contains($0) &&
33+
(inputs.refreshingProviders.contains($0) || inputs.staleProviders.contains($0) ||
34+
inputs.missingProviders.contains($0))
35+
}
36+
return Self(
37+
providers: providers,
38+
scheduling: .sequential,
39+
refreshCodexDashboard: false)
40+
}
41+
}

Sources/CodexBar/PreferencesGeneralPane.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ struct GeneralPane: View {
215215
.foregroundStyle(.secondary)
216216
}
217217
}
218+
PreferenceToggleRow(
219+
title: L("refresh_on_open_title"),
220+
subtitle: L("refresh_on_open_subtitle"),
221+
binding: self.$settings.refreshAllProvidersOnMenuOpen)
218222
PreferenceToggleRow(
219223
title: L("check_provider_status_title"),
220224
subtitle: L("check_provider_status_subtitle"),

Sources/CodexBar/Resources/ar.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@
431431
"refresh_cadence_title" = "وتيرة التحديث";
432432
"refresh_cadence_subtitle" = "كم مرة CodexBar استطلاعات في الخلفية.";
433433
"manual_refresh_hint" = "التحديث التلقائي مغلق؛ استخدم أمر التحديث في القائمة.";
434+
"refresh_on_open_title" = "التحديث عند فتح القائمة";
435+
"refresh_on_open_subtitle" = "جلب أحدث بيانات الاستخدام لكل مزوّد في كل مرة تفتح فيها القائمة.";
434436
"check_provider_status_title" = "تحقق من حالة المزود";
435437
"check_provider_status_subtitle" = "استطلاعات OpenAI/Claude صفحات الحالة و Google مساحة العمل Gemini/Antigravity، وتظهر الحوادث في الأيقونة والقائمة.";
436438
"session_quota_notifications_title" = "إشعارات حصص الجلسة";

Sources/CodexBar/Resources/ca.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,8 @@
429429
"refresh_cadence_title" = "Freqüència d'actualització";
430430
"refresh_cadence_subtitle" = "Amb quina freqüència el CodexBar consulta els proveïdors en segon pla.";
431431
"manual_refresh_hint" = "L'actualització automàtica està desactivada; feu servir l'ordre Actualitza del menú.";
432+
"refresh_on_open_title" = "Actualitza en obrir el menú";
433+
"refresh_on_open_subtitle" = "Obté l'ús més recent de cada proveïdor cada vegada que obres el menú.";
432434
"check_provider_status_title" = "Comproveu l'estat del proveïdor";
433435
"check_provider_status_subtitle" = "Consulta les pàgines d'estat d'OpenAI/Claude i Google Workspace per a Gemini/Antigravity, mostrant incidències a la icona i al menú.";
434436
"session_quota_notifications_title" = "Notificacions de quota de sessió";

Sources/CodexBar/Resources/de.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@
431431
"refresh_cadence_title" = "Aktualisierungsintervall";
432432
"refresh_cadence_subtitle" = "Wie oft CodexBar Anbieter im Hintergrund abfragt.";
433433
"manual_refresh_hint" = "Auto-Aktualisierung ist aus; nutze im Menü den Befehl „Aktualisieren“.";
434+
"refresh_on_open_title" = "Beim Öffnen des Menüs aktualisieren";
435+
"refresh_on_open_subtitle" = "Bei jedem Öffnen des Menüs die aktuelle Nutzung aller Anbieter abrufen.";
434436
"check_provider_status_title" = "Anbieterstatus prüfen";
435437
"check_provider_status_subtitle" = "Prüft OpenAI/Claude-Statusseiten und Google Workspace für Gemini/Antigravity und zeigt Vorfälle in Icon und Menü.";
436438
"session_quota_notifications_title" = "Sitzungs-Quota-Benachrichtigungen";

Sources/CodexBar/Resources/en.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@
431431
"refresh_cadence_title" = "Refresh cadence";
432432
"refresh_cadence_subtitle" = "How often CodexBar polls providers in the background.";
433433
"manual_refresh_hint" = "Auto-refresh is off; use the menu's Refresh command.";
434+
"refresh_on_open_title" = "Refresh when the menu opens";
435+
"refresh_on_open_subtitle" = "Fetch the latest usage for every provider each time you open the menu.";
434436
"check_provider_status_title" = "Check provider status";
435437
"check_provider_status_subtitle" = "Polls OpenAI/Claude status pages and Google Workspace for Gemini/Antigravity, surfacing incidents in the icon and menu.";
436438
"session_quota_notifications_title" = "Session quota notifications";

Sources/CodexBar/Resources/es.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,8 @@
429429
"refresh_cadence_title" = "Frecuencia de actualización";
430430
"refresh_cadence_subtitle" = "Con qué frecuencia CodexBar consulta a los proveedores en segundo plano.";
431431
"manual_refresh_hint" = "La actualización automática está desactivada; usa el comando Actualizar del menú.";
432+
"refresh_on_open_title" = "Actualizar al abrir el menú";
433+
"refresh_on_open_subtitle" = "Obtén el uso más reciente de cada proveedor cada vez que abres el menú.";
432434
"check_provider_status_title" = "Comprobar estado del proveedor";
433435
"check_provider_status_subtitle" = "Consulta las páginas de estado de OpenAI/Claude y Google Workspace para Gemini/Antigravity, mostrando incidencias en el icono y el menú.";
434436
"session_quota_notifications_title" = "Notificaciones de cuota de sesión";

Sources/CodexBar/Resources/fa.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@
431431
"refresh_cadence_title" = "کادانس تازه سازی";
432432
"refresh_cadence_subtitle" = "چند وقت یکبار CodexBar ارائه دهندگان نظرسنجی در پس زمینه انجام می دهند.";
433433
"manual_refresh_hint" = "تازه سازی خودکار خاموش است؛ از فرمان تازه سازی منو استفاده کنید.";
434+
"refresh_on_open_title" = "بازخوانی هنگام باز کردن منو";
435+
"refresh_on_open_subtitle" = "هر بار که منو را باز می‌کنید، آخرین میزان مصرف هر ارائه‌دهنده دریافت می‌شود.";
434436
"check_provider_status_title" = "وضعیت ارائه دهنده را بررسی کنید";
435437
"check_provider_status_subtitle" = "نظرسنجی ها OpenAI/Claude صفحات وضعیت و Google Workspace برای Gemini/Antigravity که حوادث را در آیکون و منو نمایش می دهد.";
436438
"session_quota_notifications_title" = "اعلان های سهمیه نشست";

Sources/CodexBar/Resources/fr.lproj/Localizable.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@
431431
"refresh_cadence_title" = "Fréquence d'actualisation";
432432
"refresh_cadence_subtitle" = "Définit la fréquence à laquelle CodexBar interroge les fournisseurs en arrière-plan.";
433433
"manual_refresh_hint" = "L'actualisation automatique est désactivée ; utilisez la commande Actualiser du menu.";
434+
"refresh_on_open_title" = "Actualiser à l'ouverture du menu";
435+
"refresh_on_open_subtitle" = "Récupère l'utilisation la plus récente de chaque fournisseur à chaque ouverture du menu.";
434436
"check_provider_status_title" = "Vérifier l'état des fournisseurs";
435437
"check_provider_status_subtitle" = "Interroge les pages d'état OpenAI/Claude et Google Workspace pour Gemini/Antigravity, et affiche les incidents dans l'icône et le menu.";
436438
"session_quota_notifications_title" = "Notifications de quota de session";

0 commit comments

Comments
 (0)