Skip to content

Commit 6f7c263

Browse files
authored
Merge pull request #5 from phucbm/feat/menu-bar-time-to-reset
feat(app): show time-to-reset in menu bar badge
2 parents 37ea4c3 + 188f06a commit 6f7c263

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

app/Sources/AccountsManager.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class AccountsManager: ObservableObject {
88
@Published var isLoading: Bool = false
99
@Published var openAtLogin: Bool = false
1010
@Published var shortcutEnabled: Bool = true
11+
@Published var showResetTime: Bool = true
1112
@Published var isAccessibilityEnabled: Bool = false
1213
@Published var animationSeed: UUID = UUID()
1314

@@ -53,11 +54,15 @@ class AccountsManager: ObservableObject {
5354
shortcutEnabled = UserDefaults.standard.object(forKey: "shortcut_enabled") == nil
5455
? true
5556
: UserDefaults.standard.bool(forKey: "shortcut_enabled")
57+
showResetTime = UserDefaults.standard.object(forKey: "show_reset_time") == nil
58+
? true
59+
: UserDefaults.standard.bool(forKey: "show_reset_time")
5660
}
5761

5862
func saveSettings() {
5963
UserDefaults.standard.set(openAtLogin, forKey: "open_at_login")
6064
UserDefaults.standard.set(shortcutEnabled, forKey: "shortcut_enabled")
65+
UserDefaults.standard.set(showResetTime, forKey: "show_reset_time")
6166
UserDefaults.standard.synchronize()
6267
}
6368

app/Sources/AppDelegate.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
8585

8686
let attrs: [NSAttributedString.Key: Any] = [.font: font]
8787

88+
let showReset = accountsManager.showResetTime
8889
let texts: [String] = accounts.map { account in
8990
let letter = String(account.label.prefix(1)).uppercased()
9091
let pct = account.hasFetchedData ? "\(Int(account.sessionPercentage * 100))%" : "--"
91-
return "\(letter) \(pct)"
92+
let reset = showReset ? timeToReset(account.sessionResetsAt) : ""
93+
return reset.isEmpty ? "\(letter) \(pct)" : "\(letter) \(pct) \(reset)"
9294
}
9395
let widths = texts.map { ($0 as NSString).size(withAttributes: attrs).width + hPad * 2 }
9496
let totalWidth = widths.reduce(0, +) + CGFloat(max(0, accounts.count - 1)) * spacing
@@ -112,6 +114,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
112114
return image
113115
}
114116

117+
private func timeToReset(_ date: Date?) -> String {
118+
guard let date = date else { return "" }
119+
let secs = date.timeIntervalSinceNow
120+
guard secs > 0 else { return "" }
121+
let h = Int(secs) / 3600
122+
let m = (Int(secs) % 3600) / 60
123+
return h > 0 ? "\(h)h\(m)m" : "\(m)m"
124+
}
125+
115126
// MARK: - Panel Setup
116127

117128
private func defaultPanelFrame() -> NSRect {

app/Sources/Views/SettingsSection.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ struct SettingsSection: View {
3434

3535
Rectangle().fill(T.ink.opacity(0.08)).frame(height: T.border)
3636

37+
settingRow(
38+
title: "Show Reset Time",
39+
subtitle: "Display time until session resets in the menu bar (e.g. P 40% 1h20m)"
40+
) {
41+
Toggle("", isOn: Binding(
42+
get: { accountsManager.showResetTime },
43+
set: { v in
44+
accountsManager.showResetTime = v
45+
accountsManager.saveSettings()
46+
(NSApplication.shared.delegate as? AppDelegate)?.refreshMenuBar()
47+
}
48+
))
49+
.toggleStyle(.switch)
50+
.labelsHidden()
51+
.scaleEffect(0.75)
52+
.frame(height: 20)
53+
}
54+
55+
Rectangle().fill(T.ink.opacity(0.08)).frame(height: T.border)
56+
3757
settingRow(
3858
title: "Keyboard Shortcut (⌘U)",
3959
subtitle: "Toggle popup from anywhere. Disable if it conflicts with other apps."

0 commit comments

Comments
 (0)