mirror of
https://github.com/rmcrackan/Libation.git
synced 2026-09-13 06:07:30 -04:00
'Not Downloaded' reads as a claim about the file on disk, but the status it names is really an instruction about the future. Telling someone with a finished audiobook to set it 'Not Downloaded' asks them to assert something they know is false, which is why the question keeps coming up. 'Download Pending' says the same thing about intent without saying anything untrue about the file, and stands alone in a dropdown or a support reply where bare 'Pending' would not. The context menu carriers move from "Set Download status to 'X'" to "Mark as 'X'" so the word does not land twice in one breath, with the accelerator on P to stay clear of Downloaded's D. The persisted enum, the --not-downloaded CLI flag and the IsLiberated search tags are unchanged, so scripts and saved quick filters keep working. WinForms status combo boxes grow from 121 to 150px and the better-quality Mark button from 210 to 240px to fit the longer label. Docs carry 'previously "Not Downloaded"' on first mention, since years of Reddit and GitHub answers use the old name. Co-authored-by: rmcrackan <rmcrackan@gmail.com>
77 lines
2.1 KiB
C#
77 lines
2.1 KiB
C#
using DataLayer;
|
|
using Dinah.Core;
|
|
using LibationFileManager;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ApplicationServices;
|
|
|
|
public class BulkSetDownloadStatus
|
|
{
|
|
private List<(string message, LiberatedStatus newStatus, IEnumerable<LibraryBook> LibraryBooks)> actionSets { get; } = new();
|
|
|
|
public int Count => actionSets.Count;
|
|
|
|
public IEnumerable<string> Messages => actionSets.Select(a => a.message);
|
|
public string AggregateMessage => $"Are you sure you want to set {Messages.Aggregate((a, b) => $"{a} and {b}")}?";
|
|
|
|
private readonly List<LibraryBook> _libraryBooks;
|
|
private readonly bool _setDownloaded;
|
|
private readonly bool _setNotDownloaded;
|
|
|
|
public BulkSetDownloadStatus(List<LibraryBook> libraryBooks, bool setDownloaded, bool setNotDownloaded)
|
|
{
|
|
_libraryBooks = libraryBooks;
|
|
_setDownloaded = setDownloaded;
|
|
_setNotDownloaded = setNotDownloaded;
|
|
}
|
|
|
|
public int Discover()
|
|
{
|
|
var bookExistsList = _libraryBooks
|
|
.Select(libraryBook => new
|
|
{
|
|
LibraryBook = libraryBook,
|
|
FileExists = AudibleFileStorage.Audio.GetPath(libraryBook.Book.AudibleProductId) is not null
|
|
})
|
|
.ToList();
|
|
|
|
if (_setDownloaded)
|
|
{
|
|
var books2change = bookExistsList
|
|
.Where(a => a.FileExists && a.LibraryBook.Book.UserDefinedItem.BookStatus != LiberatedStatus.Liberated)
|
|
.Select(a => a.LibraryBook)
|
|
.ToList();
|
|
|
|
if (books2change.Any())
|
|
actionSets.Add((
|
|
$"{"book".PluralizeWithCount(books2change.Count)} to 'Downloaded'",
|
|
LiberatedStatus.Liberated,
|
|
books2change));
|
|
}
|
|
|
|
if (_setNotDownloaded)
|
|
{
|
|
var books2change = bookExistsList
|
|
.Where(a => !a.FileExists && a.LibraryBook.Book.UserDefinedItem.BookStatus != LiberatedStatus.NotLiberated)
|
|
.Select(a => a.LibraryBook)
|
|
.ToList();
|
|
|
|
if (books2change.Any())
|
|
actionSets.Add((
|
|
$"{"book".PluralizeWithCount(books2change.Count)} to 'Download Pending'",
|
|
LiberatedStatus.NotLiberated,
|
|
books2change));
|
|
}
|
|
|
|
return Count;
|
|
}
|
|
|
|
public async Task ExecuteAsync()
|
|
{
|
|
foreach (var a in actionSets)
|
|
await a.LibraryBooks.UpdateBookStatusAsync(a.newStatus);
|
|
}
|
|
}
|