Re-add books to queue that failed or were cancelled.

This commit is contained in:
Michael Bucari-Tovo 2025-02-28 10:42:14 -07:00
parent a9375f1520
commit 3b7d5a354f
3 changed files with 28 additions and 2 deletions

View File

@ -118,7 +118,15 @@ namespace LibationAvalonia.ViewModels
#region Add Books to Queue #region Add Books to Queue
private bool isBookInQueue(LibraryBook libraryBook) private bool isBookInQueue(LibraryBook libraryBook)
=> Queue.Any(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId); {
var entry = Queue.FirstOrDefault(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId);
if (entry == null)
return false;
else if (entry.Status is ProcessBookStatus.Cancelled or ProcessBookStatus.Failed)
return !Queue.RemoveCompleted(entry);
else
return true;
}
public void AddDownloadPdf(LibraryBook libraryBook) public void AddDownloadPdf(LibraryBook libraryBook)
=> AddDownloadPdf(new List<LibraryBook>() { libraryBook }); => AddDownloadPdf(new List<LibraryBook>() { libraryBook });

View File

@ -169,6 +169,16 @@ namespace LibationUiBase
} }
} }
public T FirstOrDefault(Func<T, bool> predicate)
{
lock (lockObject)
{
return Current != null && predicate(Current) ? Current
: _completed.FirstOrDefault(predicate) is T completed ? completed
: _queued.FirstOrDefault(predicate);
}
}
public void MoveQueuePosition(T item, QueuePosition requestedPosition) public void MoveQueuePosition(T item, QueuePosition requestedPosition)
{ {
lock (lockObject) lock (lockObject)

View File

@ -82,7 +82,15 @@ namespace LibationWinForms.ProcessQueue
} }
private bool isBookInQueue(DataLayer.LibraryBook libraryBook) private bool isBookInQueue(DataLayer.LibraryBook libraryBook)
=> Queue.Any(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId); {
var entry = Queue.FirstOrDefault(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId);
if (entry == null)
return false;
else if (entry.Status is ProcessBookStatus.Cancelled or ProcessBookStatus.Failed)
return !Queue.RemoveCompleted(entry);
else
return true;
}
public void AddDownloadPdf(DataLayer.LibraryBook libraryBook) public void AddDownloadPdf(DataLayer.LibraryBook libraryBook)
=> AddDownloadPdf(new List<DataLayer.LibraryBook>() { libraryBook }); => AddDownloadPdf(new List<DataLayer.LibraryBook>() { libraryBook });