diff --git a/LibationWinForms/BookLiberation/ProcessorAutomationController.cs b/LibationWinForms/BookLiberation/ProcessorAutomationController.cs index adb40eff..064b012e 100644 --- a/LibationWinForms/BookLiberation/ProcessorAutomationController.cs +++ b/LibationWinForms/BookLiberation/ProcessorAutomationController.cs @@ -50,12 +50,12 @@ namespace LibationWinForms.BookLiberation public static class ProcessorAutomationController { - public static async Task BackupSingleBookAsync(LibraryBook libraryBook, Action onCompleteAction = null) + public static async Task BackupSingleBookAsync(LibraryBook libraryBook) { Serilog.Log.Logger.Information($"Begin {nameof(BackupSingleBookAsync)} {{@DebugInfo}}", new { libraryBook?.Book?.AudibleProductId }); var logMe = LogMe.RegisterForm(); - var backupBook = CreateBackupBook(logMe, onCompleteAction); + var backupBook = CreateBackupBook(logMe); // continue even if libraryBook is null. we'll display even that in the processing box await new BackupSingle(logMe, backupBook, libraryBook).RunBackupAsync(); @@ -96,14 +96,13 @@ namespace LibationWinForms.BookLiberation await new BackupLoop(logMe, downloadPdf, automatedBackupsForm).RunBackupAsync(); } - private static Processable CreateBackupBook(LogMe logMe, Action onCompleteAction = null) + private static Processable CreateBackupBook(LogMe logMe) { var downloadPdf = CreateProcessable(logMe); //Chain pdf download on DownloadDecryptBook.Completed async void onDownloadDecryptBookCompleted(object sender, LibraryBook e) { - onCompleteAction?.Invoke(e); await downloadPdf.TryProcessAsync(e); } diff --git a/LibationWinForms/grid/GridEntry.cs b/LibationWinForms/grid/GridEntry.cs index 45afd23d..7a3ba2fc 100644 --- a/LibationWinForms/grid/GridEntry.cs +++ b/LibationWinForms/grid/GridEntry.cs @@ -10,6 +10,7 @@ using Dinah.Core.DataBinding; using Dinah.Core; using Dinah.Core.Drawing; using LibationFileManager; +using System.Threading.Tasks; namespace LibationWinForms { @@ -39,6 +40,7 @@ namespace LibationWinForms } } + public bool DownloadInProgress { get; private set; } public string ProductRating { get; private set; } public string PurchaseDate { get; private set; } public string MyRating { get; private set; } @@ -77,6 +79,16 @@ namespace LibationWinForms public GridEntry(LibraryBook libraryBook) => setLibraryBook(libraryBook); + public async Task DownloadBook() + { + if (!DownloadInProgress) + { + DownloadInProgress = true; + await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(LibraryBook); + DownloadInProgress = false; + } + } + public void UpdateLibraryBook(LibraryBook libraryBook) { if (AudibleProductId != libraryBook.Book.AudibleProductId) diff --git a/LibationWinForms/grid/ProductsGrid.cs b/LibationWinForms/grid/ProductsGrid.cs index 821220b3..d5c0dc52 100644 --- a/LibationWinForms/grid/ProductsGrid.cs +++ b/LibationWinForms/grid/ProductsGrid.cs @@ -29,7 +29,6 @@ namespace LibationWinForms public partial class ProductsGrid : UserControl { - private static List bookConversionInProgress = new(); public event EventHandler VisibleCountChanged; // alias @@ -89,14 +88,8 @@ namespace LibationWinForms return; } - //don't try to decrypt the same book at the same time. - if (bookConversionInProgress.Contains(libraryBook.Book.AudibleProductId)) - return; - - bookConversionInProgress.Add(libraryBook.Book.AudibleProductId); - // else: liberate - await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(libraryBook, b => bookConversionInProgress.Remove(b.Book.AudibleProductId)); + await liveGridEntry.DownloadBook(); } private static void Details_Click(GridEntry liveGridEntry)