diff --git a/windows/LoginWindow.xaml.cs b/windows/LoginWindow.xaml.cs new file mode 100644 index 0000000..7d5cb5f --- /dev/null +++ b/windows/LoginWindow.xaml.cs @@ -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; + } +}