using ApplicationServices; using DataLayer; using LibationAvalonia.Views; using LibationFileManager; using LibationUiBase.ProcessQueue; using ReactiveUI; using System.Collections.Generic; using System.Threading.Tasks; namespace LibationAvalonia.ViewModels; public partial class MainVM : ViewModelBase { public Task? BindToGridTask { get; set; } public ProcessQueueViewModel ProcessQueue { get; } = new ProcessQueueViewModel(); public ProductsDisplayViewModel ProductsDisplay { get; } = new() { SearchEngine = MainSearchEngine.Instance }; public double? DownloadProgress { get => field; set => this.RaiseAndSetIfChanged(ref field, value); } private readonly MainWindow MainWindow; public MainVM(MainWindow mainWindow) { MainWindow = mainWindow; ProductsDisplay.RemovableCountChanged += (_, removeCount) => RemoveBooksButtonText = removeCount == 1 ? "Remove 1 Book from Libation" : $"Remove {removeCount} Books from Libation"; LibraryCommands.LibrarySizeChanged += LibraryCommands_LibrarySizeChanged; Configure_NonUI(); Configure_BackupCounts(); Configure_Export(); Configure_Filters(); Configure_Import(); Configure_Liberate(); Configure_ProcessQueue(); Configure_ScanAuto(); Configure_Settings(); Configure_VisibleBooks(); } private async void LibraryCommands_LibrarySizeChanged(object? sender, List fullLibrary) { try { //Prevent race condition which can occur if an auto-scan //completes before the initial grid binding completes. if (BindToGridTask is null) return; else if (BindToGridTask.IsCompleted is false) await BindToGridTask; await Task.WhenAll( SetBackupCountsAsync(fullLibrary), Task.Run(() => ProductsDisplay.UpdateGridAsync(fullLibrary))); } catch (System.Exception ex) { await MessageBox.ShowAdminAlert(MainWindow, "An error occurred while updating the library.", "Library Size Change Error", ex); } } private static string menufyText(string header) => Configuration.IsMacOs ? header : $"_{header}"; }