using System.Windows; using Microsoft.Win32; using WordPressStaticExporter.Models; using WordPressStaticExporter.Services; namespace WordPressStaticExporter; public partial class MainWindow : Window { public MainWindow() => InitializeComponent(); private void BrowseButton_Click(object sender, RoutedEventArgs e) { var dialog = new OpenFolderDialog(); if (dialog.ShowDialog() == true) OutputTextBox.Text = dialog.FolderName; } private async void ExportButton_Click(object sender, RoutedEventArgs e) { if (!Uri.TryCreate(UrlTextBox.Text.Trim(), UriKind.Absolute, out var siteUrl)) { MessageBox.Show("Enter a valid website URL."); return; } if (string.IsNullOrWhiteSpace(OutputTextBox.Text)) { MessageBox.Show("Choose an output folder."); return; } ExportButton.IsEnabled = false; LogTextBox.Clear(); try { var settings = new ExportSettings { StartUrl = siteUrl, OutputDirectory = OutputTextBox.Text.Trim(), DownloadExternalAssets = ExternalAssetsCheckBox.IsChecked == true, CaptureScreenshots = ScreenshotsCheckBox.IsChecked == true, RespectRobotsTxt = RobotsCheckBox.IsChecked == true }; var exporter = new SiteExporter(); var progress = new Progress(p => { StatusText.Text = p.Message; ProgressBar.Value = p.Percent; LogTextBox.AppendText($"[{DateTime.Now:HH:mm:ss}] {p.Message}{Environment.NewLine}"); if (p.Result is not null) SummaryText.Text = $"Pages: {p.Result.PagesExported} | Assets: {p.Result.AssetsDownloaded} | CSS: {p.Result.CssFilesProcessed} | Errors: {p.Result.Errors.Count}"; LogTextBox.ScrollToEnd(); }); var result = await exporter.ExportAsync(settings, progress, CancellationToken.None); StatusText.Text = "Export completed"; ProgressBar.Value = 100; SummaryText.Text = $"Pages: {result.PagesExported} | Assets: {result.AssetsDownloaded} | CSS: {result.CssFilesProcessed} | Errors: {result.Errors.Count}"; MessageBox.Show("Static website export completed.", "Success"); } catch (Exception ex) { StatusText.Text = "Export failed"; LogTextBox.AppendText(ex + Environment.NewLine); MessageBox.Show(ex.Message, "Export Error"); } finally { ExportButton.IsEnabled = true; } } }