using ApplicationServices; using Avalonia.ReactiveUI; using DataLayer; using LibationAvalonia.ViewModels; using LibationFileManager; using System; using System.Collections.Generic; using System.Linq; namespace LibationAvalonia.Views { public partial class MainWindow : ReactiveWindow { public event EventHandler Load; public event EventHandler> LibraryLoaded; private readonly MainWindowViewModel _viewModel; public MainWindow() { this.DataContext = _viewModel = new MainWindowViewModel(); InitializeComponent(); // eg: if one of these init'd productsGrid, then another can't reliably subscribe to it Configure_BackupCounts(); Configure_ScanAuto(); Configure_ScanNotification(); Configure_VisibleBooks(); Configure_QuickFilters(); Configure_ScanManual(); Configure_RemoveBooks(); Configure_Liberate(); Configure_Export(); Configure_Settings(); Configure_ProcessQueue(); Configure_Upgrade(); Configure_Filter(); // misc which belongs in winforms app but doesn't have a UI element Configure_NonUI(); _viewModel.ProductsDisplay.RemovableCountChanged += ProductsDisplay_RemovableCountChanged; _viewModel.ProductsDisplay.VisibleCountChanged += ProductsDisplay_VisibleCountChanged; { this.LibraryLoaded += MainWindow_LibraryLoaded; LibraryCommands.LibrarySizeChanged += async (_, _) => await _viewModel.ProductsDisplay.UpdateGridAsync(DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); Closing += (_, _) => this.SaveSizeAndLocation(Configuration.Instance); } Closing += MainWindow_Closing; Opened += MainWindow_Opened; } private async void MainWindow_Opened(object sender, EventArgs e) { if (Configuration.Instance.FirstLaunch) { var result = await MessageBox.Show(this, "Would you like a guided tour to get started?", "Libation Walkthrough", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (result is DialogResult.Yes) { await new Walkthrough(this).RunAsync(); } Configuration.Instance.FirstLaunch = false; } } private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { productsDisplay?.CloseImageDisplay(); } private async void MainWindow_LibraryLoaded(object sender, List dbBooks) { if (QuickFilters.UseDefault) await performFilter(QuickFilters.Filters.FirstOrDefault()); _viewModel.ProductsDisplay.BindToGrid(dbBooks); } public void OnLoad() => Load?.Invoke(this, EventArgs.Empty); public void OnLibraryLoaded(List initialLibrary) => LibraryLoaded?.Invoke(this, initialLibrary); } }