Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions Sources/CodexBar/MenuBarDisplayText.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,17 @@ enum MenuBarDisplayText {
return String(format: "%.0f%%", clamped)
}

static func paceText(provider: UsageProvider, window: RateWindow?, now: Date = .init()) -> String? {
static func paceText(
provider: UsageProvider,
window: RateWindow?,
now: Date = .init(),
profile: UsagePaceProfile? = nil) -> String?
{
guard let window else { return nil }
guard let pace = UsagePaceText.weeklyPace(provider: provider, window: window, now: now) else { return nil }
guard let pace = UsagePaceText.weeklyPace(provider: provider, window: window, now: now, profile: profile)
else {
return nil
}
let deltaValue = Int(abs(pace.deltaPercent).rounded())
let sign = pace.deltaPercent >= 0 ? "+" : "-"
return "\(sign)\(deltaValue)%"
Expand All @@ -23,16 +31,20 @@ enum MenuBarDisplayText {
percentWindow: RateWindow?,
paceWindow: RateWindow?,
showUsed: Bool,
now: Date = .init()) -> String?
now: Date = .init(),
paceProfile: UsagePaceProfile? = nil) -> String?
{
switch mode {
case .percent:
return self.percentText(window: percentWindow, showUsed: showUsed)
case .pace:
return self.paceText(provider: provider, window: paceWindow, now: now)
return self.paceText(provider: provider, window: paceWindow, now: now, profile: paceProfile)
case .both:
guard let percent = percentText(window: percentWindow, showUsed: showUsed) else { return nil }
guard let pace = Self.paceText(provider: provider, window: paceWindow, now: now) else { return nil }
guard let pace = Self.paceText(provider: provider, window: paceWindow, now: now, profile: paceProfile)
else {
return nil
}
return "\(percent) · \(pace)"
}
}
Expand Down
58 changes: 55 additions & 3 deletions Sources/CodexBar/MenuCardView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,50 @@ extension UsageMenuCardView.Model {
let tokenCostUsageEnabled: Bool
let showOptionalCreditsAndExtraUsage: Bool
let hidePersonalInfo: Bool
let paceProfile: UsagePaceProfile?
let now: Date

init(
provider: UsageProvider,
metadata: ProviderMetadata,
snapshot: UsageSnapshot?,
credits: CreditsSnapshot?,
creditsError: String?,
dashboard: OpenAIDashboardSnapshot?,
dashboardError: String?,
tokenSnapshot: CostUsageTokenSnapshot?,
tokenError: String?,
account: AccountInfo,
isRefreshing: Bool,
lastError: String?,
usageBarsShowUsed: Bool,
resetTimeDisplayStyle: ResetTimeDisplayStyle,
tokenCostUsageEnabled: Bool,
showOptionalCreditsAndExtraUsage: Bool,
hidePersonalInfo: Bool,
paceProfile: UsagePaceProfile? = nil,
now: Date)
{
self.provider = provider
self.metadata = metadata
self.snapshot = snapshot
self.credits = credits
self.creditsError = creditsError
self.dashboard = dashboard
self.dashboardError = dashboardError
self.tokenSnapshot = tokenSnapshot
self.tokenError = tokenError
self.account = account
self.isRefreshing = isRefreshing
self.lastError = lastError
self.usageBarsShowUsed = usageBarsShowUsed
self.resetTimeDisplayStyle = resetTimeDisplayStyle
self.tokenCostUsageEnabled = tokenCostUsageEnabled
self.showOptionalCreditsAndExtraUsage = showOptionalCreditsAndExtraUsage
self.hidePersonalInfo = hidePersonalInfo
self.paceProfile = paceProfile
self.now = now
}
}

static func make(_ input: Input) -> UsageMenuCardView.Model {
Expand Down Expand Up @@ -772,7 +815,8 @@ extension UsageMenuCardView.Model {
provider: input.provider,
window: weekly,
now: input.now,
showUsed: input.usageBarsShowUsed)
showUsed: input.usageBarsShowUsed,
profile: input.paceProfile)
var weeklyResetText = Self.resetText(for: weekly, style: input.resetTimeDisplayStyle, now: input.now)
var weeklyDetailText: String? = input.provider == .zai ? zaiTimeDetail : nil
if input.provider == .warp,
Expand Down Expand Up @@ -852,9 +896,17 @@ extension UsageMenuCardView.Model {
provider: UsageProvider,
window: RateWindow,
now: Date,
showUsed: Bool) -> PaceDetail?
showUsed: Bool,
profile: UsagePaceProfile?) -> PaceDetail?
{
guard let detail = UsagePaceText.weeklyDetail(provider: provider, window: window, now: now) else { return nil }
guard let detail = UsagePaceText.weeklyDetail(
provider: provider,
window: window,
now: now,
profile: profile)
else {
return nil
}
let expectedUsed = detail.expectedUsedPercent
let actualUsed = window.usedPercent
let expectedPercent = showUsed ? expectedUsed : (100 - expectedUsed)
Expand Down
6 changes: 5 additions & 1 deletion Sources/CodexBar/MenuDescriptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,11 @@ struct MenuDescriptor {
resetStyle: resetStyle,
showUsed: settings.usageBarsShowUsed,
resetOverride: weeklyResetOverride)
if let paceSummary = UsagePaceText.weeklySummary(provider: provider, window: weekly) {
if let paceSummary = UsagePaceText.weeklySummary(
provider: provider,
window: weekly,
profile: store.paceProfile(for: provider))
{
entries.append(.text(paceSummary, .secondary))
}
}
Expand Down
1 change: 1 addition & 0 deletions Sources/CodexBar/PreferencesProvidersPane.swift
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ struct ProvidersPane: View {
tokenCostUsageEnabled: self.settings.isCostUsageEffectivelyEnabled(for: provider),
showOptionalCreditsAndExtraUsage: self.settings.showOptionalCreditsAndExtraUsage,
hidePersonalInfo: self.settings.hidePersonalInfo,
paceProfile: self.store.paceProfile(for: provider),
now: Date())
return UsageMenuCardView.Model.make(input)
}
Expand Down
3 changes: 2 additions & 1 deletion Sources/CodexBar/StatusItemController+Animation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,8 @@ extension StatusItemController {
provider: provider,
percentWindow: self.menuBarPercentWindow(for: provider, snapshot: snapshot),
paceWindow: snapshot?.secondary,
showUsed: self.settings.usageBarsShowUsed)
showUsed: self.settings.usageBarsShowUsed,
paceProfile: self.store.paceProfile(for: provider))
}

private func menuBarPercentWindow(for provider: UsageProvider, snapshot: UsageSnapshot?) -> RateWindow? {
Expand Down
1 change: 1 addition & 0 deletions Sources/CodexBar/StatusItemController+Menu.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1207,6 +1207,7 @@ extension StatusItemController {
tokenCostUsageEnabled: self.settings.isCostUsageEffectivelyEnabled(for: target),
showOptionalCreditsAndExtraUsage: self.settings.showOptionalCreditsAndExtraUsage,
hidePersonalInfo: self.settings.hidePersonalInfo,
paceProfile: self.store.paceProfile(for: target),
now: Date())
return UsageMenuCardView.Model.make(input)
}
Expand Down
Loading