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}");