diff --git a/ApplicationServices/LibraryCommands.cs b/ApplicationServices/LibraryCommands.cs index 96012f68..c9999b2d 100644 --- a/ApplicationServices/LibraryCommands.cs +++ b/ApplicationServices/LibraryCommands.cs @@ -11,13 +11,6 @@ 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 { private static LibraryOptions.ResponseGroupOptions LibraryResponseGroups = LibraryOptions.ResponseGroupOptions.ALL_OPTIONS; @@ -257,15 +250,15 @@ namespace ApplicationServices // 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) - => book.Audio_Exists ? LiberatedState.Liberated - : FileManager.AudibleFileStorage.AaxcExists(book.AudibleProductId) ? LiberatedState.PartialDownload - : LiberatedState.NotDownloaded; + public static LiberatedStatus Liberated_Status(Book book) + => book.Audio_Exists ? LiberatedStatus.Liberated + : FileManager.AudibleFileStorage.AaxcExists(book.AudibleProductId) ? LiberatedStatus.PartialDownload + : LiberatedStatus.NotLiberated; - public static PdfState Pdf_Status(Book book) - => !book.Supplements.Any() ? PdfState.NoPdf - : book.PDF_Exists ? PdfState.Downloaded - : PdfState.NotDownloaded; + public static LiberatedStatus? Pdf_Status(Book book) + => !book.Supplements.Any() ? null + : book.PDF_Exists ? LiberatedStatus.Liberated + : LiberatedStatus.NotLiberated; public record LibraryStats(int booksFullyBackedUp, int booksDownloadedOnly, int booksNoProgress, int pdfsDownloaded, int pdfsNotDownloaded) { } public static LibraryStats GetCounts() @@ -276,9 +269,9 @@ namespace ApplicationServices .AsParallel() .Select(lb => Liberated_Status(lb.Book)) .ToList(); - var booksFullyBackedUp = results.Count(r => r == LiberatedState.Liberated); - var booksDownloadedOnly = results.Count(r => r == LiberatedState.PartialDownload); - var booksNoProgress = results.Count(r => r == LiberatedState.NotDownloaded); + var booksFullyBackedUp = results.Count(r => r == LiberatedStatus.Liberated); + var booksDownloadedOnly = results.Count(r => r == LiberatedStatus.PartialDownload); + var booksNoProgress = results.Count(r => r == LiberatedStatus.NotLiberated); Log.Logger.Information("Book counts. {@DebugInfo}", new { total = results.Count, booksFullyBackedUp, booksDownloadedOnly, booksNoProgress }); @@ -287,8 +280,8 @@ namespace ApplicationServices .Where(lb => lb.Book.Supplements.Any()) .Select(lb => Pdf_Status(lb.Book)) .ToList(); - var pdfsDownloaded = boolResults.Count(r => r == PdfState.Downloaded); - var pdfsNotDownloaded = boolResults.Count(r => r == PdfState.NotDownloaded); + var pdfsDownloaded = boolResults.Count(r => r == LiberatedStatus.Liberated); + var pdfsNotDownloaded = boolResults.Count(r => r == LiberatedStatus.NotLiberated); Log.Logger.Information("PDF counts. {@DebugInfo}", new { total = boolResults.Count, pdfsDownloaded, pdfsNotDownloaded }); diff --git a/DataLayer/EfClasses/UserDefinedItem.cs b/DataLayer/EfClasses/UserDefinedItem.cs index 4178a20e..4643d02e 100644 --- a/DataLayer/EfClasses/UserDefinedItem.cs +++ b/DataLayer/EfClasses/UserDefinedItem.cs @@ -14,7 +14,11 @@ namespace DataLayer NotLiberated = 0, Liberated = 1, /// Error occurred during liberation. Don't retry - Error = 2 + Error = 2, + + /// Application-state only. Not a valid persistence state. + PartialDownload = 0x1000 + } public class UserDefinedItem diff --git a/LibationWinForms/GridEntry.cs b/LibationWinForms/GridEntry.cs index 7a90c437..d6f414bf 100644 --- a/LibationWinForms/GridEntry.cs +++ b/LibationWinForms/GridEntry.cs @@ -71,7 +71,6 @@ namespace LibationWinForms } #region Data Source properties - public Image Cover { get @@ -97,7 +96,7 @@ namespace LibationWinForms public string Misc { get; } public string Description { get; } public string DisplayTags => string.Join("\r\n", Book.UserDefinedItem.TagsEnumerated); - public (LiberatedState, PdfState) Liberate => (LibraryCommands.Liberated_Status(Book), LibraryCommands.Pdf_Status(Book)); + public (LiberatedStatus BookStatus, LiberatedStatus? PdfStatus) Liberate => (LibraryCommands.Liberated_Status(Book), LibraryCommands.Pdf_Status(Book)); #endregion #region Data Sorting @@ -121,7 +120,7 @@ namespace LibationWinForms { nameof(Category), () => Category }, { nameof(Misc), () => Misc }, { nameof(DisplayTags), () => DisplayTags }, - { nameof(Liberate), () => Liberate.Item1 } + { nameof(Liberate), () => Liberate.BookStatus } }; // Instantiate comparers for every exposed member object type. @@ -131,7 +130,7 @@ namespace LibationWinForms { typeof(int), new ObjectComparer() }, { typeof(float), new ObjectComparer() }, { typeof(DateTime), new ObjectComparer() }, - { typeof(LiberatedState), new ObjectComparer() }, + { typeof(LiberatedStatus), new ObjectComparer() }, }; public virtual object GetMemberValue(string memberName) => _memberValues[memberName](); diff --git a/LibationWinForms/LiberateDataGridViewImageButtonColumn.cs b/LibationWinForms/LiberateDataGridViewImageButtonColumn.cs index b8509e5d..6b85a4df 100644 --- a/LibationWinForms/LiberateDataGridViewImageButtonColumn.cs +++ b/LibationWinForms/LiberateDataGridViewImageButtonColumn.cs @@ -3,6 +3,7 @@ using System; using System.Drawing; using System.Windows.Forms; using System.Linq; +using DataLayer; namespace LibationWinForms { @@ -20,9 +21,11 @@ namespace LibationWinForms { base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, null, null, null, cellStyle, advancedBorderStyle, paintParts); - if (value is (LiberatedState liberatedState, PdfState pdfState)) + if (value is (LiberatedStatus, LiberatedStatus) or (LiberatedStatus, null)) { - (string mouseoverText, Bitmap buttonImage) = GetLiberateDisplay(liberatedState, pdfState); + var (bookState, pdfState) = ((LiberatedStatus bookState, LiberatedStatus? pdfState))value; + + (string mouseoverText, Bitmap buttonImage) = GetLiberateDisplay(bookState, pdfState); DrawButtonImage(graphics, buttonImage, cellBounds); @@ -30,29 +33,29 @@ namespace LibationWinForms } } - private static (string mouseoverText, Bitmap buttonImage) GetLiberateDisplay(LiberatedState liberatedStatus, PdfState pdfStatus) + private static (string mouseoverText, Bitmap buttonImage) GetLiberateDisplay(LiberatedStatus liberatedStatus, LiberatedStatus? pdfStatus) { (string libState, string image_lib) = liberatedStatus switch { - LiberatedState.Liberated => ("Liberated", "green"), - LiberatedState.PartialDownload => ("File has been at least\r\npartially downloaded", "yellow"), - LiberatedState.NotDownloaded => ("Book NOT downloaded", "red"), + LiberatedStatus.Liberated => ("Liberated", "green"), + LiberatedStatus.PartialDownload => ("File has been at least\r\npartially downloaded", "yellow"), + LiberatedStatus.NotLiberated => ("Book NOT downloaded", "red"), _ => throw new Exception("Unexpected liberation state") }; (string pdfState, string image_pdf) = pdfStatus switch { - PdfState.Downloaded => ("\r\nPDF downloaded", "_pdf_yes"), - PdfState.NotDownloaded => ("\r\nPDF NOT downloaded", "_pdf_no"), - PdfState.NoPdf => ("", ""), + LiberatedStatus.Liberated => ("\r\nPDF downloaded", "_pdf_yes"), + LiberatedStatus.NotLiberated => ("\r\nPDF NOT downloaded", "_pdf_no"), + null => ("", ""), _ => throw new Exception("Unexpected PDF state") }; var mouseoverText = libState + pdfState; - if (liberatedStatus == LiberatedState.NotDownloaded || - liberatedStatus == LiberatedState.PartialDownload || - pdfStatus == PdfState.NotDownloaded) + if (liberatedStatus == LiberatedStatus.NotLiberated || + liberatedStatus == LiberatedStatus.PartialDownload || + pdfStatus == LiberatedStatus.NotLiberated) mouseoverText += "\r\nClick to complete"; var buttonImage = (Bitmap)Properties.Resources.ResourceManager.GetObject($"liberate_{image_lib}{image_pdf}");