feat(windows): add LoginWindow.xaml.cs
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace ClaudeCheckerWindows;
|
||||
|
||||
public partial class LoginWindow : Window
|
||||
{
|
||||
public LoginWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
Loaded += async (_, _) => await InitBrowserAsync();
|
||||
}
|
||||
|
||||
private async Task InitBrowserAsync()
|
||||
{
|
||||
var env = await CoreWebView2Environment.CreateAsync(userDataFolder:
|
||||
System.IO.Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
"ClaudeChecker", "WebView2"));
|
||||
|
||||
await Browser.EnsureCoreWebView2Async(env);
|
||||
Browser.CoreWebView2.Navigate("https://claude.ai");
|
||||
|
||||
Browser.CoreWebView2.NavigationCompleted += async (_, e) =>
|
||||
{
|
||||
if (!e.IsSuccess) return;
|
||||
var uri = Browser.CoreWebView2.Source;
|
||||
if (uri.Contains("claude.ai") && !uri.Contains("/login"))
|
||||
{
|
||||
// Likely signed in — enable done button
|
||||
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
|
||||
var hasSess = cookies.Any(c => c.Name.Contains("session") || c.Name.Contains("sk-"));
|
||||
await Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
DoneButton.IsEnabled = hasSess || uri.Contains("/chats") || uri.Contains("/new");
|
||||
StatusText.Text = DoneButton.IsEnabled
|
||||
? "Signed in! Click Done to continue."
|
||||
: "Waiting for sign-in…";
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private async void Done_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
|
||||
UsageViewModel.SaveCookies(cookies);
|
||||
DialogResult = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user