From 8aa157f2f6338cd631774bd6db3701a49ed90789 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 6 May 2025 15:43:58 -0600 Subject: [PATCH] Re-add completed audiobooks to queue (#1219) --- Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs | 6 ++++++ Source/LibationAvalonia/ViewModels/ProcessQueueViewModel.cs | 5 +++++ Source/LibationWinForms/Form1.ProcessQueue.cs | 6 ++++++ Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs | 5 +++++ 4 files changed, 22 insertions(+) diff --git a/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs b/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs index 69dc697c..b964e6b9 100644 --- a/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs +++ b/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs @@ -40,6 +40,12 @@ namespace LibationAvalonia.ViewModels if (libraryBooks.Length == 1) { var item = libraryBooks[0]; + + //Remove this item from the queue if it's already present and completed. + //Only do this when adding a single book at a time to prevent accidental + //extra downloads when queueing in batches. + ProcessQueue.RemoveCompleted(item); + if (item.Book.UserDefinedItem.BookStatus is LiberatedStatus.NotLiberated or LiberatedStatus.PartialDownload) { Serilog.Log.Logger.Information("Begin single book backup of {libraryBook}", item); diff --git a/Source/LibationAvalonia/ViewModels/ProcessQueueViewModel.cs b/Source/LibationAvalonia/ViewModels/ProcessQueueViewModel.cs index e318977c..29620384 100644 --- a/Source/LibationAvalonia/ViewModels/ProcessQueueViewModel.cs +++ b/Source/LibationAvalonia/ViewModels/ProcessQueueViewModel.cs @@ -130,6 +130,11 @@ namespace LibationAvalonia.ViewModels return true; } + public bool RemoveCompleted(LibraryBook libraryBook) + => Queue.FirstOrDefault(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId) is ProcessBookViewModel entry + && entry.Status is ProcessBookStatus.Completed + && Queue.RemoveCompleted(entry); + public void AddDownloadPdf(LibraryBook libraryBook) => AddDownloadPdf(new List() { libraryBook }); diff --git a/Source/LibationWinForms/Form1.ProcessQueue.cs b/Source/LibationWinForms/Form1.ProcessQueue.cs index 5c2e86c9..f9c7ccc4 100644 --- a/Source/LibationWinForms/Form1.ProcessQueue.cs +++ b/Source/LibationWinForms/Form1.ProcessQueue.cs @@ -30,6 +30,12 @@ namespace LibationWinForms if (libraryBooks.Length == 1) { var item = libraryBooks[0]; + + //Remove this item from the queue if it's already present and completed. + //Only do this when adding a single book at a time to prevent accidental + //extra downloads when queueing in batches. + processBookQueue1.RemoveCompleted(item); + if (item.Book.UserDefinedItem.BookStatus is LiberatedStatus.NotLiberated or LiberatedStatus.PartialDownload) { Serilog.Log.Logger.Information("Begin single book backup of {libraryBook}", item); diff --git a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs index c993c8b6..5f10bc04 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs +++ b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs @@ -92,6 +92,11 @@ namespace LibationWinForms.ProcessQueue return true; } + public bool RemoveCompleted(DataLayer.LibraryBook libraryBook) + => Queue.FirstOrDefault(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId) is ProcessBook entry + && entry.Status is ProcessBookStatus.Completed + && Queue.RemoveCompleted(entry); + public void AddDownloadPdf(DataLayer.LibraryBook libraryBook) => AddDownloadPdf(new List() { libraryBook });