From abf05b04fc600bdc1e80ec65aeb0b9ec32882002 Mon Sep 17 00:00:00 2001 From: James Bone Date: Thu, 7 May 2026 22:25:26 +0200 Subject: [PATCH] =?UTF-8?q?v1.1.1=20=E2=80=94=20clearer=20limit=20labels?= =?UTF-8?q?=20and=20login=20window=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ClaudeChecker/ContentView.swift | 24 ++++++++++++++++++++---- ClaudeChecker/Info.plist | 4 ++-- ClaudeChecker/LoginView.swift | 27 +++++++++++++++++++++------ RELEASE_NOTES.md | 19 +++++-------------- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/ClaudeChecker/ContentView.swift b/ClaudeChecker/ContentView.swift index 80e228e..c7efb5e 100644 --- a/ClaudeChecker/ContentView.swift +++ b/ClaudeChecker/ContentView.swift @@ -47,13 +47,29 @@ struct ContentView: View { EmptyStateView() .padding(.vertical, 40) } else { - VStack(spacing: 1) { + VStack(spacing: 8) { ForEach(vm.limits) { limit in - LimitCard(limit: limit) + VStack(spacing: 0) { + HStack { + Text(limit.window == .fiveHour ? "5hr Limit" : "7 Day Limit") + .font(.system(size: 11, weight: .semibold)) + .foregroundColor(.secondary) + .textCase(.uppercase) + Spacer() + } + .padding(.horizontal, 16) + .padding(.top, 10) + .padding(.bottom, 4) + + LimitCard(limit: limit) + .background(Color(nsColor: .controlBackgroundColor)) + .cornerRadius(8) + .overlay(RoundedRectangle(cornerRadius: 8).stroke(Color.primary.opacity(0.08), lineWidth: 0.5)) + .padding(.horizontal, 8) + } } } - .background(Color.primary.opacity(0.05)) - .padding(.vertical, 1) + .padding(.bottom, 4) // Extra credits row if let extra = vm.extraUsage, extra.isEnabled { diff --git a/ClaudeChecker/Info.plist b/ClaudeChecker/Info.plist index f248adb..7b525b8 100644 --- a/ClaudeChecker/Info.plist +++ b/ClaudeChecker/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.0 + 1.1.1 CFBundleVersion - 33 + 34 LSMinimumSystemVersion 13.0 LSUIElement diff --git a/ClaudeChecker/LoginView.swift b/ClaudeChecker/LoginView.swift index 2f2b8dc..85616aa 100644 --- a/ClaudeChecker/LoginView.swift +++ b/ClaudeChecker/LoginView.swift @@ -24,21 +24,27 @@ struct LoginWebView: NSViewRepresentable { class Coordinator: NSObject, WKNavigationDelegate { let onAuthenticated: () -> Void + var didAuthenticate = false init(onAuthenticated: @escaping () -> Void) { self.onAuthenticated = onAuthenticated } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + guard !didAuthenticate else { return } + // Don't fire on the login/auth pages themselves + if let url = webView.url?.absoluteString, + url.contains("/login") || url.contains("/auth") { return } + WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in let hasSession = cookies.contains { $0.domain.contains("claude.ai") && ($0.name == "sessionKey" || $0.name == "__Secure-next-auth.session-token") } - if hasSession { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.onAuthenticated() - } + guard hasSession, !self.didAuthenticate else { return } + self.didAuthenticate = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + self.onAuthenticated() } } } @@ -58,9 +64,18 @@ struct LoginSheetView: View { Text(authenticated ? "✓ Signed in — loading data…" : "Sign in to Claude") .font(.system(size: 13, weight: .semibold)) Spacer() - Button("Cancel") { isPresented = false } - .buttonStyle(.bordered) + if authenticated { + Button("Done") { + isPresented = false + onDone() + } + .buttonStyle(.borderedProminent) .controlSize(.small) + } else { + Button("Cancel") { isPresented = false } + .buttonStyle(.bordered) + .controlSize(.small) + } } .padding(.horizontal, 14) .padding(.vertical, 10) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 5955024..6451a0f 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,16 +1,7 @@ -## What's new in v1.1.0 +## What's new in v1.1.1 -### Clickable notifications -Tapping a limit warning or reset notification opens the main window. Tapping an update notification opens the update sheet directly — no need to manually click the menubar icon. +### Clearer limit labels +The 5hr and 7 Day usage cards now have clear section headers so it's immediately obvious which limit is which. -### Update indicator in menubar -When an update is available, the menubar shows **↑ Update** alongside your usage percentages so you know at a glance without opening the app. - -### Release notes render correctly -The update banner and update sheet now render markdown formatting — headers, **bold text**, and bullet points display properly. - -### Update notification improved -The update popup now reads **"Tap to view release notes & update now!"** making it clear you can read what changed before installing. - -### 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. +### Login window fix +The sign-in sheet now reliably closes after a successful login. A **Done** button also appears as a fallback once authentication is detected — no more being stuck with only a Cancel button.