119 lines
4.4 KiB
C#
119 lines
4.4 KiB
C#
using ApplicationServices;
|
|
using System;
|
|
using System.Linq;
|
|
using Avalonia.Threading;
|
|
using Dinah.Core;
|
|
|
|
namespace LibationWinForms.AvaloniaUI.Views
|
|
{
|
|
//DONE
|
|
public partial class MainWindow
|
|
{
|
|
private System.ComponentModel.BackgroundWorker updateCountsBw = new();
|
|
private void Configure_BackupCounts()
|
|
{
|
|
// init formattable
|
|
beginBookBackupsToolStripMenuItem.Format(0);
|
|
beginPdfBackupsToolStripMenuItem.Format(0);
|
|
pdfsCountsLbl.Text = "| [Calculating backed up PDFs]";
|
|
|
|
Load += setBackupCounts;
|
|
LibraryCommands.LibrarySizeChanged += setBackupCounts;
|
|
LibraryCommands.BookUserDefinedItemCommitted += setBackupCounts;
|
|
|
|
updateCountsBw.DoWork += UpdateCountsBw_DoWork;
|
|
updateCountsBw.RunWorkerCompleted += exportMenuEnable;
|
|
updateCountsBw.RunWorkerCompleted += updateBottomBookNumbers;
|
|
updateCountsBw.RunWorkerCompleted += update_BeginBookBackups_menuItem;
|
|
updateCountsBw.RunWorkerCompleted += updateBottomPdfNumbersAsync;
|
|
updateCountsBw.RunWorkerCompleted += udpate_BeginPdfOnlyBackups_menuItem;
|
|
}
|
|
private bool runBackupCountsAgain;
|
|
private void setBackupCounts(object _, object __)
|
|
{
|
|
runBackupCountsAgain = true;
|
|
|
|
if (!updateCountsBw.IsBusy)
|
|
updateCountsBw.RunWorkerAsync();
|
|
}
|
|
private void UpdateCountsBw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
|
|
{
|
|
while (runBackupCountsAgain)
|
|
{
|
|
runBackupCountsAgain = false;
|
|
e.Result = LibraryCommands.GetCounts();
|
|
}
|
|
}
|
|
|
|
private void exportMenuEnable(object _, System.ComponentModel.RunWorkerCompletedEventArgs e)
|
|
{
|
|
var libraryStats = e.Result as LibraryCommands.LibraryStats;
|
|
Dispatcher.UIThread.Post(() => exportLibraryToolStripMenuItem.IsEnabled = libraryStats.HasBookResults);
|
|
}
|
|
|
|
// this cannot be cleanly be FormattableToolStripMenuItem because of the optional "Errors" text
|
|
private const string backupsCountsLbl_Format = "BACKUPS: No progress: {0} In process: {1} Fully backed up: {2}";
|
|
|
|
private void updateBottomBookNumbers(object _, System.ComponentModel.RunWorkerCompletedEventArgs e)
|
|
{
|
|
var libraryStats = e.Result as LibraryCommands.LibraryStats;
|
|
|
|
var formatString
|
|
= !libraryStats.HasBookResults ? "No books. Begin by importing your library"
|
|
: libraryStats.booksError > 0 ? backupsCountsLbl_Format + " Errors: {3}"
|
|
: libraryStats.HasPendingBooks ? backupsCountsLbl_Format
|
|
: $"All {"book".PluralizeWithCount(libraryStats.booksFullyBackedUp)} backed up";
|
|
var statusStripText = string.Format(formatString,
|
|
libraryStats.booksNoProgress,
|
|
libraryStats.booksDownloadedOnly,
|
|
libraryStats.booksFullyBackedUp,
|
|
libraryStats.booksError);
|
|
Dispatcher.UIThread.InvokeAsync(() => backupsCountsLbl.Text = statusStripText);
|
|
}
|
|
|
|
// update 'begin book backups' menu item
|
|
private void update_BeginBookBackups_menuItem(object _, System.ComponentModel.RunWorkerCompletedEventArgs e)
|
|
{
|
|
var libraryStats = e.Result as LibraryCommands.LibraryStats;
|
|
|
|
var menuItemText
|
|
= libraryStats.HasPendingBooks
|
|
? $"{libraryStats.PendingBooks} remaining"
|
|
: "All books have been liberated";
|
|
Dispatcher.UIThread.InvokeAsync(() =>
|
|
{
|
|
beginBookBackupsToolStripMenuItem.Format(menuItemText);
|
|
beginBookBackupsToolStripMenuItem.IsEnabled = libraryStats.HasPendingBooks;
|
|
});
|
|
}
|
|
|
|
private async void updateBottomPdfNumbersAsync(object _, System.ComponentModel.RunWorkerCompletedEventArgs e)
|
|
{
|
|
var libraryStats = e.Result as LibraryCommands.LibraryStats;
|
|
|
|
// don't need to assign the output of Format(). It just makes this logic cleaner
|
|
var statusStripText
|
|
= !libraryStats.HasPdfResults ? ""
|
|
: libraryStats.pdfsNotDownloaded > 0 ? await Dispatcher.UIThread.InvokeAsync(()=> pdfsCountsLbl.Format(libraryStats.pdfsNotDownloaded, libraryStats.pdfsDownloaded))
|
|
: $" | All {libraryStats.pdfsDownloaded} PDFs downloaded";
|
|
await Dispatcher.UIThread.InvokeAsync(() => pdfsCountsLbl.Text = statusStripText);
|
|
}
|
|
|
|
// update 'begin pdf only backups' menu item
|
|
private void udpate_BeginPdfOnlyBackups_menuItem(object _, System.ComponentModel.RunWorkerCompletedEventArgs e)
|
|
{
|
|
var libraryStats = e.Result as LibraryCommands.LibraryStats;
|
|
|
|
var menuItemText
|
|
= libraryStats.pdfsNotDownloaded > 0
|
|
? $"{libraryStats.pdfsNotDownloaded} remaining"
|
|
: "All PDFs have been downloaded";
|
|
Dispatcher.UIThread.InvokeAsync(() =>
|
|
{
|
|
beginPdfBackupsToolStripMenuItem.Format(menuItemText);
|
|
beginPdfBackupsToolStripMenuItem.IsEnabled = libraryStats.pdfsNotDownloaded > 0;
|
|
});
|
|
}
|
|
}
|
|
}
|