129 lines
4.6 KiB
C#
129 lines
4.6 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using ApplicationServices;
|
|
using Dinah.Core.Threading;
|
|
using LibationWinForms.Dialogs;
|
|
|
|
namespace LibationWinForms
|
|
{
|
|
public partial class Form1
|
|
{
|
|
private string visibleBooksToolStripMenuItem_format;
|
|
private string liberateVisibleToolStripMenuItem_format;
|
|
private string liberateVisible2ToolStripMenuItem_format;
|
|
|
|
protected void Configure_VisibleBooks()
|
|
{
|
|
// bottom-left visible count
|
|
productsGrid.VisibleCountChanged += (_, qty) => visibleCountLbl.Text = string.Format("Visible: {0}", qty);
|
|
|
|
// back up string formats
|
|
visibleBooksToolStripMenuItem_format = visibleBooksToolStripMenuItem.Text;
|
|
liberateVisibleToolStripMenuItem_format = liberateVisibleToolStripMenuItem.Text;
|
|
liberateVisible2ToolStripMenuItem_format = liberateVisible2ToolStripMenuItem.Text;
|
|
|
|
productsGrid.VisibleCountChanged += (_, qty) => {
|
|
visibleBooksToolStripMenuItem.Text = string.Format(visibleBooksToolStripMenuItem_format, qty);
|
|
visibleBooksToolStripMenuItem.Enabled = qty > 0;
|
|
|
|
var notLiberatedCount = productsGrid.GetVisible().Count(lb => lb.Book.UserDefinedItem.BookStatus == DataLayer.LiberatedStatus.NotLiberated);
|
|
};
|
|
|
|
productsGrid.VisibleCountChanged += setLiberatedVisibleMenuItemAsync;
|
|
LibraryCommands.BookUserDefinedItemCommitted += setLiberatedVisibleMenuItemAsync;
|
|
}
|
|
private async void setLiberatedVisibleMenuItemAsync(object _, int __)
|
|
=> await Task.Run(setLiberatedVisibleMenuItem);
|
|
private async void setLiberatedVisibleMenuItemAsync(object _, EventArgs __)
|
|
=> await Task.Run(setLiberatedVisibleMenuItem);
|
|
void setLiberatedVisibleMenuItem()
|
|
{
|
|
var notLiberated = productsGrid.GetVisible().Count(lb => lb.Book.UserDefinedItem.BookStatus == DataLayer.LiberatedStatus.NotLiberated);
|
|
this.UIThreadSync(() =>
|
|
{
|
|
if (notLiberated > 0)
|
|
{
|
|
liberateVisibleToolStripMenuItem.Text = string.Format(liberateVisibleToolStripMenuItem_format, notLiberated);
|
|
liberateVisibleToolStripMenuItem.Enabled = true;
|
|
|
|
liberateVisible2ToolStripMenuItem.Text = string.Format(liberateVisible2ToolStripMenuItem_format, notLiberated);
|
|
liberateVisible2ToolStripMenuItem.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
liberateVisibleToolStripMenuItem.Text = "All visible books are liberated";
|
|
liberateVisibleToolStripMenuItem.Enabled = false;
|
|
|
|
liberateVisible2ToolStripMenuItem.Text = "All visible books are liberated";
|
|
liberateVisible2ToolStripMenuItem.Enabled = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
private async void liberateVisible(object sender, EventArgs e)
|
|
=> await Task.Run(() => processBookQueue1.AddDownloadDecrypt(productsGrid.GetVisible()));
|
|
|
|
private void replaceTagsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
var dialog = new TagsBatchDialog();
|
|
var result = dialog.ShowDialog();
|
|
if (result != DialogResult.OK)
|
|
return;
|
|
|
|
var visibleLibraryBooks = productsGrid.GetVisible();
|
|
|
|
var confirmationResult = MessageBoxLib.ShowConfirmationDialog(
|
|
visibleLibraryBooks,
|
|
$"Are you sure you want to replace tags in {0}?",
|
|
"Replace tags?");
|
|
|
|
if (confirmationResult != DialogResult.Yes)
|
|
return;
|
|
|
|
foreach (var libraryBook in visibleLibraryBooks)
|
|
libraryBook.Book.UserDefinedItem.Tags = dialog.NewTags;
|
|
LibraryCommands.UpdateUserDefinedItem(visibleLibraryBooks.Select(lb => lb.Book));
|
|
}
|
|
|
|
private void setDownloadedToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
var dialog = new LiberatedStatusBatchDialog();
|
|
var result = dialog.ShowDialog();
|
|
if (result != DialogResult.OK)
|
|
return;
|
|
|
|
var visibleLibraryBooks = productsGrid.GetVisible();
|
|
|
|
var confirmationResult = MessageBoxLib.ShowConfirmationDialog(
|
|
visibleLibraryBooks,
|
|
$"Are you sure you want to replace downloaded status in {0}?",
|
|
"Replace downloaded status?");
|
|
|
|
if (confirmationResult != DialogResult.Yes)
|
|
return;
|
|
|
|
foreach (var libraryBook in visibleLibraryBooks)
|
|
libraryBook.Book.UserDefinedItem.BookStatus = dialog.BookLiberatedStatus;
|
|
LibraryCommands.UpdateUserDefinedItem(visibleLibraryBooks.Select(lb => lb.Book));
|
|
}
|
|
|
|
private async void removeToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
var visibleLibraryBooks = productsGrid.GetVisible();
|
|
|
|
var confirmationResult = MessageBoxLib.ShowConfirmationDialog(
|
|
visibleLibraryBooks,
|
|
$"Are you sure you want to remove {0} from Libation's library?",
|
|
"Remove books from Libation?");
|
|
|
|
if (confirmationResult != DialogResult.Yes)
|
|
return;
|
|
|
|
var visibleIds = visibleLibraryBooks.Select(lb => lb.Book.AudibleProductId).ToList();
|
|
await LibraryCommands.RemoveBooksAsync(visibleIds);
|
|
}
|
|
}
|
|
}
|