From b16c24cb441cf7f67ed92dff952cac1d3e0e644c Mon Sep 17 00:00:00 2001 From: superdooper86 Date: Thu, 7 May 2026 18:23:26 +0200 Subject: [PATCH] =?UTF-8?q?Release=20v1.0.11=20=E2=80=94=20update=20indica?= =?UTF-8?q?tor=20in=20menubar,=20undismissable=20banner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Menubar shows ↑ Update alongside limits when an update is available - Removed × dismiss button from update banner; it stays until installed --- ClaudeChecker/ClaudeCheckerApp.swift | 13 ++++++++++++- ClaudeChecker/ContentView.swift | 6 ------ ClaudeChecker/Info.plist | 4 ++-- RELEASE_NOTES.md | 9 ++++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ClaudeChecker/ClaudeCheckerApp.swift b/ClaudeChecker/ClaudeCheckerApp.swift index 1181488..3b9e66e 100644 --- a/ClaudeChecker/ClaudeCheckerApp.swift +++ b/ClaudeChecker/ClaudeCheckerApp.swift @@ -60,6 +60,11 @@ class AppDelegate: NSObject, NSApplicationDelegate { .sink { [weak self] _ in self?.updateStatusItem() } .store(in: &cancellables) + updateManager.$updateAvailable + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.updateStatusItem() } + .store(in: &cancellables) + // Refresh timer scheduleTimer(interval: usageViewModel.refreshInterval) @@ -166,7 +171,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { let sdStr = sd.map { "\(Int($0.usedPercent.rounded()))%" } ?? "—" button.image = nil button.attributedTitle = NSAttributedString(string: "") - button.title = "◔ \(fhStr) \(sdStr)" + let updatePrefix = updateManager.updateAvailable ? "↑ Update " : "◔ " + button.title = "\(updatePrefix)\(fhStr) \(sdStr)" + button.font = NSFont.monospacedDigitSystemFont(ofSize: 12, weight: .medium) + } else if updateManager.updateAvailable { + button.image = nil + button.attributedTitle = NSAttributedString(string: "") + button.title = "↑ Update" button.font = NSFont.monospacedDigitSystemFont(ofSize: 12, weight: .medium) } else { button.title = "" diff --git a/ClaudeChecker/ContentView.swift b/ClaudeChecker/ContentView.swift index 0fef2b9..80e228e 100644 --- a/ClaudeChecker/ContentView.swift +++ b/ClaudeChecker/ContentView.swift @@ -1032,12 +1032,6 @@ struct UpdateBanner: View { Button("Update") { showSheet = true } .buttonStyle(.borderedProminent) .controlSize(.small) - Button { updater.updateAvailable = false } label: { - Image(systemName: "xmark") - .font(.system(size: 10, weight: .medium)) - .foregroundColor(.secondary) - } - .buttonStyle(.plain) } .padding(.horizontal, 16) .padding(.vertical, 10) diff --git a/ClaudeChecker/Info.plist b/ClaudeChecker/Info.plist index 373403b..a131391 100644 --- a/ClaudeChecker/Info.plist +++ b/ClaudeChecker/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0.10 + 1.0.11 CFBundleVersion - 30 + 31 LSMinimumSystemVersion 13.0 LSUIElement diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index c291891..7ae638b 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,4 +1,7 @@ -## What's new in v1.0.10 +## What's new in v1.0.11 -### Main window always opens on click -Closing the app while Settings was open would cause the next click to reopen straight to Settings. The app now always returns to the main window when reopened. +### Update indicator in menubar +When an update is available, the menubar now shows **↑ Update** alongside your usage percentages — so you can see there's an update without opening the app. + +### Update banner can't be dismissed +The × close button has been removed from the update banner. The banner stays visible until you install the update.