Compare commits

..
4 changed files with 58 additions and 34 deletions
+16 -10
View File
@@ -53,19 +53,25 @@ jobs:
- name: Update version-windows-beta.json on main - name: Update version-windows-beta.json on main
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
shell: bash shell: bash
run: | run: |
notes=$(cat windows/RELEASE_NOTES.md 2>/dev/null || echo "Windows beta ${{ steps.version.outputs.version }}") notes=$(cat windows/RELEASE_NOTES.md 2>/dev/null || echo "Windows beta ${{ steps.version.outputs.version }}")
git config user.name "github-actions[bot]" content=$(jq -n \
git config user.email "github-actions[bot]@users.noreply.github.com"
git fetch origin main
git checkout main
jq -n \
--arg version "${{ steps.version.outputs.version }}" \ --arg version "${{ steps.version.outputs.version }}" \
--arg url "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/ClaudeChecker-Windows.zip" \ --arg url "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/ClaudeChecker-Windows.zip" \
--arg notes "$notes" \ --arg notes "$notes" \
'{version: $version, url: $url, notes: $notes}' > version-windows-beta.json '{version: $version, url: $url, notes: $notes}' | base64 -w0)
git add version-windows-beta.json sha=$(gh api "repos/${{ github.repository }}/contents/version-windows-beta.json?ref=main" --jq .sha 2>/dev/null || echo "")
git commit -m "Windows beta release ${{ github.ref_name }}" if [ -n "$sha" ]; then
git push origin main gh api --method PUT "repos/${{ github.repository }}/contents/version-windows-beta.json" \
--field "message=Windows beta release ${{ github.ref_name }}" \
--field "content=$content" \
--field "branch=main" \
--field "sha=$sha"
else
gh api --method PUT "repos/${{ github.repository }}/contents/version-windows-beta.json" \
--field "message=Windows beta release ${{ github.ref_name }}" \
--field "content=$content" \
--field "branch=main"
fi
+17 -11
View File
@@ -3,7 +3,7 @@ name: Release Windows
on: on:
push: push:
tags: tags:
- 'win-v*' - 'win-v[0-9]*'
- '!win-v*-*' - '!win-v*-*'
jobs: jobs:
@@ -53,19 +53,25 @@ jobs:
- name: Update version-windows.json on main - name: Update version-windows.json on main
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
shell: bash shell: bash
run: | run: |
notes=$(cat windows/RELEASE_NOTES.md 2>/dev/null || echo "Windows release ${{ steps.version.outputs.version }}") notes=$(cat windows/RELEASE_NOTES.md 2>/dev/null || echo "Windows release ${{ steps.version.outputs.version }}")
git config user.name "github-actions[bot]" content=$(jq -n \
git config user.email "github-actions[bot]@users.noreply.github.com"
git fetch origin main
git checkout main
jq -n \
--arg version "${{ steps.version.outputs.version }}" \ --arg version "${{ steps.version.outputs.version }}" \
--arg url "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/ClaudeChecker-Windows.zip" \ --arg url "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/ClaudeChecker-Windows.zip" \
--arg notes "$notes" \ --arg notes "$notes" \
'{version: $version, url: $url, notes: $notes}' > version-windows.json '{version: $version, url: $url, notes: $notes}' | base64 -w0)
git add version-windows.json sha=$(gh api "repos/${{ github.repository }}/contents/version-windows.json?ref=main" --jq .sha 2>/dev/null || echo "")
git commit -m "Windows release ${{ github.ref_name }}" if [ -n "$sha" ]; then
git push origin main gh api --method PUT "repos/${{ github.repository }}/contents/version-windows.json" \
--field "message=Windows release ${{ github.ref_name }}" \
--field "content=$content" \
--field "branch=main" \
--field "sha=$sha"
else
gh api --method PUT "repos/${{ github.repository }}/contents/version-windows.json" \
--field "message=Windows release ${{ github.ref_name }}" \
--field "content=$content" \
--field "branch=main"
fi
-1
View File
@@ -1,4 +1,3 @@
using Color = System.Windows.Media.Color;
using Point = System.Windows.Point; using Point = System.Windows.Point;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows; using System.Windows;
+25 -12
View File
@@ -1,5 +1,6 @@
using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.Core;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
@@ -28,18 +29,25 @@ public partial class LoginWindow : Window
{ {
if (!e.IsSuccess) return; if (!e.IsSuccess) return;
var uri = Browser.CoreWebView2.Source; var uri = Browser.CoreWebView2.Source;
if (uri.Contains("claude.ai") && !uri.Contains("/login")) if (!uri.Contains("claude.ai")) return;
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
var signedIn = cookies.Any(c =>
c.Name.Equals("sessionKey", StringComparison.OrdinalIgnoreCase) ||
c.Name.StartsWith("sk-ant", StringComparison.OrdinalIgnoreCase));
await Dispatcher.InvokeAsync(() =>
{ {
// Likely signed in — enable done button DoneButton.IsEnabled = !uri.Contains("/login") && !uri.Contains("/signin");
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai"); StatusText.Text = signedIn
var hasSess = cookies.Any(c => c.Name.Contains("session") || c.Name.Contains("sk-")); ? "Signed in — click Done to continue."
await Dispatcher.InvokeAsync(() => : "Complete sign-in, then click Done.";
{ });
DoneButton.IsEnabled = hasSess || uri.Contains("/chats") || uri.Contains("/new");
StatusText.Text = DoneButton.IsEnabled // Auto-close once clearly on the main app page
? "Signed in! Click Done to continue." if (signedIn && (uri.Contains("/chats") || uri.Contains("/new") || uri == "https://claude.ai/"))
: "Waiting for sign-in…"; {
}); await SaveAndClose(cookies);
} }
}; };
} }
@@ -47,7 +55,12 @@ public partial class LoginWindow : Window
private async void Done_Click(object sender, RoutedEventArgs e) private async void Done_Click(object sender, RoutedEventArgs e)
{ {
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai"); var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
await SaveAndClose(cookies);
}
private async Task SaveAndClose(IReadOnlyList<CoreWebView2Cookie> cookies)
{
UsageViewModel.SaveCookies(cookies); UsageViewModel.SaveCookies(cookies);
DialogResult = true; await Dispatcher.InvokeAsync(() => DialogResult = true);
} }
} }