diff --git a/ApplicationServices/LibraryCommands.cs b/ApplicationServices/LibraryCommands.cs index 7538f6cd..8b9e56ce 100644 --- a/ApplicationServices/LibraryCommands.cs +++ b/ApplicationServices/LibraryCommands.cs @@ -11,6 +11,13 @@ using Serilog; namespace ApplicationServices { + // subtly different from DataLayer.LiberatedStatus + // - DataLayer.LiberatedStatus: has no concept of partially downloaded + // - ApplicationServices.LiberatedState: has no concept of Error/skipped + public enum LiberatedState { NotDownloaded, PartialDownload, Liberated } + + public enum PdfState { NoPdf, Downloaded, NotDownloaded } + public static class LibraryCommands { #region FULL LIBRARY scan and import @@ -177,12 +184,18 @@ namespace ApplicationServices } #endregion - // this is a query, not command so maybe I should make a LibraryQueries. except there's already one of those... - private enum AudioFileState { full, aax, none } - private static AudioFileState getAudioFileState(Book book) - => TransitionalFileLocator.Audio_Exists(book) ? AudioFileState.full - : TransitionalFileLocator.AAXC_Exists(book) ? AudioFileState.aax - : AudioFileState.none; + // below are queries, not commands. maybe I should make a LibraryQueries. except there's already one of those... + + public static LiberatedState Liberated_Status(Book book) + => TransitionalFileLocator.Audio_Exists(book) ? LiberatedState.Liberated + : TransitionalFileLocator.AAXC_Exists(book) ? LiberatedState.PartialDownload + : LiberatedState.NotDownloaded; + + public static PdfState Pdf_Status(Book book) + => !book.Supplements.Any() ? PdfState.NoPdf + : TransitionalFileLocator.PDF_Exists(book) ? PdfState.Downloaded + : PdfState.NotDownloaded; + public record LibraryStats(int booksFullyBackedUp, int booksDownloadedOnly, int booksNoProgress, int pdfsDownloaded, int pdfsNotDownloaded) { } public static LibraryStats GetCounts() { @@ -190,21 +203,21 @@ namespace ApplicationServices var results = libraryBooks .AsParallel() - .Select(lb => getAudioFileState(lb.Book)) + .Select(lb => Liberated_Status(lb.Book)) .ToList(); - var booksFullyBackedUp = results.Count(r => r == AudioFileState.full); - var booksDownloadedOnly = results.Count(r => r == AudioFileState.aax); - var booksNoProgress = results.Count(r => r == AudioFileState.none); + var booksFullyBackedUp = results.Count(r => r == LiberatedState.Liberated); + var booksDownloadedOnly = results.Count(r => r == LiberatedState.PartialDownload); + var booksNoProgress = results.Count(r => r == LiberatedState.NotDownloaded); Log.Logger.Information("Book counts. {@DebugInfo}", new { total = results.Count, booksFullyBackedUp, booksDownloadedOnly, booksNoProgress }); var boolResults = libraryBooks .AsParallel() .Where(lb => lb.Book.Supplements.Any()) - .Select(lb => TransitionalFileLocator.PDF_Exists(lb.Book)) + .Select(lb => Pdf_Status(lb.Book)) .ToList(); - var pdfsDownloaded = boolResults.Count(r => r); - var pdfsNotDownloaded = boolResults.Count(r => !r); + var pdfsDownloaded = boolResults.Count(r => r == PdfState.Downloaded); + var pdfsNotDownloaded = boolResults.Count(r => r == PdfState.NotDownloaded); Log.Logger.Information("PDF counts. {@DebugInfo}", new { total = boolResults.Count, pdfsDownloaded, pdfsNotDownloaded }); diff --git a/LibationLauncher/LibationLauncher.csproj b/LibationLauncher/LibationLauncher.csproj index 0daa0dae..16de24ed 100644 --- a/LibationLauncher/LibationLauncher.csproj +++ b/LibationLauncher/LibationLauncher.csproj @@ -13,7 +13,7 @@ win-x64 - 5.4.6.1 + 5.4.7.1 diff --git a/LibationWinForms/GridEntry.cs b/LibationWinForms/GridEntry.cs index c6e3e42b..5f24c447 100644 --- a/LibationWinForms/GridEntry.cs +++ b/LibationWinForms/GridEntry.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; +using ApplicationServices; using DataLayer; namespace LibationWinForms @@ -19,24 +20,18 @@ namespace LibationWinForms // hide from public fields from Data Source GUI with [Browsable(false)] + [Browsable(false)] + public string AudibleProductId => book.AudibleProductId; [Browsable(false)] public string Tags => book.UserDefinedItem.Tags; [Browsable(false)] public IEnumerable TagsEnumerated => book.UserDefinedItem.TagsEnumerated; - - public enum LiberatedState { NotDownloaded, PartialDownload, Liberated } [Browsable(false)] - public LiberatedState Liberated_Status - => ApplicationServices.TransitionalFileLocator.Audio_Exists(book) ? LiberatedState.Liberated - : ApplicationServices.TransitionalFileLocator.AAXC_Exists(book) ? LiberatedState.PartialDownload - : LiberatedState.NotDownloaded; - - public enum PdfState { NoPdf, Downloaded, NotDownloaded } + public string PictureId => book.PictureId; [Browsable(false)] - public PdfState Pdf_Status - => !book.Supplements.Any() ? PdfState.NoPdf - : ApplicationServices.TransitionalFileLocator.PDF_Exists(book) ? PdfState.Downloaded - : PdfState.NotDownloaded; + public LiberatedState Liberated_Status => LibraryCommands.Liberated_Status(book); + [Browsable(false)] + public PdfState Pdf_Status => LibraryCommands.Pdf_Status(book); // displayValues is what gets displayed // the value that gets returned from the property is the cell's value diff --git a/LibationWinForms/ProductsGrid.cs b/LibationWinForms/ProductsGrid.cs index 19043cc3..2c85f2d8 100644 --- a/LibationWinForms/ProductsGrid.cs +++ b/LibationWinForms/ProductsGrid.cs @@ -134,25 +134,25 @@ namespace LibationWinForms { var libState = liberatedStatus switch { - GridEntry.LiberatedState.Liberated => "Liberated", - GridEntry.LiberatedState.PartialDownload => "File has been at least\r\npartially downloaded", - GridEntry.LiberatedState.NotDownloaded => "Book NOT downloaded", + LiberatedState.Liberated => "Liberated", + LiberatedState.PartialDownload => "File has been at least\r\npartially downloaded", + LiberatedState.NotDownloaded => "Book NOT downloaded", _ => throw new Exception("Unexpected liberation state") }; var pdfState = pdfStatus switch { - GridEntry.PdfState.Downloaded => "\r\nPDF downloaded", - GridEntry.PdfState.NotDownloaded => "\r\nPDF NOT downloaded", - GridEntry.PdfState.NoPdf => "", + PdfState.Downloaded => "\r\nPDF downloaded", + PdfState.NotDownloaded => "\r\nPDF NOT downloaded", + PdfState.NoPdf => "", _ => throw new Exception("Unexpected PDF state") }; var text = libState + pdfState; - if (liberatedStatus == GridEntry.LiberatedState.NotDownloaded || - liberatedStatus == GridEntry.LiberatedState.PartialDownload || - pdfStatus == GridEntry.PdfState.NotDownloaded) + if (liberatedStatus == LiberatedState.NotDownloaded || + liberatedStatus == LiberatedState.PartialDownload || + pdfStatus == PdfState.NotDownloaded) text += "\r\nClick to complete"; //DEBUG//cell.Value = text; @@ -162,14 +162,14 @@ namespace LibationWinForms // draw img { var image_lib - = liberatedStatus == GridEntry.LiberatedState.NotDownloaded ? "red" - : liberatedStatus == GridEntry.LiberatedState.PartialDownload ? "yellow" - : liberatedStatus == GridEntry.LiberatedState.Liberated ? "green" + = liberatedStatus == LiberatedState.NotDownloaded ? "red" + : liberatedStatus == LiberatedState.PartialDownload ? "yellow" + : liberatedStatus == LiberatedState.Liberated ? "green" : throw new Exception("Unexpected liberation state"); var image_pdf - = pdfStatus == GridEntry.PdfState.NoPdf ? "" - : pdfStatus == GridEntry.PdfState.NotDownloaded ? "_pdf_no" - : pdfStatus == GridEntry.PdfState.Downloaded ? "_pdf_yes" + = pdfStatus == PdfState.NoPdf ? "" + : pdfStatus == PdfState.NotDownloaded ? "_pdf_no" + : pdfStatus == PdfState.Downloaded ? "_pdf_yes" : throw new Exception("Unexpected PDF state"); var image = (Bitmap)Properties.Resources.ResourceManager.GetObject($"liberate_{image_lib}{image_pdf}"); drawImage(e, image); @@ -192,13 +192,14 @@ namespace LibationWinForms return; } + // else: liberate await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(libraryBook, (_, __) => RefreshRow(libraryBook.Book.AudibleProductId)); } #endregion public void RefreshRow(string productId) { - var rowId = getRowId((ge) => ge.GetBook().AudibleProductId == productId); + var rowId = getRowId((ge) => ge.AudibleProductId == productId); // update cells incl Liberate button text dataGridView.InvalidateRow(rowId); @@ -329,7 +330,7 @@ namespace LibationWinForms => dataGridView.UIThread(() => updateRowImage(pictureId)); private void updateRowImage(string pictureId) { - var rowId = getRowId((ge) => ge.GetBook().PictureId == pictureId); + var rowId = getRowId((ge) => ge.PictureId == pictureId); if (rowId > -1) dataGridView.InvalidateRow(rowId); } @@ -397,7 +398,7 @@ namespace LibationWinForms currencyManager.SuspendBinding(); { for (var r = dataGridView.RowCount - 1; r >= 0; r--) - dataGridView.Rows[r].Visible = productIds.Contains(getGridEntry(r).GetBook().AudibleProductId); + dataGridView.Rows[r].Visible = productIds.Contains(getGridEntry(r).AudibleProductId); } currencyManager.ResumeBinding(); VisibleCountChanged?.Invoke(this, dataGridView.AsEnumerable().Count(r => r.Visible));