From b447bff9a6d3af388c0b62506acf2228ac9f61cf Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 15:11:30 -0600 Subject: [PATCH 01/21] Add audible-cli import/export accounts --- Source/AudibleUtilities/Mkb79Auth.cs | 208 ++++++++++++++++++ .../Dialogs/AccountsDialog.Designer.cs | 55 +++-- .../Dialogs/AccountsDialog.cs | 86 +++++++- .../Dialogs/AccountsDialog.resx | 13 +- 4 files changed, 341 insertions(+), 21 deletions(-) create mode 100644 Source/AudibleUtilities/Mkb79Auth.cs diff --git a/Source/AudibleUtilities/Mkb79Auth.cs b/Source/AudibleUtilities/Mkb79Auth.cs new file mode 100644 index 00000000..ec0f0520 --- /dev/null +++ b/Source/AudibleUtilities/Mkb79Auth.cs @@ -0,0 +1,208 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AudibleApi; +using AudibleApi.Authorization; +using Dinah.Core; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace AudibleUtilities +{ + public partial class Mkb79Auth : IIdentityMaintainer + { + [JsonProperty("website_cookies")] + private JObject _websiteCookies { get; set; } + + [JsonProperty("adp_token")] + public string AdpToken { get; private set; } + + [JsonProperty("access_token")] + public string AccessToken { get; private set; } + + [JsonProperty("refresh_token")] + public string RefreshToken { get; private set; } + + [JsonProperty("device_private_key")] + public string DevicePrivateKey { get; private set; } + + [JsonProperty("store_authentication_cookie")] + private JObject _storeAuthenticationCookie { get; set; } + + [JsonProperty("device_info")] + public DeviceInfo DeviceInfo { get; private set; } + + [JsonProperty("customer_info")] + public CustomerInfo CustomerInfo { get; private set; } + + [JsonProperty("expires")] + private double _expires { get; set; } + + [JsonProperty("locale_code")] + public string LocaleCode { get; private set; } + + [JsonProperty("activation_bytes")] + public string ActivationBytes { get; private set; } + + + [JsonIgnore] + public Dictionary WebsiteCookies + { + get => _websiteCookies.ToObject>(); + private set => _websiteCookies = JObject.Parse(JsonConvert.SerializeObject(value, Converter.Settings)); + } + + [JsonIgnore] + public string StoreAuthenticationCookie + { + get => _storeAuthenticationCookie.ToObject>()["cookie"]; + private set => _storeAuthenticationCookie = JObject.Parse(JsonConvert.SerializeObject(new Dictionary() { { "cookie", value } }, Converter.Settings)); + } + + [JsonIgnore] + public DateTime AccessTokenExpires + { + get => DateTimeOffset.FromUnixTimeMilliseconds((long)(_expires * 1000)).DateTime; + private set => _expires = new DateTimeOffset(value).ToUnixTimeMilliseconds() / 1000d; + } + + + [JsonIgnore] public ISystemDateTime SystemDateTime { get; } = new SystemDateTime(); + [JsonIgnore] public Locale Locale => Localization.Get(LocaleCode); + [JsonIgnore] public string DeviceSerialNumber => DeviceInfo.DeviceSerialNumber; + [JsonIgnore] public string DeviceType => DeviceInfo.DeviceType; + [JsonIgnore] public string AmazonAccountId => CustomerInfo.UserId; + + public Task GetAccessTokenAsync() + => Task.FromResult(new AccessToken(AccessToken, AccessTokenExpires)); + + public Task GetAdpTokenAsync() + => Task.FromResult(new AdpToken(AdpToken)); + + public Task GetPrivateKeyAsync() + => Task.FromResult(new PrivateKey(DevicePrivateKey)); + } + public partial class StoreAuthenticationCookie + { + [JsonProperty("cookie")] + public string Cookie { get; set; } + } + + public partial class CustomerInfo + { + [JsonProperty("account_pool")] + public string AccountPool { get; set; } + + [JsonProperty("user_id")] + public string UserId { get; set; } + + [JsonProperty("home_region")] + public string HomeRegion { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("given_name")] + public string GivenName { get; set; } + } + + public partial class DeviceInfo + { + [JsonProperty("device_name")] + public string DeviceName { get; set; } + + [JsonProperty("device_serial_number")] + public string DeviceSerialNumber { get; set; } + + [JsonProperty("device_type")] + public string DeviceType { get; set; } + } + + public partial class Mkb79Auth + { + public static Mkb79Auth FromJson(string json) + => JsonConvert.DeserializeObject(json, Converter.Settings); + + public async Task ToAccountAsync() + { + var api = new Api(this); + + if ((DateTime.Now - AccessTokenExpires).TotalMinutes >= 59) + { + var authorize = new Authorize(Locale); + var newToken = await authorize.RefreshAccessTokenAsync(new RefreshToken(RefreshToken)); + AccessToken = newToken.TokenValue; + AccessTokenExpires = newToken.Expires; + } + + var email = await api.GetEmailAsync(); + var account = new Account(email); + + var privateKey = await GetPrivateKeyAsync(); + var adpToken = await GetAdpTokenAsync(); + var accessToken = await GetAccessTokenAsync(); + var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); + + account.IdentityTokens = new Identity(Locale); + account.IdentityTokens.Update( + privateKey, + adpToken, accessToken, + new RefreshToken(RefreshToken), + cookies, + DeviceSerialNumber, + DeviceType, + AmazonAccountId, + DeviceInfo.DeviceName, + StoreAuthenticationCookie); + + account.DecryptKey = ActivationBytes; + account.AccountName = $"{email} - {Locale.Name}"; + + return account; + } + + public static Mkb79Auth FromAccount(Account account) + => new() + { + AccessToken = account.IdentityTokens.ExistingAccessToken.TokenValue, + ActivationBytes = string.IsNullOrEmpty(account.DecryptKey) ? null : account.DecryptKey, + AdpToken = account.IdentityTokens.AdpToken.Value, + CustomerInfo = new CustomerInfo + { + AccountPool = "Amazon", + GivenName = string.Empty, + HomeRegion = "NA", + Name = string.Empty, + UserId = account.IdentityTokens.AmazonAccountId + }, + DeviceInfo = new DeviceInfo + { + DeviceName = account.IdentityTokens.DeviceName, + DeviceSerialNumber = account.IdentityTokens.DeviceSerialNumber, + DeviceType = account.IdentityTokens.DeviceType, + }, + DevicePrivateKey = account.IdentityTokens.PrivateKey, + AccessTokenExpires = account.IdentityTokens.ExistingAccessToken.Expires, + LocaleCode = account.Locale.CountryCode, + RefreshToken = account.IdentityTokens.RefreshToken.Value, + StoreAuthenticationCookie = account.IdentityTokens.StoreAuthenticationCookie, + WebsiteCookies = new(account.IdentityTokens.Cookies.ToKeyValuePair()), + }; + } + + public static class Serialize + { + public static string ToJson(this Mkb79Auth self) + => JObject.Parse(JsonConvert.SerializeObject(self, Converter.Settings)).ToString(Formatting.Indented); + } + + internal static class Converter + { + public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings + { + MetadataPropertyHandling = MetadataPropertyHandling.Ignore, + DateParseHandling = DateParseHandling.None, + }; + } +} diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs index ed64f90e..4cfa4680 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs @@ -31,7 +31,9 @@ this.cancelBtn = new System.Windows.Forms.Button(); this.saveBtn = new System.Windows.Forms.Button(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.importBtn = new System.Windows.Forms.Button(); this.DeleteAccount = new System.Windows.Forms.DataGridViewButtonColumn(); + this.ExportAccount = new System.Windows.Forms.DataGridViewButtonColumn(); this.LibraryScan = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.AccountId = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Locale = new System.Windows.Forms.DataGridViewComboBoxColumn(); @@ -43,9 +45,10 @@ // this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelBtn.Location = new System.Drawing.Point(713, 415); + this.cancelBtn.Location = new System.Drawing.Point(832, 479); + this.cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.cancelBtn.Name = "cancelBtn"; - this.cancelBtn.Size = new System.Drawing.Size(75, 23); + this.cancelBtn.Size = new System.Drawing.Size(88, 27); this.cancelBtn.TabIndex = 2; this.cancelBtn.Text = "Cancel"; this.cancelBtn.UseVisualStyleBackColor = true; @@ -54,9 +57,10 @@ // saveBtn // this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.saveBtn.Location = new System.Drawing.Point(612, 415); + this.saveBtn.Location = new System.Drawing.Point(714, 479); + this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.saveBtn.Name = "saveBtn"; - this.saveBtn.Size = new System.Drawing.Size(75, 23); + this.saveBtn.Size = new System.Drawing.Size(88, 27); this.saveBtn.TabIndex = 1; this.saveBtn.Text = "Save"; this.saveBtn.UseVisualStyleBackColor = true; @@ -71,60 +75,83 @@ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.DeleteAccount, + this.ExportAccount, this.LibraryScan, this.AccountId, this.Locale, this.AccountName}); - this.dataGridView1.Location = new System.Drawing.Point(12, 12); + this.dataGridView1.Location = new System.Drawing.Point(14, 14); + this.dataGridView1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.dataGridView1.MultiSelect = false; this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.Size = new System.Drawing.Size(776, 397); + this.dataGridView1.Size = new System.Drawing.Size(905, 458); this.dataGridView1.TabIndex = 0; this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridView1_CellContentClick); this.dataGridView1.DefaultValuesNeeded += new System.Windows.Forms.DataGridViewRowEventHandler(this.dataGridView1_DefaultValuesNeeded); // + // importBtn + // + this.importBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.importBtn.Location = new System.Drawing.Point(14, 480); + this.importBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.importBtn.Name = "importBtn"; + this.importBtn.Size = new System.Drawing.Size(156, 27); + this.importBtn.TabIndex = 1; + this.importBtn.Text = "Import from audible-cli"; + this.importBtn.UseVisualStyleBackColor = true; + this.importBtn.Click += new System.EventHandler(this.importBtn_Click); + // // DeleteAccount // this.DeleteAccount.HeaderText = "Delete"; this.DeleteAccount.Name = "DeleteAccount"; this.DeleteAccount.ReadOnly = true; this.DeleteAccount.Text = "x"; - this.DeleteAccount.Width = 44; + this.DeleteAccount.Width = 46; + // + // ExportAccount + // + this.ExportAccount.HeaderText = "Export"; + this.ExportAccount.Name = "ExportAccount"; + this.ExportAccount.Text = "Export to audible-cli"; + this.ExportAccount.Width = 47; // // LibraryScan // this.LibraryScan.HeaderText = "Include in library scan?"; this.LibraryScan.Name = "LibraryScan"; - this.LibraryScan.Width = 83; + this.LibraryScan.Width = 94; // // AccountId // this.AccountId.HeaderText = "Audible email/login"; this.AccountId.Name = "AccountId"; - this.AccountId.Width = 111; + this.AccountId.Width = 125; // // Locale // this.Locale.HeaderText = "Locale"; this.Locale.Name = "Locale"; - this.Locale.Width = 45; + this.Locale.Width = 47; // // AccountName // this.AccountName.HeaderText = "Account nickname (optional)"; this.AccountName.Name = "AccountName"; - this.AccountName.Width = 152; + this.AccountName.Width = 170; // // AccountsDialog // this.AcceptButton = this.saveBtn; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancelBtn; - this.ClientSize = new System.Drawing.Size(800, 450); + this.ClientSize = new System.Drawing.Size(933, 519); this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.importBtn); this.Controls.Add(this.saveBtn); this.Controls.Add(this.cancelBtn); + this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.Name = "AccountsDialog"; this.Text = "Audible Accounts"; ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); @@ -137,7 +164,9 @@ private System.Windows.Forms.Button cancelBtn; private System.Windows.Forms.Button saveBtn; private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Button importBtn; private System.Windows.Forms.DataGridViewButtonColumn DeleteAccount; + private System.Windows.Forms.DataGridViewButtonColumn ExportAccount; private System.Windows.Forms.DataGridViewCheckBoxColumn LibraryScan; private System.Windows.Forms.DataGridViewTextBoxColumn AccountId; private System.Windows.Forms.DataGridViewComboBoxColumn Locale; diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.cs index e2a90e2a..0169ed0f 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Windows.Forms; using AudibleApi; @@ -10,6 +11,7 @@ namespace LibationWinForms.Dialogs public partial class AccountsDialog : Form { private const string COL_Delete = nameof(DeleteAccount); + private const string COL_Export = nameof(ExportAccount); private const string COL_LibraryScan = nameof(LibraryScan); private const string COL_AccountId = nameof(AccountId); private const string COL_AccountName = nameof(AccountName); @@ -44,12 +46,20 @@ namespace LibationWinForms.Dialogs return; foreach (var account in accounts) - dataGridView1.Rows.Add( + AddAccountToGrid(account); + } + + private void AddAccountToGrid(Account account) + { + int row = dataGridView1.Rows.Add( "X", + "Export", account.LibraryScan, account.AccountId, account.Locale.Name, account.AccountName); + + dataGridView1[COL_Export, row].ToolTipText = "Export account authorization to audible-cli"; } private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) @@ -73,6 +83,11 @@ namespace LibationWinForms.Dialogs if (e.RowIndex < dgv.RowCount - 1) dgv.Rows.Remove(row); break; + case COL_Export: + // if final/edit row: do nothing + if (e.RowIndex < dgv.RowCount - 1) + Export((string)row.Cells[COL_AccountId].Value, (string)row.Cells[COL_Locale].Value); + break; //case COL_MoveUp: // // if top: do nothing // if (e.RowIndex < 1) @@ -194,5 +209,74 @@ namespace LibationWinForms.Dialogs LibraryScan = (bool)r.Cells[COL_LibraryScan].Value }) .ToList(); + + private void Export(string accountId, string locale) + { + // without transaction, accounts persister will write ANY EDIT immediately to file + using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); + + var account = persister.AccountsSettings.Accounts.FirstOrDefault(a => a.AccountId == accountId && a.Locale.Name == locale); + + if (account is null) + return; + + if (account.IdentityTokens?.IsValid != true) + { + MessageBox.Show("This account hasn't been authenticated yet. First scan your library to log into your account, then try exporting again.", "Account Not Authenticated"); + return; + } + + SaveFileDialog sfd = new(); + sfd.Filter = "JSON File|*.json"; + + if (sfd.ShowDialog() != DialogResult.OK) return; + + try + { + var mkbAuth = Mkb79Auth.FromAccount(account); + var jsonText = mkbAuth.ToJson(); + + File.WriteAllText(sfd.FileName, jsonText); + + MessageBox.Show($"Successfully exported {account.AccountName} to\r\n\r\n{sfd.FileName}", "Success!"); + } + catch (Exception ex) + { + Serilog.Log.Logger.Error(ex, "Unable to export account: {0}", account); + MessageBox.Show($"An error occured while exporting account:\r\n{account.AccountName}", "Error Exporting Account"); + } + } + private async void importBtn_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new(); + ofd.Filter = "JSON File|*.json"; + + if (ofd.ShowDialog() != DialogResult.OK) return; + + try + { + var jsonText = File.ReadAllText(ofd.FileName); + var mkbAuth = Mkb79Auth.FromJson(jsonText); + var account = await mkbAuth.ToAccountAsync(); + + // without transaction, accounts persister will write ANY EDIT immediately to file + using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); + + if (persister.AccountsSettings.Accounts.Any(a => a.AccountId == account.AccountId && a.IdentityTokens.Locale.Name == account.Locale.Name)) + { + MessageBox.Show($"An account with that account id and country already exists.\r\n\r\nAccount ID: {account.AccountId}\r\nCountry: {account.Locale.Name}", "Cannot Add Duplicate Account"); + return; + } + + persister.AccountsSettings.Add(account); + + AddAccountToGrid(account); + } + catch (Exception ex) + { + Serilog.Log.Logger.Error(ex, "Unable to import audible-cli auth file: {0}", ofd.FileName); + MessageBox.Show($"An error occured while importing an account from:\r\n{ofd.FileName}\r\n\r\nIs the file encrypted?", "Error Importing Account"); + } + } } } diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.resx b/Source/LibationWinForms/Dialogs/AccountsDialog.resx index f1117452..d9e7d106 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.resx +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.resx @@ -1,5 +1,4 @@ - - + @@ -58,10 +57,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - + True @@ -70,10 +69,10 @@ True - - True - True + + True + \ No newline at end of file From 7bcabdda38b69890ac6a4ac7c982c5ec6c919cb5 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 18:30:16 -0600 Subject: [PATCH 02/21] FindInactiveBooks now fires ScanBegin and ScanEnd events --- Source/ApplicationServices/LibraryCommands.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index 66ee71e1..23c5dd7d 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -31,6 +31,13 @@ namespace ApplicationServices { logRestart(); + lock (_lock) + { + if (Scanning) + return new(); + ScanBegin?.Invoke(null, accounts.Length); + } + //These are the minimum response groups required for the //library scanner to pass all validation and filtering. var libraryOptions = new LibraryOptions @@ -83,6 +90,7 @@ namespace ApplicationServices { stop(); var putBreakPointHere = logOutput; + ScanEnd?.Invoke(null, null); } } From 52193933b2fdf5594b4faf2330dcc293b61eaa96 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 19:22:54 -0600 Subject: [PATCH 03/21] Add scan and remove books tomain view, remove separate dialog. --- Source/ApplicationServices/LibraryCommands.cs | 2 +- .../Dialogs/AccountsDialog.cs | 24 ++- .../Dialogs/RemoveBooksDialog.Designer.cs | 189 ------------------ .../Dialogs/RemoveBooksDialog.cs | 149 -------------- .../Dialogs/RemoveBooksDialog.resx | 63 ------ Source/LibationWinForms/Form1.Designer.cs | 15 +- Source/LibationWinForms/Form1.ScanManual.cs | 50 ++++- .../Form1.ScanNotification.cs | 6 + Source/LibationWinForms/Form1.resx | 36 ---- Source/LibationWinForms/GridView/GridEntry.cs | 9 + .../GridView/LibraryBookEntry.cs | 14 ++ .../GridView/ProductsDisplay.Designer.cs | 3 +- .../GridView/ProductsDisplay.cs | 62 ++++++ .../GridView/ProductsGrid.Designer.cs | 71 ++++--- .../LibationWinForms/GridView/ProductsGrid.cs | 36 ++++ .../GridView/ProductsGrid.resx | 9 +- .../LibationWinForms/GridView/SeriesEntry.cs | 36 ++++ 17 files changed, 289 insertions(+), 485 deletions(-) delete mode 100644 Source/LibationWinForms/Dialogs/RemoveBooksDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/RemoveBooksDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/RemoveBooksDialog.resx diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index 23c5dd7d..42f751e3 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -27,7 +27,7 @@ namespace ApplicationServices ScanEnd += (_, __) => Scanning = false; } - public static async Task> FindInactiveBooks(Func> apiExtendedfunc, List existingLibrary, params Account[] accounts) + public static async Task> FindInactiveBooks(Func> apiExtendedfunc, IEnumerable existingLibrary, params Account[] accounts) { logRestart(); diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.cs index 0169ed0f..f9361f22 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.cs @@ -151,13 +151,13 @@ namespace LibationWinForms.Dialogs { if (string.IsNullOrWhiteSpace(dto.AccountId)) { - MessageBox.Show("Account id cannot be blank. Please enter an account id for all accounts.", "Blank account", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(this, "Account id cannot be blank. Please enter an account id for all accounts.", "Blank account", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (string.IsNullOrWhiteSpace(dto.LocaleName)) { - MessageBox.Show("Please select a locale (i.e.: country or region) for all accounts.", "Blank region", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(this, "Please select a locale (i.e.: country or region) for all accounts.", "Blank region", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } @@ -222,7 +222,7 @@ namespace LibationWinForms.Dialogs if (account.IdentityTokens?.IsValid != true) { - MessageBox.Show("This account hasn't been authenticated yet. First scan your library to log into your account, then try exporting again.", "Account Not Authenticated"); + MessageBox.Show(this, "This account hasn't been authenticated yet. First scan your library to log into your account, then try exporting again.", "Account Not Authenticated"); return; } @@ -238,12 +238,15 @@ namespace LibationWinForms.Dialogs File.WriteAllText(sfd.FileName, jsonText); - MessageBox.Show($"Successfully exported {account.AccountName} to\r\n\r\n{sfd.FileName}", "Success!"); + MessageBox.Show(this, $"Successfully exported {account.AccountName} to\r\n\r\n{sfd.FileName}", "Success!"); } catch (Exception ex) { - Serilog.Log.Logger.Error(ex, "Unable to export account: {0}", account); - MessageBox.Show($"An error occured while exporting account:\r\n{account.AccountName}", "Error Exporting Account"); + MessageBoxLib.ShowAdminAlert( + this, + $"An error occured while exporting account:\r\n{account.AccountName}", + "Error Exporting Account", + ex); } } private async void importBtn_Click(object sender, EventArgs e) @@ -264,7 +267,7 @@ namespace LibationWinForms.Dialogs if (persister.AccountsSettings.Accounts.Any(a => a.AccountId == account.AccountId && a.IdentityTokens.Locale.Name == account.Locale.Name)) { - MessageBox.Show($"An account with that account id and country already exists.\r\n\r\nAccount ID: {account.AccountId}\r\nCountry: {account.Locale.Name}", "Cannot Add Duplicate Account"); + MessageBox.Show(this, $"An account with that account id and country already exists.\r\n\r\nAccount ID: {account.AccountId}\r\nCountry: {account.Locale.Name}", "Cannot Add Duplicate Account"); return; } @@ -274,8 +277,11 @@ namespace LibationWinForms.Dialogs } catch (Exception ex) { - Serilog.Log.Logger.Error(ex, "Unable to import audible-cli auth file: {0}", ofd.FileName); - MessageBox.Show($"An error occured while importing an account from:\r\n{ofd.FileName}\r\n\r\nIs the file encrypted?", "Error Importing Account"); + MessageBoxLib.ShowAdminAlert( + this, + $"An error occured while importing an account from:\r\n{ofd.FileName}\r\n\r\nIs the file encrypted?", + "Error Importing Account", + ex); } } } diff --git a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.Designer.cs b/Source/LibationWinForms/Dialogs/RemoveBooksDialog.Designer.cs deleted file mode 100644 index 7240b8f3..00000000 --- a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.Designer.cs +++ /dev/null @@ -1,189 +0,0 @@ - -namespace LibationWinForms.Dialogs -{ - partial class RemoveBooksDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - this._dataGridView = new System.Windows.Forms.DataGridView(); - this.removeDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.coverDataGridViewImageColumn = new System.Windows.Forms.DataGridViewImageColumn(); - this.titleDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.authorsDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.miscDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.purchaseDateGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.gridEntryBindingSource = new LibationWinForms.GridView.SyncBindingSource(this.components); - this.btnRemoveBooks = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this._dataGridView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridEntryBindingSource)).BeginInit(); - this.SuspendLayout(); - // - // _dataGridView - // - this._dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._dataGridView.AutoGenerateColumns = false; - this._dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this._dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.removeDataGridViewCheckBoxColumn, - this.coverDataGridViewImageColumn, - this.titleDataGridViewTextBoxColumn, - this.authorsDataGridViewTextBoxColumn, - this.miscDataGridViewTextBoxColumn, - this.purchaseDateGridViewTextBoxColumn}); - this._dataGridView.DataSource = this.gridEntryBindingSource; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this._dataGridView.DefaultCellStyle = dataGridViewCellStyle1; - this._dataGridView.Location = new System.Drawing.Point(0, 0); - this._dataGridView.Name = "_dataGridView"; - this._dataGridView.RowHeadersVisible = false; - this._dataGridView.RowTemplate.Height = 82; - this._dataGridView.Size = new System.Drawing.Size(730, 409); - this._dataGridView.TabIndex = 0; - // - // removeDataGridViewCheckBoxColumn - // - this.removeDataGridViewCheckBoxColumn.DataPropertyName = "Remove"; - this.removeDataGridViewCheckBoxColumn.FalseValue = "False"; - this.removeDataGridViewCheckBoxColumn.Frozen = true; - this.removeDataGridViewCheckBoxColumn.HeaderText = "Remove"; - this.removeDataGridViewCheckBoxColumn.MinimumWidth = 80; - this.removeDataGridViewCheckBoxColumn.Name = "removeDataGridViewCheckBoxColumn"; - this.removeDataGridViewCheckBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.removeDataGridViewCheckBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.removeDataGridViewCheckBoxColumn.TrueValue = "True"; - this.removeDataGridViewCheckBoxColumn.Width = 80; - // - // coverDataGridViewImageColumn - // - this.coverDataGridViewImageColumn.DataPropertyName = "Cover"; - this.coverDataGridViewImageColumn.HeaderText = "Cover"; - this.coverDataGridViewImageColumn.MinimumWidth = 80; - this.coverDataGridViewImageColumn.Name = "coverDataGridViewImageColumn"; - this.coverDataGridViewImageColumn.ReadOnly = true; - this.coverDataGridViewImageColumn.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.coverDataGridViewImageColumn.Width = 80; - // - // titleDataGridViewTextBoxColumn - // - this.titleDataGridViewTextBoxColumn.DataPropertyName = "Title"; - this.titleDataGridViewTextBoxColumn.HeaderText = "Title"; - this.titleDataGridViewTextBoxColumn.Name = "titleDataGridViewTextBoxColumn"; - this.titleDataGridViewTextBoxColumn.ReadOnly = true; - this.titleDataGridViewTextBoxColumn.Width = 200; - // - // authorsDataGridViewTextBoxColumn - // - this.authorsDataGridViewTextBoxColumn.DataPropertyName = "Authors"; - this.authorsDataGridViewTextBoxColumn.HeaderText = "Authors"; - this.authorsDataGridViewTextBoxColumn.Name = "authorsDataGridViewTextBoxColumn"; - this.authorsDataGridViewTextBoxColumn.ReadOnly = true; - // - // miscDataGridViewTextBoxColumn - // - this.miscDataGridViewTextBoxColumn.DataPropertyName = "Misc"; - this.miscDataGridViewTextBoxColumn.HeaderText = "Misc"; - this.miscDataGridViewTextBoxColumn.Name = "miscDataGridViewTextBoxColumn"; - this.miscDataGridViewTextBoxColumn.ReadOnly = true; - this.miscDataGridViewTextBoxColumn.Width = 150; - // - // purchaseDateGridViewTextBoxColumn - // - this.purchaseDateGridViewTextBoxColumn.DataPropertyName = "PurchaseDate"; - this.purchaseDateGridViewTextBoxColumn.HeaderText = "Purchase Date"; - this.purchaseDateGridViewTextBoxColumn.Name = "purchaseDateGridViewTextBoxColumn"; - this.purchaseDateGridViewTextBoxColumn.ReadOnly = true; - this.purchaseDateGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.False; - // - // gridEntryBindingSource - // - this.gridEntryBindingSource.AllowNew = false; - this.gridEntryBindingSource.DataSource = typeof(LibationWinForms.Dialogs.RemovableGridEntry); - // - // btnRemoveBooks - // - this.btnRemoveBooks.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnRemoveBooks.Location = new System.Drawing.Point(500, 419); - this.btnRemoveBooks.Name = "btnRemoveBooks"; - this.btnRemoveBooks.Size = new System.Drawing.Size(218, 23); - this.btnRemoveBooks.TabIndex = 1; - this.btnRemoveBooks.Text = "Remove Selected Books from Libation"; - this.btnRemoveBooks.UseVisualStyleBackColor = true; - this.btnRemoveBooks.Click += new System.EventHandler(this.btnRemoveBooks_Click); - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 423); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(178, 15); - this.label1.TabIndex = 2; - this.label1.Text = "{0} book{1} selected for removal."; - // - // RemoveBooksDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(730, 450); - this.Controls.Add(this.label1); - this.Controls.Add(this.btnRemoveBooks); - this.Controls.Add(this._dataGridView); - this.Name = "RemoveBooksDialog"; - this.Text = "Remove Books from Libation's Database"; - this.Shown += new System.EventHandler(this.RemoveBooksDialog_Shown); - ((System.ComponentModel.ISupportInitialize)(this._dataGridView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridEntryBindingSource)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.DataGridView _dataGridView; - private LibationWinForms.GridView.SyncBindingSource gridEntryBindingSource; - private System.Windows.Forms.Button btnRemoveBooks; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.DataGridViewCheckBoxColumn removeDataGridViewCheckBoxColumn; - private System.Windows.Forms.DataGridViewImageColumn coverDataGridViewImageColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn titleDataGridViewTextBoxColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn authorsDataGridViewTextBoxColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn miscDataGridViewTextBoxColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn purchaseDateGridViewTextBoxColumn; - } -} \ No newline at end of file diff --git a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.cs b/Source/LibationWinForms/Dialogs/RemoveBooksDialog.cs deleted file mode 100644 index 84e5ff51..00000000 --- a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Linq; -using System.Windows.Forms; -using ApplicationServices; -using AudibleUtilities; -using DataLayer; -using Dinah.Core.DataBinding; -using LibationFileManager; -using LibationWinForms.Login; - -namespace LibationWinForms.Dialogs -{ - public partial class RemoveBooksDialog : Form - { - private Account[] _accounts { get; } - private List _libraryBooks { get; } - private SortableBindingList _removableGridEntries { get; } - private string _labelFormat { get; } - private int SelectedCount => SelectedEntries?.Count() ?? 0; - private IEnumerable SelectedEntries => _removableGridEntries?.Where(b => b.Remove); - - public RemoveBooksDialog(params Account[] accounts) - { - _libraryBooks = DbContexts.GetLibrary_Flat_NoTracking(); - _accounts = accounts; - - InitializeComponent(); - - this.Load += (_, _) => this.RestoreSizeAndLocation(Configuration.Instance); - this.FormClosing += (_, _) => this.SaveSizeAndLocation(Configuration.Instance); - - _labelFormat = label1.Text; - - _dataGridView.CellContentClick += (_, _) => _dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); - _dataGridView.CellValueChanged += (_, _) => UpdateSelection(); - _dataGridView.BindingContextChanged += _dataGridView_BindingContextChanged; - - var orderedGridEntries = _libraryBooks - .Select(lb => new RemovableGridEntry(lb)) - .OrderByDescending(ge => (DateTime)ge.GetMemberValue(nameof(ge.PurchaseDate))) - .ToList(); - - _removableGridEntries = new SortableBindingList(orderedGridEntries); - gridEntryBindingSource.DataSource = _removableGridEntries; - - _dataGridView.Enabled = false; - this.SetLibationIcon(); - } - - private void _dataGridView_BindingContextChanged(object sender, EventArgs e) - { - _dataGridView.Sort(_dataGridView.Columns[0], ListSortDirection.Descending); - UpdateSelection(); - } - - private async void RemoveBooksDialog_Shown(object sender, EventArgs e) - { - if (_accounts is null || _accounts.Length == 0) - return; - try - { - var removedBooks = await LibraryCommands.FindInactiveBooks(WinformLoginChoiceEager.ApiExtendedFunc, _libraryBooks, _accounts); - - var removable = _removableGridEntries.Where(rge => removedBooks.Any(rb => rb.Book.AudibleProductId == rge.AudibleProductId)).ToList(); - - if (!removable.Any()) - return; - - foreach (var r in removable) - r.Remove = true; - - UpdateSelection(); - } - catch (Exception ex) - { - MessageBoxLib.ShowAdminAlert( - this, - "Error scanning library. You may still manually select books to remove from Libation's library.", - "Error scanning library", - ex); - } - finally - { - _dataGridView.Enabled = true; - } - } - - private async void btnRemoveBooks_Click(object sender, EventArgs e) - { - var selectedBooks = SelectedEntries.ToList(); - - if (selectedBooks.Count == 0) - return; - - var libraryBooks = selectedBooks.Select(rge => rge.LibraryBook).ToList(); - var result = MessageBoxLib.ShowConfirmationDialog( - libraryBooks, - $"Are you sure you want to remove {0} from Libation's library?", - "Remove books from Libation?"); - - if (result != DialogResult.Yes) - return; - - var idsToRemove = libraryBooks.Select(lb => lb.Book.AudibleProductId).ToList(); - var removeLibraryBooks = await LibraryCommands.RemoveBooksAsync(idsToRemove); - - foreach (var rEntry in selectedBooks) - _removableGridEntries.Remove(rEntry); - - UpdateSelection(); - } - - private void UpdateSelection() - { - var selectedCount = SelectedCount; - label1.Text = string.Format(_labelFormat, selectedCount, selectedCount != 1 ? "s" : string.Empty); - btnRemoveBooks.Enabled = selectedCount > 0; - } - } - - internal class RemovableGridEntry : GridView.LibraryBookEntry - { - private bool _remove = false; - public RemovableGridEntry(LibraryBook libraryBook) : base(libraryBook) { } - - public bool Remove - { - get - { - return _remove; - } - set - { - _remove = value; - NotifyPropertyChanged(); - } - } - - public override object GetMemberValue(string memberName) - { - if (memberName == nameof(Remove)) - return Remove; - return base.GetMemberValue(memberName); - } - } -} diff --git a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.resx b/Source/LibationWinForms/Dialogs/RemoveBooksDialog.resx deleted file mode 100644 index a3058bc8..00000000 --- a/Source/LibationWinForms/Dialogs/RemoveBooksDialog.resx +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/Source/LibationWinForms/Form1.Designer.cs b/Source/LibationWinForms/Form1.Designer.cs index c670c6d3..bcd89f8b 100644 --- a/Source/LibationWinForms/Form1.Designer.cs +++ b/Source/LibationWinForms/Form1.Designer.cs @@ -42,6 +42,7 @@ this.removeLibraryBooksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeAllAccountsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeSomeAccountsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeRemoveBooksColumnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.liberateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.beginBookBackupsToolStripMenuItem = new LibationWinForms.FormattableToolStripMenuItem(); this.beginPdfBackupsToolStripMenuItem = new LibationWinForms.FormattableToolStripMenuItem(); @@ -144,7 +145,8 @@ this.scanLibraryToolStripMenuItem, this.scanLibraryOfAllAccountsToolStripMenuItem, this.scanLibraryOfSomeAccountsToolStripMenuItem, - this.removeLibraryBooksToolStripMenuItem}); + this.removeLibraryBooksToolStripMenuItem, + this.closeRemoveBooksColumnToolStripMenuItem}); this.importToolStripMenuItem.Name = "importToolStripMenuItem"; this.importToolStripMenuItem.Size = new System.Drawing.Size(55, 20); this.importToolStripMenuItem.Text = "&Import"; @@ -209,6 +211,14 @@ this.removeSomeAccountsToolStripMenuItem.Text = "Some Accounts"; this.removeSomeAccountsToolStripMenuItem.Click += new System.EventHandler(this.removeSomeAccountsToolStripMenuItem_Click); // + // closeRemoveBooksColumnToolStripMenuItem + // + this.closeRemoveBooksColumnToolStripMenuItem.Name = "closeRemoveBooksColumnToolStripMenuItem"; + this.closeRemoveBooksColumnToolStripMenuItem.Size = new System.Drawing.Size(247, 22); + this.closeRemoveBooksColumnToolStripMenuItem.Text = "&Done Removing Books"; + this.closeRemoveBooksColumnToolStripMenuItem.Visible = false; + this.closeRemoveBooksColumnToolStripMenuItem.Click += new System.EventHandler(this.closeRemoveBooksColumnToolStripMenuItem_Click); + // // liberateToolStripMenuItem // this.liberateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -396,6 +406,7 @@ this.statusStrip1.Location = new System.Drawing.Point(0, 618); this.statusStrip1.Name = "statusStrip1"; this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); + this.statusStrip1.ShowItemToolTips = true; this.statusStrip1.Size = new System.Drawing.Size(1061, 22); this.statusStrip1.TabIndex = 6; this.statusStrip1.Text = "statusStrip1"; @@ -485,6 +496,7 @@ this.productsDisplay.Size = new System.Drawing.Size(1031, 555); this.productsDisplay.TabIndex = 9; this.productsDisplay.VisibleCountChanged += new System.EventHandler(this.productsDisplay_VisibleCountChanged); + this.productsDisplay.RemovableCountChanged += new System.EventHandler(this.productsDisplay_RemovableCountChanged); this.productsDisplay.LiberateClicked += new System.EventHandler(this.ProductsDisplay_LiberateClicked); this.productsDisplay.InitialLoaded += new System.EventHandler(this.productsDisplay_InitialLoaded); // @@ -584,5 +596,6 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Button toggleQueueHideBtn; private LibationWinForms.GridView.ProductsDisplay productsDisplay; + private System.Windows.Forms.ToolStripMenuItem closeRemoveBooksColumnToolStripMenuItem; } } diff --git a/Source/LibationWinForms/Form1.ScanManual.cs b/Source/LibationWinForms/Form1.ScanManual.cs index 4b9215d9..1228979a 100644 --- a/Source/LibationWinForms/Form1.ScanManual.cs +++ b/Source/LibationWinForms/Form1.ScanManual.cs @@ -13,10 +13,27 @@ namespace LibationWinForms // this is for manual scan/import. Unrelated to auto-scan public partial class Form1 { + + private ToolStripButton removeCheckedBtn = new(); private void Configure_ScanManual() { this.Load += refreshImportMenu; AccountsSettingsPersister.Saved += refreshImportMenu; + + #region Create and Add Tool Strip Button + removeCheckedBtn.DisplayStyle = ToolStripItemDisplayStyle.Text; + removeCheckedBtn.Name = "removeSelectedBtn"; + removeCheckedBtn.Text = "Remove 0 Books"; + removeCheckedBtn.AutoToolTip = false; + removeCheckedBtn.ToolTipText = "Remove checked books and series\r\nfrom Libation's database.\r\n\r\nThey will remain in your Audible account."; + removeCheckedBtn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + removeCheckedBtn.Alignment = ToolStripItemAlignment.Left; + removeCheckedBtn.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + removeCheckedBtn.Font = new System.Drawing.Font(removeCheckedBtn.Font, System.Drawing.FontStyle.Bold); + removeCheckedBtn.Click += (_, _) => productsDisplay.RemoveCheckedBooksAsync(); + removeCheckedBtn.Visible = false; + statusStrip1.Items.Insert(1, removeCheckedBtn); + #endregion } private void refreshImportMenu(object _, EventArgs __) @@ -106,10 +123,37 @@ namespace LibationWinForms scanLibrariesRemovedBooks(scanAccountsDialog.CheckedAccounts.ToArray()); } - private void scanLibrariesRemovedBooks(params Account[] accounts) + private async void scanLibrariesRemovedBooks(params Account[] accounts) { - using var dialog = new RemoveBooksDialog(accounts); - dialog.ShowDialog(); + //This action is meant to operate on the entire library. + //For removing books within a filter set, use + //Visible Books > Remove from library + filterSearchTb.Enabled = false; + productsDisplay.Filter(null); + + removeCheckedBtn.Visible = true; + closeRemoveBooksColumnToolStripMenuItem.Visible = true; + await productsDisplay.ScanAndRemoveBooksAsync(accounts); + } + + private void closeRemoveBooksColumnToolStripMenuItem_Click(object sender, EventArgs e) + { + removeCheckedBtn.Visible = false; + closeRemoveBooksColumnToolStripMenuItem.Visible = false; + productsDisplay.CloseRemoveBooksColumn(); + + //Restore the filter + filterSearchTb.Enabled = true; + performFilter(filterSearchTb.Text); + } + + private void productsDisplay_RemovableCountChanged(object sender, int removeCount) + { + removeCheckedBtn.Text = removeCount switch + { + 1 => "Remove 1 Book", + _ => $"Remove {removeCount} Books" + }; } private async Task scanLibrariesAsync(IEnumerable accounts) => await scanLibrariesAsync(accounts.ToArray()); diff --git a/Source/LibationWinForms/Form1.ScanNotification.cs b/Source/LibationWinForms/Form1.ScanNotification.cs index d6c5fa10..dc70537d 100644 --- a/Source/LibationWinForms/Form1.ScanNotification.cs +++ b/Source/LibationWinForms/Form1.ScanNotification.cs @@ -14,6 +14,9 @@ namespace LibationWinForms private void LibraryCommands_ScanBegin(object sender, int accountsLength) { + removeLibraryBooksToolStripMenuItem.Enabled = false; + removeAllAccountsToolStripMenuItem.Enabled = false; + removeSomeAccountsToolStripMenuItem.Enabled = false; scanLibraryToolStripMenuItem.Enabled = false; scanLibraryOfAllAccountsToolStripMenuItem.Enabled = false; scanLibraryOfSomeAccountsToolStripMenuItem.Enabled = false; @@ -27,6 +30,9 @@ namespace LibationWinForms private void LibraryCommands_ScanEnd(object sender, EventArgs e) { + removeLibraryBooksToolStripMenuItem.Enabled = true; + removeAllAccountsToolStripMenuItem.Enabled = true; + removeSomeAccountsToolStripMenuItem.Enabled = true; scanLibraryToolStripMenuItem.Enabled = true; scanLibraryOfAllAccountsToolStripMenuItem.Enabled = true; scanLibraryOfSomeAccountsToolStripMenuItem.Enabled = true; diff --git a/Source/LibationWinForms/Form1.resx b/Source/LibationWinForms/Form1.resx index 2505fa27..64da6d15 100644 --- a/Source/LibationWinForms/Form1.resx +++ b/Source/LibationWinForms/Form1.resx @@ -57,48 +57,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - True - - - True - 17, 17 - - True - 132, 17 - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - diff --git a/Source/LibationWinForms/GridView/GridEntry.cs b/Source/LibationWinForms/GridView/GridEntry.cs index 8e5702e1..a9a27c3a 100644 --- a/Source/LibationWinForms/GridView/GridEntry.cs +++ b/Source/LibationWinForms/GridView/GridEntry.cs @@ -12,6 +12,12 @@ using System.Linq; namespace LibationWinForms.GridView { + public enum RemoveStatus + { + NotRemoved, + Removed, + SomeRemoved + } /// The View Model base for the DataGridView public abstract class GridEntry : AsyncNotifyPropertyChanged, IMemberComparable { @@ -24,6 +30,9 @@ namespace LibationWinForms.GridView #region Model properties exposed to the view + protected RemoveStatus _remove = RemoveStatus.NotRemoved; + public abstract RemoveStatus Remove { get; set; } + public abstract LiberateButtonStatus Liberate { get; } public Image Cover { diff --git a/Source/LibationWinForms/GridView/LibraryBookEntry.cs b/Source/LibationWinForms/GridView/LibraryBookEntry.cs index 861b9587..85e6c687 100644 --- a/Source/LibationWinForms/GridView/LibraryBookEntry.cs +++ b/Source/LibationWinForms/GridView/LibraryBookEntry.cs @@ -20,6 +20,20 @@ namespace LibationWinForms.GridView private LiberatedStatus _bookStatus; private LiberatedStatus? _pdfStatus; + public override RemoveStatus Remove + { + get + { + return _remove; + } + set + { + _remove = value is RemoveStatus.SomeRemoved ? RemoveStatus.NotRemoved : value; + Parent?.ChildRemoveUpdate(); + NotifyPropertyChanged(); + } + } + public override LiberateButtonStatus Liberate { get diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs b/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs index db9ca6a5..abd5823e 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs @@ -39,11 +39,12 @@ this.productsGrid.Name = "productsGrid"; this.productsGrid.Size = new System.Drawing.Size(1510, 380); this.productsGrid.TabIndex = 0; + this.productsGrid.VisibleCountChanged += new System.EventHandler(this.productsGrid_VisibleCountChanged); this.productsGrid.LiberateClicked += new LibationWinForms.GridView.LibraryBookEntryClickedEventHandler(this.productsGrid_LiberateClicked); this.productsGrid.CoverClicked += new LibationWinForms.GridView.GridEntryClickedEventHandler(this.productsGrid_CoverClicked); this.productsGrid.DetailsClicked += new LibationWinForms.GridView.LibraryBookEntryClickedEventHandler(this.productsGrid_DetailsClicked); this.productsGrid.DescriptionClicked += new LibationWinForms.GridView.GridEntryRectangleClickedEventHandler(this.productsGrid_DescriptionClicked); - this.productsGrid.VisibleCountChanged += new System.EventHandler(this.productsGrid_VisibleCountChanged); + this.productsGrid.RemovableCountChanged += new LibationWinForms.GridView.GridEntryClickedEventHandler(this.productsGrid_RemovableCountChanged); // // ProductsDisplay // diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index 7eb55455..a86657c5 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -1,4 +1,5 @@ using ApplicationServices; +using AudibleUtilities; using DataLayer; using FileLiberator; using LibationFileManager; @@ -16,6 +17,7 @@ namespace LibationWinForms.GridView { /// Number of visible rows has changed public event EventHandler VisibleCountChanged; + public event EventHandler RemovableCountChanged; public event EventHandler LiberateClicked; public event EventHandler InitialLoaded; @@ -82,6 +84,61 @@ namespace LibationWinForms.GridView #region UI display functions + public void CloseRemoveBooksColumn() + => productsGrid.RemoveColumnVisible = false; + + public async void RemoveCheckedBooksAsync() + { + var selectedBooks = productsGrid.GetAllBookEntries().Where(lbe => lbe.Remove is RemoveStatus.Removed).ToList(); + + if (selectedBooks.Count == 0) + return; + + var libraryBooks = selectedBooks.Select(rge => rge.LibraryBook).ToList(); + var result = MessageBoxLib.ShowConfirmationDialog( + libraryBooks, + $"Are you sure you want to remove {selectedBooks.Count} books from Libation's library?", + "Remove books from Libation?"); + + if (result != DialogResult.Yes) + return; + + productsGrid.RemoveBooks(selectedBooks); + var idsToRemove = libraryBooks.Select(lb => lb.Book.AudibleProductId).ToList(); + var removeLibraryBooks = await LibraryCommands.RemoveBooksAsync(idsToRemove); + } + + public async Task ScanAndRemoveBooksAsync(params Account[] accounts) + { + RemovableCountChanged?.Invoke(this, 0); + productsGrid.RemoveColumnVisible = true; + + try + { + if (accounts is null || accounts.Length == 0) + return; + + var allBooks = productsGrid.GetAllBookEntries(); + var lib = allBooks.Select(lbe => lbe.LibraryBook); + var removedBooks = await LibraryCommands.FindInactiveBooks(Login.WinformLoginChoiceEager.ApiExtendedFunc, lib, accounts); + + var removable = allBooks.Where(lbe => removedBooks.Any(rb => rb.Book.AudibleProductId == lbe.AudibleProductId)).ToList(); + + foreach (var r in removable) + r.Remove = RemoveStatus.Removed; + + productsGrid_RemovableCountChanged(null); + } + catch (Exception ex) + { + MessageBoxLib.ShowAdminAlert( + this, + "Error scanning library. You may still manually select books to remove from Libation's library.", + "Error scanning library", + ex); + } + } + public void Display() { try @@ -125,5 +182,10 @@ namespace LibationWinForms.GridView { LiberateClicked?.Invoke(this, liveGridEntry.LibraryBook); } + + private void productsGrid_RemovableCountChanged(GridEntry liveGridEntry) + { + RemovableCountChanged?.Invoke(this, productsGrid.GetAllBookEntries().Count(lbe => lbe.Remove is RemoveStatus.Removed)); + } } } diff --git a/Source/LibationWinForms/GridView/ProductsGrid.Designer.cs b/Source/LibationWinForms/GridView/ProductsGrid.Designer.cs index b380ff95..bca1dec0 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.Designer.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.Designer.cs @@ -29,8 +29,9 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); this.gridEntryDataGridView = new System.Windows.Forms.DataGridView(); + this.removeGVColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.liberateGVColumn = new LibationWinForms.GridView.LiberateDataGridViewImageButtonColumn(); this.coverGVColumn = new System.Windows.Forms.DataGridViewImageColumn(); this.titleGVColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); @@ -60,41 +61,56 @@ this.gridEntryDataGridView.AutoGenerateColumns = false; this.gridEntryDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.gridEntryDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.liberateGVColumn, - this.coverGVColumn, - this.titleGVColumn, - this.authorsGVColumn, - this.narratorsGVColumn, - this.lengthGVColumn, - this.seriesGVColumn, - this.descriptionGVColumn, - this.categoryGVColumn, - this.productRatingGVColumn, - this.purchaseDateGVColumn, - this.myRatingGVColumn, - this.miscGVColumn, - this.tagAndDetailsGVColumn}); + this.removeGVColumn, + this.liberateGVColumn, + this.coverGVColumn, + this.titleGVColumn, + this.authorsGVColumn, + this.narratorsGVColumn, + this.lengthGVColumn, + this.seriesGVColumn, + this.descriptionGVColumn, + this.categoryGVColumn, + this.productRatingGVColumn, + this.purchaseDateGVColumn, + this.myRatingGVColumn, + this.miscGVColumn, + this.tagAndDetailsGVColumn}); this.gridEntryDataGridView.ContextMenuStrip = this.contextMenuStrip1; this.gridEntryDataGridView.DataSource = this.syncBindingSource; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.gridEntryDataGridView.DefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.gridEntryDataGridView.DefaultCellStyle = dataGridViewCellStyle1; this.gridEntryDataGridView.Dock = System.Windows.Forms.DockStyle.Fill; this.gridEntryDataGridView.Location = new System.Drawing.Point(0, 0); this.gridEntryDataGridView.Name = "gridEntryDataGridView"; - this.gridEntryDataGridView.ReadOnly = true; this.gridEntryDataGridView.RowHeadersVisible = false; this.gridEntryDataGridView.RowTemplate.Height = 82; - this.gridEntryDataGridView.Size = new System.Drawing.Size(1510, 380); + this.gridEntryDataGridView.Size = new System.Drawing.Size(1570, 380); this.gridEntryDataGridView.TabIndex = 0; this.gridEntryDataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridView_CellContentClick); this.gridEntryDataGridView.CellToolTipTextNeeded += new System.Windows.Forms.DataGridViewCellToolTipTextNeededEventHandler(this.gridEntryDataGridView_CellToolTipTextNeeded); // + // removeGVColumn + // + this.removeGVColumn.DataPropertyName = "Remove"; + this.removeGVColumn.FalseValue = ""; + this.removeGVColumn.Frozen = true; + this.removeGVColumn.HeaderText = "Remove"; + this.removeGVColumn.IndeterminateValue = ""; + this.removeGVColumn.MinimumWidth = 60; + this.removeGVColumn.Name = "removeGVColumn"; + this.removeGVColumn.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.removeGVColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.removeGVColumn.ThreeState = true; + this.removeGVColumn.TrueValue = ""; + this.removeGVColumn.Width = 60; + // // liberateGVColumn // this.liberateGVColumn.DataPropertyName = "Liberate"; @@ -223,7 +239,7 @@ this.AutoScroll = true; this.Controls.Add(this.gridEntryDataGridView); this.Name = "ProductsGrid"; - this.Size = new System.Drawing.Size(1510, 380); + this.Size = new System.Drawing.Size(1570, 380); this.Load += new System.EventHandler(this.ProductsGrid_Load); ((System.ComponentModel.ISupportInitialize)(this.gridEntryDataGridView)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.syncBindingSource)).EndInit(); @@ -235,6 +251,8 @@ #endregion private System.Windows.Forms.DataGridView gridEntryDataGridView; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private SyncBindingSource syncBindingSource; + private System.Windows.Forms.DataGridViewCheckBoxColumn removeGVColumn; private LiberateDataGridViewImageButtonColumn liberateGVColumn; private System.Windows.Forms.DataGridViewImageColumn coverGVColumn; private System.Windows.Forms.DataGridViewTextBoxColumn titleGVColumn; @@ -249,6 +267,5 @@ private System.Windows.Forms.DataGridViewTextBoxColumn myRatingGVColumn; private System.Windows.Forms.DataGridViewTextBoxColumn miscGVColumn; private EditTagsDataGridViewImageButtonColumn tagAndDetailsGVColumn; - private SyncBindingSource syncBindingSource; } } diff --git a/Source/LibationWinForms/GridView/ProductsGrid.cs b/Source/LibationWinForms/GridView/ProductsGrid.cs index c13a2d12..77a6d295 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.cs @@ -23,12 +23,15 @@ namespace LibationWinForms.GridView public event LibraryBookEntryClickedEventHandler DetailsClicked; public event GridEntryRectangleClickedEventHandler DescriptionClicked; public new event EventHandler Scroll; + public event GridEntryClickedEventHandler RemovableCountChanged; private GridEntryBindingList bindingList; internal IEnumerable GetVisibleBooks() => bindingList .BookEntries() .Select(lbe => lbe.LibraryBook); + internal IEnumerable GetAllBookEntries() + => bindingList.AllItems().BookEntries(); public ProductsGrid() { @@ -81,6 +84,12 @@ namespace LibationWinForms.GridView else if (e.ColumnIndex == coverGVColumn.Index) CoverClicked?.Invoke(sEntry); } + + if (e.ColumnIndex == removeGVColumn.Index) + { + gridEntryDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); + RemovableCountChanged?.Invoke(entry); + } } private GridEntry getGridEntry(int rowIndex) => gridEntryDataGridView.GetBoundItem(rowIndex); @@ -89,6 +98,20 @@ namespace LibationWinForms.GridView #region UI display functions + internal bool RemoveColumnVisible + { + get => removeGVColumn.Visible; + set + { + if (value) + { + foreach (var book in bindingList.AllItems()) + book.Remove = RemoveStatus.NotRemoved; + } + removeGVColumn.Visible = value; + } + } + internal void BindToGrid(List dbBooks) { var geList = dbBooks.Where(lb => lb.Book.IsProduct()).Select(b => new LibraryBookEntry(b)).Cast().ToList(); @@ -153,6 +176,11 @@ namespace LibationWinForms.GridView .BookEntries() .ExceptBy(dbBooks.Select(lb => lb.Book.AudibleProductId), ge => ge.AudibleProductId); + RemoveBooks(removedBooks); + } + + public void RemoveBooks(IEnumerable removedBooks) + { //Remove books in series from their parents' Children list foreach (var removed in removedBooks.Where(b => b.Parent is not null)) { @@ -312,6 +340,14 @@ namespace LibationWinForms.GridView column.DisplayIndex = displayIndices.GetValueOrDefault(itemName, column.Index); } + + //Remove column is always first; + removeGVColumn.DisplayIndex = 0; + removeGVColumn.Visible = false; + removeGVColumn.ValueType = typeof(RemoveStatus); + removeGVColumn.FalseValue = RemoveStatus.NotRemoved; + removeGVColumn.TrueValue = RemoveStatus.Removed; + removeGVColumn.IndeterminateValue = RemoveStatus.SomeRemoved; } private void HideMenuItem_Click(object sender, EventArgs e) diff --git a/Source/LibationWinForms/GridView/ProductsGrid.resx b/Source/LibationWinForms/GridView/ProductsGrid.resx index bc15cd01..72deb6eb 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.resx +++ b/Source/LibationWinForms/GridView/ProductsGrid.resx @@ -57,16 +57,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + 171, 17 17, 17 - - 326, 17 - - - 326, 17 - \ No newline at end of file diff --git a/Source/LibationWinForms/GridView/SeriesEntry.cs b/Source/LibationWinForms/GridView/SeriesEntry.cs index ca422029..9ceba47e 100644 --- a/Source/LibationWinForms/GridView/SeriesEntry.cs +++ b/Source/LibationWinForms/GridView/SeriesEntry.cs @@ -13,7 +13,43 @@ namespace LibationWinForms.GridView [Browsable(false)] public List Children { get; } [Browsable(false)] public override DateTime DateAdded => Children.Max(c => c.DateAdded); + private bool suspendCounting = false; + public void ChildRemoveUpdate() + { + if (suspendCounting) return; + + var removeCount = Children.Count(c => c.Remove is RemoveStatus.Removed); + + if (removeCount == 0) + _remove = RemoveStatus.NotRemoved; + else if (removeCount == Children.Count) + _remove = RemoveStatus.Removed; + else + _remove = RemoveStatus.SomeRemoved; + NotifyPropertyChanged(nameof(Remove)); + } + #region Model properties exposed to the view + public override RemoveStatus Remove + { + get + { + return _remove; + } + set + { + _remove = value is RemoveStatus.SomeRemoved ? RemoveStatus.NotRemoved : value; + + suspendCounting = true; + + foreach (var item in Children) + item.Remove = value; + + suspendCounting = false; + + NotifyPropertyChanged(); + } + } public override LiberateButtonStatus Liberate { get; } public override string DisplayTags { get; } = string.Empty; From 60e96572ffe5f050c389a20b76d5596a813f1d6a Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 19:34:49 -0600 Subject: [PATCH 04/21] Always refresh token, regardless of expiration date. --- Source/AudibleUtilities/Mkb79Auth.cs | 49 +++++++++++++--------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/Source/AudibleUtilities/Mkb79Auth.cs b/Source/AudibleUtilities/Mkb79Auth.cs index ec0f0520..7aff3840 100644 --- a/Source/AudibleUtilities/Mkb79Auth.cs +++ b/Source/AudibleUtilities/Mkb79Auth.cs @@ -45,7 +45,6 @@ namespace AudibleUtilities [JsonProperty("activation_bytes")] public string ActivationBytes { get; private set; } - [JsonIgnore] public Dictionary WebsiteCookies { @@ -67,7 +66,6 @@ namespace AudibleUtilities private set => _expires = new DateTimeOffset(value).ToUnixTimeMilliseconds() / 1000d; } - [JsonIgnore] public ISystemDateTime SystemDateTime { get; } = new SystemDateTime(); [JsonIgnore] public Locale Locale => Localization.Get(LocaleCode); [JsonIgnore] public string DeviceSerialNumber => DeviceInfo.DeviceSerialNumber; @@ -83,11 +81,6 @@ namespace AudibleUtilities public Task GetPrivateKeyAsync() => Task.FromResult(new PrivateKey(DevicePrivateKey)); } - public partial class StoreAuthenticationCookie - { - [JsonProperty("cookie")] - public string Cookie { get; set; } - } public partial class CustomerInfo { @@ -124,31 +117,36 @@ namespace AudibleUtilities public static Mkb79Auth FromJson(string json) => JsonConvert.DeserializeObject(json, Converter.Settings); + public string ToJson() + => JObject.Parse(JsonConvert.SerializeObject(this, Converter.Settings)).ToString(Formatting.Indented); + public async Task ToAccountAsync() { - var api = new Api(this); - - if ((DateTime.Now - AccessTokenExpires).TotalMinutes >= 59) - { - var authorize = new Authorize(Locale); - var newToken = await authorize.RefreshAccessTokenAsync(new RefreshToken(RefreshToken)); - AccessToken = newToken.TokenValue; - AccessTokenExpires = newToken.Expires; - } - - var email = await api.GetEmailAsync(); - var account = new Account(email); - var privateKey = await GetPrivateKeyAsync(); var adpToken = await GetAdpTokenAsync(); var accessToken = await GetAccessTokenAsync(); + var refreshToken = new RefreshToken(RefreshToken); var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); - account.IdentityTokens = new Identity(Locale); + var authorize = new Authorize(Locale); + var newToken = await authorize.RefreshAccessTokenAsync(refreshToken); + AccessToken = newToken.TokenValue; + AccessTokenExpires = newToken.Expires; + + var api = new Api(this); + var email = await api.GetEmailAsync(); + var account = new Account(email) + { + DecryptKey = ActivationBytes, + AccountName = $"{email} - {Locale.Name}", + IdentityTokens = new Identity(Locale) + }; + account.IdentityTokens.Update( privateKey, - adpToken, accessToken, - new RefreshToken(RefreshToken), + adpToken, + accessToken, + refreshToken, cookies, DeviceSerialNumber, DeviceType, @@ -156,9 +154,6 @@ namespace AudibleUtilities DeviceInfo.DeviceName, StoreAuthenticationCookie); - account.DecryptKey = ActivationBytes; - account.AccountName = $"{email} - {Locale.Name}"; - return account; } @@ -185,7 +180,7 @@ namespace AudibleUtilities DevicePrivateKey = account.IdentityTokens.PrivateKey, AccessTokenExpires = account.IdentityTokens.ExistingAccessToken.Expires, LocaleCode = account.Locale.CountryCode, - RefreshToken = account.IdentityTokens.RefreshToken.Value, + RefreshToken = account.IdentityTokens.RefreshToken.Value, StoreAuthenticationCookie = account.IdentityTokens.StoreAuthenticationCookie, WebsiteCookies = new(account.IdentityTokens.Cookies.ToKeyValuePair()), }; From 2eca9056b9583b3c50d2b287927c45e5e8342f27 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 19:36:00 -0600 Subject: [PATCH 05/21] Reorder api calls --- Source/AudibleUtilities/Mkb79Auth.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/AudibleUtilities/Mkb79Auth.cs b/Source/AudibleUtilities/Mkb79Auth.cs index 7aff3840..a9c22249 100644 --- a/Source/AudibleUtilities/Mkb79Auth.cs +++ b/Source/AudibleUtilities/Mkb79Auth.cs @@ -122,17 +122,18 @@ namespace AudibleUtilities public async Task ToAccountAsync() { - var privateKey = await GetPrivateKeyAsync(); - var adpToken = await GetAdpTokenAsync(); - var accessToken = await GetAccessTokenAsync(); var refreshToken = new RefreshToken(RefreshToken); - var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); var authorize = new Authorize(Locale); var newToken = await authorize.RefreshAccessTokenAsync(refreshToken); AccessToken = newToken.TokenValue; AccessTokenExpires = newToken.Expires; + var privateKey = await GetPrivateKeyAsync(); + var adpToken = await GetAdpTokenAsync(); + var accessToken = await GetAccessTokenAsync(); + var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); + var api = new Api(this); var email = await api.GetEmailAsync(); var account = new Account(email) From 4111d5fa489ff126d09571c0a94eeb1376ecf71c Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 19:37:50 -0600 Subject: [PATCH 06/21] Remove redundant declarations. --- Source/AudibleUtilities/Mkb79Auth.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Source/AudibleUtilities/Mkb79Auth.cs b/Source/AudibleUtilities/Mkb79Auth.cs index a9c22249..f3bc6db5 100644 --- a/Source/AudibleUtilities/Mkb79Auth.cs +++ b/Source/AudibleUtilities/Mkb79Auth.cs @@ -129,11 +129,6 @@ namespace AudibleUtilities AccessToken = newToken.TokenValue; AccessTokenExpires = newToken.Expires; - var privateKey = await GetPrivateKeyAsync(); - var adpToken = await GetAdpTokenAsync(); - var accessToken = await GetAccessTokenAsync(); - var cookies = WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)); - var api = new Api(this); var email = await api.GetEmailAsync(); var account = new Account(email) @@ -144,11 +139,11 @@ namespace AudibleUtilities }; account.IdentityTokens.Update( - privateKey, - adpToken, - accessToken, + await GetPrivateKeyAsync(), + await GetAdpTokenAsync(), + await GetAccessTokenAsync(), refreshToken, - cookies, + WebsiteCookies.Select(c => new KeyValuePair(c.Key, c.Value)), DeviceSerialNumber, DeviceType, AmazonAccountId, From f8f5eac109847f4d05af2ec370833eae1d959b16 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 20:45:10 -0600 Subject: [PATCH 07/21] Refactor --- Source/LibationWinForms/Form1.RemoveBooks.cs | 104 ++++++++++++++++++ Source/LibationWinForms/Form1.ScanManual.cs | 89 +-------------- Source/LibationWinForms/Form1.cs | 1 + .../GridView/ProductsDisplay.Designer.cs | 2 +- .../GridView/ProductsDisplay.cs | 12 +- .../LibationWinForms/GridView/ProductsGrid.cs | 4 +- 6 files changed, 117 insertions(+), 95 deletions(-) create mode 100644 Source/LibationWinForms/Form1.RemoveBooks.cs diff --git a/Source/LibationWinForms/Form1.RemoveBooks.cs b/Source/LibationWinForms/Form1.RemoveBooks.cs new file mode 100644 index 00000000..35fe0b38 --- /dev/null +++ b/Source/LibationWinForms/Form1.RemoveBooks.cs @@ -0,0 +1,104 @@ +using AudibleUtilities; +using LibationWinForms.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LibationWinForms +{ + public partial class Form1 + { + private ToolStripButton removeCheckedBtn = new(); + public void Configure_RemoveBooks() + { + + #region Create and Add Tool Strip Button + removeCheckedBtn.DisplayStyle = ToolStripItemDisplayStyle.Text; + removeCheckedBtn.Name = "removeSelectedBtn"; + removeCheckedBtn.Text = "Remove 0 Books"; + removeCheckedBtn.AutoToolTip = false; + removeCheckedBtn.ToolTipText = "Remove checked books and series\r\nfrom Libation's database.\r\n\r\nThey will remain in your Audible account."; + removeCheckedBtn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + removeCheckedBtn.Alignment = ToolStripItemAlignment.Left; + removeCheckedBtn.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + removeCheckedBtn.Font = new System.Drawing.Font(removeCheckedBtn.Font, System.Drawing.FontStyle.Bold); + removeCheckedBtn.Click += (_, _) => productsDisplay.RemoveCheckedBooksAsync(); + removeCheckedBtn.Visible = false; + statusStrip1.Items.Insert(1, removeCheckedBtn); + #endregion + } + + private void removeLibraryBooksToolStripMenuItem_Click(object sender, EventArgs e) + { + // if 0 accounts, this will not be visible + // if 1 account, run scanLibrariesRemovedBooks() on this account + // if multiple accounts, another menu set will open. do not run scanLibrariesRemovedBooks() + using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); + var accounts = persister.AccountsSettings.GetAll(); + + if (accounts.Count != 1) + return; + + var firstAccount = accounts.Single(); + scanLibrariesRemovedBooks(firstAccount); + } + + // selectively remove books from all accounts + private void removeAllAccountsToolStripMenuItem_Click(object sender, EventArgs e) + { + using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); + var allAccounts = persister.AccountsSettings.GetAll(); + scanLibrariesRemovedBooks(allAccounts.ToArray()); + } + + // selectively remove books from some accounts + private void removeSomeAccountsToolStripMenuItem_Click(object sender, EventArgs e) + { + using var scanAccountsDialog = new ScanAccountsDialog(); + + if (scanAccountsDialog.ShowDialog() != DialogResult.OK) + return; + + if (!scanAccountsDialog.CheckedAccounts.Any()) + return; + + scanLibrariesRemovedBooks(scanAccountsDialog.CheckedAccounts.ToArray()); + } + + private async void scanLibrariesRemovedBooks(params Account[] accounts) + { + //This action is meant to operate on the entire library. + //For removing books within a filter set, use + //Visible Books > Remove from library + filterSearchTb.Enabled = false; + productsDisplay.Filter(null); + + removeCheckedBtn.Visible = true; + closeRemoveBooksColumnToolStripMenuItem.Visible = true; + await productsDisplay.ScanAndRemoveBooksAsync(accounts); + } + + private void closeRemoveBooksColumnToolStripMenuItem_Click(object sender, EventArgs e) + { + removeCheckedBtn.Visible = false; + closeRemoveBooksColumnToolStripMenuItem.Visible = false; + productsDisplay.CloseRemoveBooksColumn(); + + //Restore the filter + filterSearchTb.Enabled = true; + performFilter(filterSearchTb.Text); + } + + private void productsDisplay_RemovableCountChanged(object sender, int removeCount) + { + removeCheckedBtn.Text = removeCount switch + { + 1 => "Remove 1 Book", + _ => $"Remove {removeCount} Books" + }; + } + } +} diff --git a/Source/LibationWinForms/Form1.ScanManual.cs b/Source/LibationWinForms/Form1.ScanManual.cs index 1228979a..b90c8826 100644 --- a/Source/LibationWinForms/Form1.ScanManual.cs +++ b/Source/LibationWinForms/Form1.ScanManual.cs @@ -13,27 +13,10 @@ namespace LibationWinForms // this is for manual scan/import. Unrelated to auto-scan public partial class Form1 { - - private ToolStripButton removeCheckedBtn = new(); private void Configure_ScanManual() { this.Load += refreshImportMenu; AccountsSettingsPersister.Saved += refreshImportMenu; - - #region Create and Add Tool Strip Button - removeCheckedBtn.DisplayStyle = ToolStripItemDisplayStyle.Text; - removeCheckedBtn.Name = "removeSelectedBtn"; - removeCheckedBtn.Text = "Remove 0 Books"; - removeCheckedBtn.AutoToolTip = false; - removeCheckedBtn.ToolTipText = "Remove checked books and series\r\nfrom Libation's database.\r\n\r\nThey will remain in your Audible account."; - removeCheckedBtn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - removeCheckedBtn.Alignment = ToolStripItemAlignment.Left; - removeCheckedBtn.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - removeCheckedBtn.Font = new System.Drawing.Font(removeCheckedBtn.Font, System.Drawing.FontStyle.Bold); - removeCheckedBtn.Click += (_, _) => productsDisplay.RemoveCheckedBooksAsync(); - removeCheckedBtn.Visible = false; - statusStrip1.Items.Insert(1, removeCheckedBtn); - #endregion } private void refreshImportMenu(object _, EventArgs __) @@ -84,77 +67,7 @@ namespace LibationWinForms return; await scanLibrariesAsync(scanAccountsDialog.CheckedAccounts); - } - - private void removeLibraryBooksToolStripMenuItem_Click(object sender, EventArgs e) - { - // if 0 accounts, this will not be visible - // if 1 account, run scanLibrariesRemovedBooks() on this account - // if multiple accounts, another menu set will open. do not run scanLibrariesRemovedBooks() - using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); - var accounts = persister.AccountsSettings.GetAll(); - - if (accounts.Count != 1) - return; - - var firstAccount = accounts.Single(); - scanLibrariesRemovedBooks(firstAccount); - } - - // selectively remove books from all accounts - private void removeAllAccountsToolStripMenuItem_Click(object sender, EventArgs e) - { - using var persister = AudibleApiStorage.GetAccountsSettingsPersister(); - var allAccounts = persister.AccountsSettings.GetAll(); - scanLibrariesRemovedBooks(allAccounts.ToArray()); - } - - // selectively remove books from some accounts - private void removeSomeAccountsToolStripMenuItem_Click(object sender, EventArgs e) - { - using var scanAccountsDialog = new ScanAccountsDialog(); - - if (scanAccountsDialog.ShowDialog() != DialogResult.OK) - return; - - if (!scanAccountsDialog.CheckedAccounts.Any()) - return; - - scanLibrariesRemovedBooks(scanAccountsDialog.CheckedAccounts.ToArray()); - } - - private async void scanLibrariesRemovedBooks(params Account[] accounts) - { - //This action is meant to operate on the entire library. - //For removing books within a filter set, use - //Visible Books > Remove from library - filterSearchTb.Enabled = false; - productsDisplay.Filter(null); - - removeCheckedBtn.Visible = true; - closeRemoveBooksColumnToolStripMenuItem.Visible = true; - await productsDisplay.ScanAndRemoveBooksAsync(accounts); - } - - private void closeRemoveBooksColumnToolStripMenuItem_Click(object sender, EventArgs e) - { - removeCheckedBtn.Visible = false; - closeRemoveBooksColumnToolStripMenuItem.Visible = false; - productsDisplay.CloseRemoveBooksColumn(); - - //Restore the filter - filterSearchTb.Enabled = true; - performFilter(filterSearchTb.Text); - } - - private void productsDisplay_RemovableCountChanged(object sender, int removeCount) - { - removeCheckedBtn.Text = removeCount switch - { - 1 => "Remove 1 Book", - _ => $"Remove {removeCount} Books" - }; - } + } private async Task scanLibrariesAsync(IEnumerable accounts) => await scanLibrariesAsync(accounts.ToArray()); private async Task scanLibrariesAsync(params Account[] accounts) diff --git a/Source/LibationWinForms/Form1.cs b/Source/LibationWinForms/Form1.cs index 8eb15705..068e7cac 100644 --- a/Source/LibationWinForms/Form1.cs +++ b/Source/LibationWinForms/Form1.cs @@ -44,6 +44,7 @@ namespace LibationWinForms Configure_VisibleBooks(); Configure_QuickFilters(); Configure_ScanManual(); + Configure_RemoveBooks(); Configure_Liberate(); Configure_Export(); Configure_Settings(); diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs b/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs index abd5823e..b84d670c 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.Designer.cs @@ -44,7 +44,7 @@ this.productsGrid.CoverClicked += new LibationWinForms.GridView.GridEntryClickedEventHandler(this.productsGrid_CoverClicked); this.productsGrid.DetailsClicked += new LibationWinForms.GridView.LibraryBookEntryClickedEventHandler(this.productsGrid_DetailsClicked); this.productsGrid.DescriptionClicked += new LibationWinForms.GridView.GridEntryRectangleClickedEventHandler(this.productsGrid_DescriptionClicked); - this.productsGrid.RemovableCountChanged += new LibationWinForms.GridView.GridEntryClickedEventHandler(this.productsGrid_RemovableCountChanged); + this.productsGrid.RemovableCountChanged += new System.EventHandler(this.productsGrid_RemovableCountChanged); // // ProductsDisplay // diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index a86657c5..4487a8bd 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -82,7 +82,7 @@ namespace LibationWinForms.GridView #endregion - #region UI display functions + #region Scan and Remove Books public void CloseRemoveBooksColumn() => productsGrid.RemoveColumnVisible = false; @@ -127,7 +127,7 @@ namespace LibationWinForms.GridView foreach (var r in removable) r.Remove = RemoveStatus.Removed; - productsGrid_RemovableCountChanged(null); + productsGrid_RemovableCountChanged(this, null); } catch (Exception ex) { @@ -139,6 +139,10 @@ namespace LibationWinForms.GridView } } + #endregion + + #region UI display functions + public void Display() { try @@ -183,9 +187,9 @@ namespace LibationWinForms.GridView LiberateClicked?.Invoke(this, liveGridEntry.LibraryBook); } - private void productsGrid_RemovableCountChanged(GridEntry liveGridEntry) + private void productsGrid_RemovableCountChanged(object sender, EventArgs e) { - RemovableCountChanged?.Invoke(this, productsGrid.GetAllBookEntries().Count(lbe => lbe.Remove is RemoveStatus.Removed)); + RemovableCountChanged?.Invoke(sender, productsGrid.GetAllBookEntries().Count(lbe => lbe.Remove is RemoveStatus.Removed)); } } } diff --git a/Source/LibationWinForms/GridView/ProductsGrid.cs b/Source/LibationWinForms/GridView/ProductsGrid.cs index 77a6d295..eea3dc67 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.cs @@ -23,7 +23,7 @@ namespace LibationWinForms.GridView public event LibraryBookEntryClickedEventHandler DetailsClicked; public event GridEntryRectangleClickedEventHandler DescriptionClicked; public new event EventHandler Scroll; - public event GridEntryClickedEventHandler RemovableCountChanged; + public event EventHandler RemovableCountChanged; private GridEntryBindingList bindingList; internal IEnumerable GetVisibleBooks() @@ -88,7 +88,7 @@ namespace LibationWinForms.GridView if (e.ColumnIndex == removeGVColumn.Index) { gridEntryDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); - RemovableCountChanged?.Invoke(entry); + RemovableCountChanged?.Invoke(this, EventArgs.Empty); } } From 984119c7eedc8c7695345ceeb834276189f86bfc Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 10 Jun 2022 21:00:04 -0600 Subject: [PATCH 08/21] Exit download loop if zero bytes are read. --- Source/AaxDecrypter/NetworkFileStream.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/AaxDecrypter/NetworkFileStream.cs b/Source/AaxDecrypter/NetworkFileStream.cs index e0a6506f..e1159d67 100644 --- a/Source/AaxDecrypter/NetworkFileStream.cs +++ b/Source/AaxDecrypter/NetworkFileStream.cs @@ -221,9 +221,10 @@ namespace AaxDecrypter try { + int bytesRead; do { - var bytesRead = _networkStream.Read(buff, 0, DOWNLOAD_BUFF_SZ); + bytesRead = _networkStream.Read(buff, 0, DOWNLOAD_BUFF_SZ); _writeFile.Write(buff, 0, bytesRead); downloadPosition += bytesRead; @@ -237,7 +238,7 @@ namespace AaxDecrypter downloadedPiece.Set(); } - } while (downloadPosition < ContentLength && !IsCancelled); + } while (downloadPosition < ContentLength && !IsCancelled && bytesRead > 0); _writeFile.Close(); _networkStream.Close(); From 1ae5f99bf02840dac1945bf51bdde704b805cf1e Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sat, 11 Jun 2022 12:41:20 -0600 Subject: [PATCH 09/21] Add migration to try and fix db for incorrect or missing espiode series entries. --- Source/AppScaffolding/LibationScaffolding.cs | 61 +++++++++--- Source/ApplicationServices/LibraryCommands.cs | 97 ++++++++++++++++++- Source/DataLayer/QueryObjects/BookQueries.cs | 4 +- .../QueryObjects/LibraryBookQueries.cs | 37 +++++-- .../LibationWinForms/GridView/ProductsGrid.cs | 24 +++-- .../GridView/QueryExtensions.cs | 20 ++-- 6 files changed, 205 insertions(+), 38 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index e16f52f0..91f0f963 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -5,10 +5,10 @@ using System.Linq; using System.Reflection; using ApplicationServices; using AudibleUtilities; -using Dinah.Core; using Dinah.Core.IO; using Dinah.Core.Logging; using LibationFileManager; +using Microsoft.EntityFrameworkCore; using Newtonsoft.Json.Linq; using Serilog; @@ -405,25 +405,58 @@ namespace AppScaffolding public static void migrate_from_7_10_1(Configuration config) { - //This migration removes books and series with SERIES_ prefix that were created - //as a hack workaround in 7.10.1. Said workaround was removed in 7.10.2 - - var migrated = config.GetNonString(nameof(migrate_from_7_10_1)); - - if (migrated) return; + //https://github.com/rmcrackan/Libation/issues/270#issuecomment-1152863629 + //This migration helps fix databases contaminated with the 7.10.1 hack workaround + //and those with improperly identified or missing series. This does not solve cases + //where individual episodes are in the db with a valid series link, but said series' + //parents have not been imported into the database. For those cases, Libation will + //attempt fixup by retrieving parents from the catalog endpoint using var context = DbContexts.GetContext(); - var booksToRemove = context.Books.Where(b => b.AudibleProductId.StartsWith("SERIES_")).ToArray(); - var seriesToRemove = context.Series.Where(s => s.AudibleSeriesId.StartsWith("SERIES_")).ToArray(); - var lbToRemove = context.LibraryBooks.Where(lb => booksToRemove.Any(b => b == lb.Book)).ToArray(); + //This migration removes books and series with SERIES_ prefix that were created + //as a hack workaround in 7.10.1. Said workaround was removed in 7.10.2 + string removeHackSeries = "delete " + + "from series " + + "where AudibleSeriesId like 'SERIES%'"; - context.LibraryBooks.RemoveRange(lbToRemove); - context.Books.RemoveRange(booksToRemove); - context.Series.RemoveRange(seriesToRemove); + string removeHackBooks = "delete " + + "from books " + + "where AudibleProductId like 'SERIES%'"; + + //Detect series parents that were added to the database as books with ContentType.Episode, + //and change them to ContentType.Parent + string updateContentType = + "UPDATE books " + + "SET contenttype = 4 " + + "WHERE audibleproductid IN(SELECT books.audibleproductid " + + "FROM books " + + "INNER JOIN series " + + "ON ( books.audibleproductid = " + + "series.audibleseriesid) " + + "WHERE books.contenttype = 2)"; + + //Then detect series parents that were added to the database as books with ContentType.Parent + //but are missing a series link, and add the link (don't know how this happened) + string addMissingSeriesLink = + "INSERT INTO seriesbook " + + "SELECT series.seriesid, " + + "books.bookid, " + + "'- 1' " + + "FROM books " + + "LEFT OUTER JOIN seriesbook " + + "ON books.bookid = seriesbook.bookid " + + "INNER JOIN series " + + "ON books.audibleproductid = series.audibleseriesid " + + "WHERE books.contenttype = 4 " + + "AND seriesbook.seriesid IS NULL"; + + context.Database.ExecuteSqlRaw(removeHackSeries); + context.Database.ExecuteSqlRaw(removeHackBooks); + context.Database.ExecuteSqlRaw(updateContentType); + context.Database.ExecuteSqlRaw(addMissingSeriesLink); LibraryCommands.SaveContext(context); - config.SetObject(nameof(migrate_from_7_10_1), true); } } } diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index 42f751e3..cd6165b5 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -126,6 +126,22 @@ namespace ApplicationServices if (totalCount == 0) return default; + + Log.Logger.Information("Begin scan for orphaned episode parents"); + var newParents = await findAndAddMissingParents(apiExtendedfunc, accounts); + Log.Logger.Information($"Orphan episode scan complete. New parents count {newParents}"); + + if (newParents >= 0) + { + //If any episodes are still orphaned, their series have been + //removed from the catalog and wel'll never be able to find them. + + //only do this if findAndAddMissingParents returned >= 0. If it + //returned < 0, an error happened and there's still a chance that + //a future successful run will find missing parents. + removedOrphanedEpisodes(); + } + Log.Logger.Information("Begin long-running import"); logTime($"pre {nameof(importIntoDbAsync)}"); var newCount = await importIntoDbAsync(importItems); @@ -207,7 +223,7 @@ namespace ApplicationServices using var context = DbContexts.GetContext(); var libraryBookImporter = new LibraryBookImporter(context); var newCount = await Task.Run(() => libraryBookImporter.Import(importItems)); - logTime("importIntoDbAsync -- post Import()"); + logTime("importIntoDbAsync -- post Import()"); int qtyChanges = SaveContext(context); logTime("importIntoDbAsync -- post SaveChanges"); @@ -219,7 +235,84 @@ namespace ApplicationServices return newCount; } - public static int SaveContext(LibationContext context) + static void removedOrphanedEpisodes() + { + using var context = DbContexts.GetContext(); + try + { + var orphanedEpisodes = + context + .GetLibrary_Flat_NoTracking(includeParents: true) + .FindOrphanedEpisodes(); + + context.LibraryBooks.RemoveRange(orphanedEpisodes); + context.Books.RemoveRange(orphanedEpisodes.Select(lb => lb.Book)); + + } + catch (Exception ex) + { + Serilog.Log.Logger.Error(ex, "An error occured while trying to remove orphaned episodes from the database"); + } + } + + static async Task findAndAddMissingParents(Func> apiExtendedfunc, Account[] accounts) + { + using var context = DbContexts.GetContext(); + + var library = context.GetLibrary_Flat_NoTracking(includeParents: true); + + try + { + var orphanedEpisodes = library.FindOrphanedEpisodes().ToList(); + + if (!orphanedEpisodes.Any()) + return -1; + + var orphanedSeries = + orphanedEpisodes + .SelectMany(lb => lb.Book.SeriesLink) + .DistinctBy(s => s.Series.AudibleSeriesId) + .ToList(); + + // We're only calling the Catalog endpoint, so it doesn't matter which account we use. + var apiExtended = await apiExtendedfunc(accounts[0]); + + var seriesParents = orphanedSeries.Select(o => o.Series.AudibleSeriesId).ToList(); + var items = await apiExtended.Api.GetCatalogProductsAsync(seriesParents, CatalogOptions.ResponseGroupOptions.ALL_OPTIONS); + + List newParentsImportItems = new(); + foreach (var sp in orphanedSeries) + { + var serie = items.First(i => i.Asin == sp.Series.AudibleSeriesId); + var lb = orphanedEpisodes.First(l => l.Book.AudibleProductId == sp.Book.AudibleProductId); + + if (serie.Relationships is null) + continue; + + serie.PurchaseDate = new DateTimeOffset(lb.DateAdded); + serie.Series = new AudibleApi.Common.Series[] + { + new AudibleApi.Common.Series{ Asin = serie.Asin, Title = serie.TitleWithSubtitle, Sequence = "-1"} + }; + + newParentsImportItems.Add(new ImportItem { DtoItem = serie, AccountId = lb.Account, LocaleName = lb.Book.Locale }); + } + + var newCoutn = new LibraryBookImporter(context) + .Import(newParentsImportItems); + + await context.SaveChangesAsync(); + + return newCoutn; + } + catch (Exception ex) + { + Serilog.Log.Logger.Error(ex, "An error occured while trying to scan for orphaned episode parents."); + return -1; + } + } + + public static int SaveContext(LibationContext context) { try { diff --git a/Source/DataLayer/QueryObjects/BookQueries.cs b/Source/DataLayer/QueryObjects/BookQueries.cs index efcbdc36..85f9153b 100644 --- a/Source/DataLayer/QueryObjects/BookQueries.cs +++ b/Source/DataLayer/QueryObjects/BookQueries.cs @@ -44,6 +44,8 @@ namespace DataLayer public static bool IsEpisodeParent(this Book book) => book.ContentType is ContentType.Parent; - + public static bool HasLiberated(this Book book) + => book.UserDefinedItem.BookStatus is LiberatedStatus.Liberated || + book.UserDefinedItem.PdfStatus is not null and LiberatedStatus.Liberated; } } diff --git a/Source/DataLayer/QueryObjects/LibraryBookQueries.cs b/Source/DataLayer/QueryObjects/LibraryBookQueries.cs index 9c60f3fb..b18506e3 100644 --- a/Source/DataLayer/QueryObjects/LibraryBookQueries.cs +++ b/Source/DataLayer/QueryObjects/LibraryBookQueries.cs @@ -43,18 +43,41 @@ namespace DataLayer .Include(le => le.Book).ThenInclude(b => b.ContributorsLink).ThenInclude(c => c.Contributor) .Include(le => le.Book).ThenInclude(b => b.Category).ThenInclude(c => c.ParentCategory); + public static IEnumerable FindOrphanedEpisodes(this IEnumerable libraryBooks) + { + var parentedEpisodes = + libraryBooks + .Where(lb => lb.Book.IsEpisodeParent()) + .SelectMany(s => libraryBooks.FindChildren(s)); + + return + libraryBooks + .Where(lb => lb.Book.IsEpisodeChild()) + .ExceptBy( + parentedEpisodes + .Select(ge => ge.Book.AudibleProductId), ge => ge.Book.AudibleProductId); + } + #nullable enable public static LibraryBook? FindSeriesParent(this IEnumerable libraryBooks, LibraryBook seriesEpisode) { if (seriesEpisode.Book.SeriesLink is null) return null; - //Parent books will always have exactly 1 SeriesBook due to how - //they are imported in ApiExtended.getChildEpisodesAsync() - return libraryBooks.FirstOrDefault( - lb => - lb.Book.IsEpisodeParent() && - seriesEpisode.Book.SeriesLink.Any( - s => s.Series.AudibleSeriesId == lb.Book.SeriesLink.Single().Series.AudibleSeriesId)); + try + { + //Parent books will always have exactly 1 SeriesBook due to how + //they are imported in ApiExtended.getChildEpisodesAsync() + return libraryBooks.FirstOrDefault( + lb => + lb.Book.IsEpisodeParent() && + seriesEpisode.Book.SeriesLink.Any( + s => s.Series.AudibleSeriesId == lb.Book.SeriesLink.Single().Series.AudibleSeriesId)); + } + catch (System.Exception ex) + { + Serilog.Log.Error(ex, "Query error in {0}", nameof(FindSeriesParent)); + return null; + } } #nullable disable diff --git a/Source/LibationWinForms/GridView/ProductsGrid.cs b/Source/LibationWinForms/GridView/ProductsGrid.cs index eea3dc67..eacf9a8e 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.cs @@ -114,11 +114,17 @@ namespace LibationWinForms.GridView internal void BindToGrid(List dbBooks) { - var geList = dbBooks.Where(lb => lb.Book.IsProduct()).Select(b => new LibraryBookEntry(b)).Cast().ToList(); + var geList = dbBooks + .Where(lb => lb.Book.IsProduct()) + .Select(b => new LibraryBookEntry(b)) + .Cast() + .ToList(); var episodes = dbBooks.Where(lb => lb.Book.IsEpisodeChild()); - - foreach (var parent in dbBooks.Where(lb => lb.Book.IsEpisodeParent())) + + var seriesBooks = dbBooks.Where(lb => lb.Book.IsEpisodeParent()).ToList(); + + foreach (var parent in seriesBooks) { var seriesEpisodes = episodes.FindChildren(parent); @@ -216,6 +222,7 @@ namespace LibationWinForms.GridView if (existingEpisodeEntry is null) { LibraryBookEntry episodeEntry; + var seriesEntry = seriesEntries.FindSeriesParent(episodeBook); if (seriesEntry is null) @@ -225,13 +232,14 @@ namespace LibationWinForms.GridView if (seriesBook is null) { - //This should be impossible because the importer ensures every episode has a parent. - var ex = new ApplicationException($"Episode's series parent not found in database."); - var seriesLinks = string.Join("\r\n", episodeBook.Book.SeriesLink?.Select(sb => $"{nameof(sb.Series.Name)}={sb.Series.Name}, {nameof(sb.Series.AudibleSeriesId)}={sb.Series.AudibleSeriesId}")); - Serilog.Log.Logger.Error(ex, "Episode={episodeBook}, Series: {seriesLinks}", episodeBook, seriesLinks); - throw ex; + //This is only possible if the user's db has some malformed + //entries from earlier Libation releases that could not be + //automatically fixed. Log, but don't throw. + Serilog.Log.Logger.Error("Episode={0}, Episode Series: {1}", episodeBook, episodeBook.Book.SeriesNames()); + return; } + seriesEntry = new SeriesEntry(seriesBook, episodeBook); seriesEntries.Add(seriesEntry); diff --git a/Source/LibationWinForms/GridView/QueryExtensions.cs b/Source/LibationWinForms/GridView/QueryExtensions.cs index d084aec7..1fb52bdf 100644 --- a/Source/LibationWinForms/GridView/QueryExtensions.cs +++ b/Source/LibationWinForms/GridView/QueryExtensions.cs @@ -24,12 +24,20 @@ namespace LibationWinForms.GridView { if (seriesEpisode.Book.SeriesLink is null) return null; - //Parent books will always have exactly 1 SeriesBook due to how - //they are imported in ApiExtended.getChildEpisodesAsync() - return gridEntries.SeriesEntries().FirstOrDefault( - lb => - seriesEpisode.Book.SeriesLink.Any( - s => s.Series.AudibleSeriesId == lb.LibraryBook.Book.SeriesLink.Single().Series.AudibleSeriesId)); + try + { + //Parent books will always have exactly 1 SeriesBook due to how + //they are imported in ApiExtended.getChildEpisodesAsync() + return gridEntries.SeriesEntries().FirstOrDefault( + lb => + seriesEpisode.Book.SeriesLink.Any( + s => s.Series.AudibleSeriesId == lb.LibraryBook.Book.SeriesLink.Single().Series.AudibleSeriesId)); + } + catch (Exception ex) + { + Serilog.Log.Error(ex, "Query error in {0}", nameof(FindSeriesParent)); + return null; + } } } #nullable disable From 5e145846bd48e48febe5b06c7c88064a35df2a6b Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sat, 11 Jun 2022 12:42:00 -0600 Subject: [PATCH 10/21] Only check non-liberated books when doing scan remove books. --- Source/LibationWinForms/GridView/ProductsDisplay.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index 4487a8bd..c4379c1d 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -119,7 +119,10 @@ namespace LibationWinForms.GridView return; var allBooks = productsGrid.GetAllBookEntries(); - var lib = allBooks.Select(lbe => lbe.LibraryBook); + var lib = allBooks + .Select(lbe => lbe.LibraryBook) + .Where(lb => !lb.Book.HasLiberated()); + var removedBooks = await LibraryCommands.FindInactiveBooks(Login.WinformLoginChoiceEager.ApiExtendedFunc, lib, accounts); var removable = allBooks.Where(lbe => removedBooks.Any(rb => rb.Book.AudibleProductId == lbe.AudibleProductId)).ToList(); From 26f0ff62df923f910537f64862ad5f3272f3ff49 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sat, 11 Jun 2022 15:10:18 -0600 Subject: [PATCH 11/21] Additional safety check --- .../DataLayer/QueryObjects/LibraryBookQueries.cs | 16 ++++++---------- Source/LibationWinForms/GridView/ProductsGrid.cs | 4 +++- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Source/DataLayer/QueryObjects/LibraryBookQueries.cs b/Source/DataLayer/QueryObjects/LibraryBookQueries.cs index b18506e3..2dbd0ddc 100644 --- a/Source/DataLayer/QueryObjects/LibraryBookQueries.cs +++ b/Source/DataLayer/QueryObjects/LibraryBookQueries.cs @@ -43,20 +43,16 @@ namespace DataLayer .Include(le => le.Book).ThenInclude(b => b.ContributorsLink).ThenInclude(c => c.Contributor) .Include(le => le.Book).ThenInclude(b => b.Category).ThenInclude(c => c.ParentCategory); - public static IEnumerable FindOrphanedEpisodes(this IEnumerable libraryBooks) - { - var parentedEpisodes = - libraryBooks - .Where(lb => lb.Book.IsEpisodeParent()) - .SelectMany(s => libraryBooks.FindChildren(s)); + public static IEnumerable ParentedEpisodes(this IEnumerable libraryBooks) + => libraryBooks.Where(lb => lb.Book.IsEpisodeParent()).SelectMany(s => libraryBooks.FindChildren(s)); - return - libraryBooks + public static IEnumerable FindOrphanedEpisodes(this IEnumerable libraryBooks) + => libraryBooks .Where(lb => lb.Book.IsEpisodeChild()) .ExceptBy( - parentedEpisodes + libraryBooks + .ParentedEpisodes() .Select(ge => ge.Book.AudibleProductId), ge => ge.Book.AudibleProductId); - } #nullable enable public static LibraryBook? FindSeriesParent(this IEnumerable libraryBooks, LibraryBook seriesEpisode) diff --git a/Source/LibationWinForms/GridView/ProductsGrid.cs b/Source/LibationWinForms/GridView/ProductsGrid.cs index eacf9a8e..578a83b8 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.cs @@ -156,6 +156,7 @@ namespace LibationWinForms.GridView var allEntries = bindingList.AllItems().BookEntries(); var seriesEntries = bindingList.AllItems().SeriesEntries().ToList(); + var parentedEpisodes = dbBooks.ParentedEpisodes(); foreach (var libraryBook in dbBooks.OrderBy(e => e.DateAdded)) { @@ -163,7 +164,8 @@ namespace LibationWinForms.GridView if (libraryBook.Book.IsProduct()) AddOrUpdateBook(libraryBook, existingEntry); - else if(libraryBook.Book.IsEpisodeChild()) + else if(parentedEpisodes.Any(lb => lb == libraryBook)) + //Only try to add or update is this LibraryBook is a know child of a parent AddOrUpdateEpisode(libraryBook, existingEntry, seriesEntries, dbBooks); } From 2d3eb29bd5c2d869191ceaf60b6b9870063a0eb8 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sat, 11 Jun 2022 19:10:08 -0600 Subject: [PATCH 12/21] Move event invoke out of lock --- Source/ApplicationServices/LibraryCommands.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index cd6165b5..cf56f163 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -35,8 +35,8 @@ namespace ApplicationServices { if (Scanning) return new(); - ScanBegin?.Invoke(null, accounts.Length); } + ScanBegin?.Invoke(null, accounts.Length); //These are the minimum response groups required for the //library scanner to pass all validation and filtering. @@ -108,8 +108,8 @@ namespace ApplicationServices { if (Scanning) return (0, 0); - ScanBegin?.Invoke(null, accounts.Length); } + ScanBegin?.Invoke(null, accounts.Length); logTime($"pre {nameof(scanAccountsAsync)} all"); var libraryOptions = new LibraryOptions From fe35be66829d7db835f496ad204af0fb52791e0c Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 13:39:35 -0600 Subject: [PATCH 13/21] New libation icons --- .../LiberateDataGridViewImageButtonColumn.cs | 13 +++++++------ .../Properties/Resources.Designer.cs | 10 ++++++++++ .../Properties/Resources.resx | 3 +++ Source/LibationWinForms/Resources/error.png | Bin 0 -> 1578 bytes .../Resources/liberate_green.png | Bin 1565 -> 1217 bytes .../Resources/liberate_green_pdf_no.png | Bin 2880 -> 3816 bytes .../Resources/liberate_green_pdf_yes.png | Bin 2374 -> 3350 bytes .../Resources/liberate_red.png | Bin 1609 -> 1218 bytes .../Resources/liberate_red_pdf_no.png | Bin 2882 -> 3775 bytes .../Resources/liberate_red_pdf_yes.png | Bin 2336 -> 3340 bytes .../Resources/liberate_yellow.png | Bin 1672 -> 1239 bytes .../Resources/liberate_yellow_pdf_no.png | Bin 3025 -> 3810 bytes .../Resources/liberate_yellow_pdf_yes.png | Bin 2406 -> 3398 bytes Source/LibationWinForms/Resources/minus.png | Bin 425 -> 5680 bytes Source/LibationWinForms/Resources/plus.png | Bin 689 -> 6190 bytes 15 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 Source/LibationWinForms/Resources/error.png diff --git a/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs b/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs index 1984587d..6e696cb8 100644 --- a/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs +++ b/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs @@ -19,18 +19,19 @@ namespace LibationWinForms.GridView private static readonly Color SERIES_BG_COLOR = Color.FromArgb(230, 255, 230); protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { - base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, null, null, null, cellStyle, advancedBorderStyle, paintParts); - if (value is LiberateButtonStatus status) { + if (status.BookStatus is LiberatedStatus.Error) + paintParts ^= DataGridViewPaintParts.ContentBackground | DataGridViewPaintParts.ContentForeground | DataGridViewPaintParts.SelectionBackground; + if (rowIndex >= 0 && DataGridView.GetBoundItem(rowIndex) is LibraryBookEntry lbEntry && lbEntry.Parent is not null) - { DataGridView.Rows[rowIndex].DefaultCellStyle.BackColor = SERIES_BG_COLOR; - } + + base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, null, null, null, cellStyle, advancedBorderStyle, paintParts); if (status.IsSeries) { - DrawButtonImage(graphics, status.Expanded ? Properties.Resources.minus: Properties.Resources.plus, cellBounds); + DrawButtonImage(graphics, status.Expanded ? Properties.Resources.minus : Properties.Resources.plus, cellBounds); ToolTipText = status.Expanded ? "Click to Collpase" : "Click to Expand"; } @@ -48,7 +49,7 @@ namespace LibationWinForms.GridView private static (string mouseoverText, Bitmap buttonImage) GetLiberateDisplay(LiberatedStatus liberatedStatus, LiberatedStatus? pdfStatus) { if (liberatedStatus == LiberatedStatus.Error) - return ("Book downloaded ERROR", SystemIcons.Error.ToBitmap()); + return ("Book downloaded ERROR", Properties.Resources.error); (string libState, string image_lib) = liberatedStatus switch { diff --git a/Source/LibationWinForms/Properties/Resources.Designer.cs b/Source/LibationWinForms/Properties/Resources.Designer.cs index f3e881e2..280a5d69 100644 --- a/Source/LibationWinForms/Properties/Resources.Designer.cs +++ b/Source/LibationWinForms/Properties/Resources.Designer.cs @@ -130,6 +130,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap error { + get { + object obj = ResourceManager.GetObject("error", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Source/LibationWinForms/Properties/Resources.resx b/Source/LibationWinForms/Properties/Resources.resx index 95b3b8a0..a78be5b3 100644 --- a/Source/LibationWinForms/Properties/Resources.resx +++ b/Source/LibationWinForms/Properties/Resources.resx @@ -139,6 +139,9 @@ ..\Resources\edit-tags-50x50.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\import_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Source/LibationWinForms/Resources/error.png b/Source/LibationWinForms/Resources/error.png new file mode 100644 index 0000000000000000000000000000000000000000..700ce41ee911f05d1968ea0c3ffdda1d245b688f GIT binary patch literal 1578 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 literal 2880 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 sS5+Yec?IEx`Gw)tmDLSqUWh($ diff --git a/Source/LibationWinForms/Resources/liberate_red.png b/Source/LibationWinForms/Resources/liberate_red.png index 8e74022cf5f82def60afda7d04d1a8a0095d930b..d90bfc4d7e21bd60b6061e2b1bec86b39d7b584c 100644 GIT binary patch literal 1218 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 Hu0mjf(rpmX diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_no.png b/Source/LibationWinForms/Resources/liberate_red_pdf_no.png index 26d019d9e86dabccc8900b443b3348d966df546d..a6b711fdb924cd713fdc8841ab8335825bdbc82b 100644 GIT binary patch literal 3775 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 literal 2336 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 BG;;s| literal 1672 zcmV;326y?1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi^8f%2^8p-FnK}Rf1|3O6K~z{r-I;$# zR#zCuA5G0jhf*uium~~@8oFXkHdgG9Wf?`yek?ZDHqo#}gZ)v@7>wG)6_wc<#j1rdC(ddkElo|$v+r~6xv%f_J@0+*EqfV#-~;!b_rCXiJont^ zJm*L*c@^G(V^BDB5Pk*2;8P(4{sDDA?!+x{(s>tt3m-w*pSO+8Fq)`fWKju~* z0#Ps^{CJ$efqiTojuRdpPMMjRw0!w;ijR+{!NEbgeEBjRKYpCr+uPMu7C5-)V81-G z!3^wq7;PMC`2=PghX#p>iBwuzO7rK>S1sd=j*e1QRh4uC9M}tRK%VLO3yzwB@f|)e z4g(Vt6GMj&AEvmtIMt$O|Ni}S=+Gf`=9oFKE7Ul4$F^j@5suus8KYw0c?~s4t8hD>i%)o}>JMevYiyQpW-Q7*m(b3e<&_ItKalX~l z+S)4rfX>cN)#4Y!Y@|HkmGpii&7xXh?lB z&ZSG2Xy3klGQXWVbxO7Rz>lmNz69TdmcPI*!SZJ*FcWePOM;S=loYC{sGx#^0=jnX z8m(HjissFmM-Lu6ptEPs(#4AxWsd9V>7m`bcdKuC_!>6ClQ3YS4TR5>gttw!w6qBP zut-i$7I*_iY;3GRkfN@xPE=M_im0e4%XeUKrlh2#B+ALjq4e~03JVLP(9lro>guA} z+FCk#^r-I5<=`AmNlvky#F5(s=1SRPy3f6I++$7&dUfGC^9PG(H?S#Fh|-E1Rk~a9yTUG4~_#12_bRe zf<6$PSQ2ROW1|er_2B1%ln1+0R<2YBE-?e+!rZq^(11FT?%qX3$0c0=ZeYzmhbwsJ zd=I<%zznPzz5xRkPxmk^r%uJnm6xtIU?oQ;NmCr*%< zHOu(%B}+&wSU>`mkJ!AKL~k#Nb?Yp_u-rpjLQfh#nV*9>cFYLi;6W0*c9B5Rm8sg#!1!h&6q$nZ`7Hh+wNn0w8ima&+fooyQw6N18R=gyrpW5x{C;z4(RZ)In>9{jxG zUcGv?I?AWVp4qqv{tVh}b;~qhZrs^%{rYve$;X>44rqn1 zK+l`vJ;r!f@l(i~reDB+pby+zoU6De%FD~OkF=wsg9-}^<;GoeGZ)8N_=`Wmb?{~Q zEA(KOU?bq`kT>qQIr>3S-Sy>tF*s(*Vg|#Rzyf^Nenwls-KcA*enfPl8W%k(HGt&>Ldw)~%?`Vq_a;0+E)MCaS8cL`_YNr`^lo)ME&O^78Uz_UA{; zJv1^hBLA0k;J^Xh{wxOfzkEb9>|B;`-2Q+$-AapyM8MN{|ahqW=JKDMZ) diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png index 1e917dea8659737f1bfd75f0b14d1e8c8bd421c6..b39b3f9570a7d59086e8a980a159cf827badaf5e 100644 GIT binary patch literal 3810 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 Y07y`G3)1;XD*ylh07*qoM6N<$g4n<&KL7v# literal 3025 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 TS|m9200000NkvXXu0mjf-ae*} diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png index bc19f2983d51a8a8db3992f6910d37caf3c414da..e8e7ef6b532e656dc6df849962cfcec57c7f079d 100644 GIT binary patch literal 3398 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 literal 2406 zcmV-s37PhZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi^8f%2^8p-FnK}Rf2>VGyK~!i%-I{r9 z71tHU4~xMCQMW`_#R3yN} zASf-MRD}>yz(MRw*o2|brcrItvZIR4#t;_6?f2ce^YD9b-n{WM-uOwM-ks}NJa^7L z_nb2$RU{26f?h$&qh3Nsp+u;`a}aX6NiX^%)LY9oh76IEloWaS@}-oNl*rz_d*#fTGiI+K#zB9v znstvo0C7-^)pX<+&^)VY5gQvTxw*O0y?b}lBxQP zq1CK;>;cG!erYws6BQLD1qB7twQE1N9_3!x=ev*u}ReyhaTv17yD zJn7%RzYHEc*lg8LA{u~^BS)H6c&f5*U0@HuHS-&m=;&xkPEM95Po9{b&~Ts5ojaQ? z&s;UXwSqkWdC+F7=}yz8O{H<;#&Y)TS<@35?n8g!5iXIr(4X~IEnyEp1@v<$8@j=c zP?VRK%e{N|ImgP=S*J^ zhYuf?-o1Ov%$YOg;ltn+>-O#2+WTi_X6ofI1k5LxBV=H1mCs zC-bNe1ck!gx^+{B4job}R;*AN85ycYix#R?t5&K{pFS!-KVR+Hvq!aW-`?*Sqqip% zZr!@Ibgp z8UP!v3~_OB^6J$q?fm%bLc{}rpz06B#l^o)N=kCQfDOa&^XJbiz-fHI>Wz$gkq!3j z+4E0JmMq~7dE)BTtM)Z%ir?os0*NRRY$z~WHGCWT88uA}7MPZg??Hcsn(Hl4tpOM~P^72`E*3r(;ehPkEpp`wq8o%a z@4jnxszVsEJ1_|Pz14iZ3eYpV)#`o#{m^P!e2CDfpaAPq6Vnj@>mZ{?BfJZa?+T$} ztLX^M^b4!$51rtM5hJqa&!2C4+@S@WK7CrAKYwm|M0W1nS+sif>N{xu*y^!hLB#f$ zVfD^CqMkj|=XVvt0F{{Nd=3{afE=mnD&WNC&6~L#`YKYk1yrdb^vNeIikOWstXwI` z8O(+^LREyiw`3At6EF1m)4A zM_75jmMK%FU^-$xf>EPJVL9%k>lDmO)~s102M!#NX3d)E1=(P*$=lkxRa9=SDExnp=cpu><9-9VB{;MIm6@4|b1OAr z!UTQnjvYJTjGtjzHc_wwg&X#rmsu*w&dyfj#*NeM(W6KE{%*t-$q`P4pF&vKr5y4* z@PiLT-MAqtIhhv{RbKx3#xXqOtGKZJR=v%>4>O1w!9I+aSIZjE7c3K4^8vkBfZv znaIZdUf+QjdmwxgdgLlGW5x`fZeO}|N$`ZN z&H!4rY^i@M7h{;EvSt5%7^`PHYNikdf1)WU_LaP#W%W6KHG@&K9O@W9*VLHNT)2ye?*MJ>6iln6AjF?qyfAkSY z-0b{@d4Y>lfpqE8MSFf)2A$$6JfV{(Pny3v6C#ieq7O90YWl+^@dVZo<^r4&h&6zXTWB6}i+EFaD23DJsl9J@Xg9ixBo9J@hcgut~TR7E1G2*I<++UV%$e(~|~ac$Z#vyF^v*RGY`ym^zhc^;xa@;Ygf678a^~ z_m19ZgeAbznH*#K-sro+t33&#-)Ph-U7ojUnMhIzOr_<=-+4jlwp znCS@(_hEEaMQEP2hCKiXTy;StEPM?{AHZTnIEspj1asDGd4jL!kwVoT_5kn;P&x&c zTbcfbq^YNefv~QOpNb1qklnka!hb4 zKY)5oP%gkc8BmZqsVL8H9)npL4F@RdGchzVCavh z_$rD{j}_UqYuC!1JC5;6bv}@&GhDMl-1H0N+(x$0000007*qoM6N<$f(yluD*ylh diff --git a/Source/LibationWinForms/Resources/minus.png b/Source/LibationWinForms/Resources/minus.png index bfc2cf4abc65ecbd5ac663ccf26584d356818814..c0c5d15c1fe4233753ed8f81a19678d96c363888 100644 GIT binary patch literal 5680 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 V`-%T+%7CHB;OXk;vd$@?2>{A4h5!Hn diff --git a/Source/LibationWinForms/Resources/plus.png b/Source/LibationWinForms/Resources/plus.png index 1cae3d6b3a8fc9572ad790c92f3fd5214ad58b0e..1cd1c63041da85a6f0d6faed60b81a13976ef815 100644 GIT binary patch literal 6190 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 delta 635 zcmV->0)+jpFtG(8iBL{Q4GJ0x0000DNk~Le0000$0000$2nGNE0IF$m-jN|ge*!m2 zL_t(|+U%OKP69y?hQ9?4ZHz_}=}e@v(LxK~!H4k;EPMkW#&@ug!phRb4iZd=je=n; z9LPxyxIK?W_GS_ST!!r4x3jY|Kj%b*DqD?;n*lHY2EYIqfGS&K9fLaO?tm811cpFY zM6TB|mym^!bM6+n0FHrOU4SoOe*nAyk0Npta|E0Nr@+3hz5@i<19tRtoH;iUTmLu%5WGvs8^V9=e!EwChwPjiPFctPeg^E84FNx0k z&>2@B?t7XY@P(@4z!~IlZ{zQh24kz-00YqOV~s3jlnnAEExV4S5WXa_s4``o+}_ z>uO4VcZmx?YQC$@)vU>c9k~2`h zU>5pW;VgO0TgKWLJs`to<+a&|r8|M=6E*@;kx Date: Sun, 12 Jun 2022 15:17:07 -0600 Subject: [PATCH 14/21] Revised stoplight icons --- .../Resources/Stoplight1 with pdf.psd | Bin 0 -> 196923 bytes .../LibationWinForms/Resources/Stoplight1.psd | Bin 0 -> 95186 bytes .../Resources/liberate_green.png | Bin 1217 -> 1360 bytes .../Resources/liberate_green_pdf_no.png | Bin 3816 -> 3673 bytes .../Resources/liberate_green_pdf_yes.png | Bin 3350 -> 3342 bytes .../Resources/liberate_red.png | Bin 1218 -> 1400 bytes .../Resources/liberate_red_pdf_no.png | Bin 3775 -> 3652 bytes .../Resources/liberate_red_pdf_yes.png | Bin 3340 -> 3365 bytes .../Resources/liberate_yellow.png | Bin 1239 -> 1400 bytes .../Resources/liberate_yellow_pdf_no.png | Bin 3810 -> 3703 bytes .../Resources/liberate_yellow_pdf_yes.png | Bin 3398 -> 3398 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source/LibationWinForms/Resources/Stoplight1 with pdf.psd create mode 100644 Source/LibationWinForms/Resources/Stoplight1.psd diff --git a/Source/LibationWinForms/Resources/Stoplight1 with pdf.psd b/Source/LibationWinForms/Resources/Stoplight1 with pdf.psd new file mode 100644 index 0000000000000000000000000000000000000000..d96ef9efde1ace366f744fc0a8adf942e82a7a77 GIT binary patch literal 196923 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 A`~Uy| literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/Stoplight1.psd b/Source/LibationWinForms/Resources/Stoplight1.psd new file mode 100644 index 0000000000000000000000000000000000000000..9b5f8105c6439377e919bd99f32001d8433cec89 GIT binary patch literal 95186 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 delta 1131 zcmV-x1eE*G3c(4GWq(IWL_t(|+Ps;2XdFcx$3L6BhwbI=wCTm>5^YcMLE#Lk^&nOy zAV^b-4-h1xRy3lB?LUgBs1^K6(L^owA1fub1bh}+!8FqPA{46>kJ7}@t1&)^a7}Z) zG>_)?cKst$2_ZK-JDcPS`_Jy|d}d~U`+Lk7EGz@q1l$Q+4S$$`gSs3b4}1q40cKQQ zx(;{;7!@7(xh??vfs7mUUeVZDg6nx1)LG)|_4&{nf%D4%cEkk#SI06z9pL-9*82r; zrGnx81MCH|z?isqIj{kELa~oB&;;9@nJ)6W5013U@5uw(>1QUe1O~hSoNbo zqXu*%@U$OrHSm#e2&%e5`0St`Fu={gVIZl{b}evFC4bdXb%(bJhp+>vTi|(vc-AM{ zx+>t&O5X$C0Db|6#Qk+*hEXp@5YRB37|;UTA{>5HBovwC9pO z1b*-XK7Xj`r)}VUU9b&&>mx{<6fxN|I1l{g13U&y>wwF$3_`I+c67isiX}-UMS*ao z!e0gst2+D&x>l0YbZ}%rKE(Q=2dtsiE3Y`oj zWK^v_7f_j;G?<;J}Iikz_;+=j9`Dug`ohMv9 zm$VSe?#`0komGYwas_%H?{zgyQxw>D$QliQGmJH5k!(&<6|B5SLthWkv#p218CRqH z(h!;Cr(%aks>DqR(od#IG$x3xjbVmNCi9b=8#qVqK#sxB2Bp8y9Bo46zTJ2{)MN-o zf=)Odb_~<-dKi+On>yXf@}0u$m_Pj&mI3;4rM2I=gwXv+HdSHv1og*71P%fZ&oAIA x1b?ExA_hJ8vtT?9CS~GZR-F4002ovPDHLkV1j8_9mW6v diff --git a/Source/LibationWinForms/Resources/liberate_green_pdf_no.png b/Source/LibationWinForms/Resources/liberate_green_pdf_no.png index a5e54e3e9ee32273d4669b3fd3aa5872b527227e..b327f6622c90b32b94268799494f456af79322f5 100644 GIT binary patch delta 3608 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 SQ%xlR0000rc4t9HKxckJjX_m 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 P00000NkvXXu0mjfF|le= diff --git a/Source/LibationWinForms/Resources/liberate_red.png b/Source/LibationWinForms/Resources/liberate_red.png index d90bfc4d7e21bd60b6061e2b1bec86b39d7b584c..8e4b34e4cf0307aa08730511bf9d70aaca76035d 100644 GIT binary patch delta 1316 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 IM6N<$f)aiNtN;K2 delta 3710 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 diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_red_pdf_yes.png index c7188a4f225fda4d9a374f3b4d1e5d7af9c6fc65..c38f104d754b798f2887f75a67b0c9821b6858a2 100644 GIT binary patch delta 3296 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 e4uBgi|2F`OO<1(K)Hihi00007jh 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 M07*qoM6N<$g4%Q+qW}N^ diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png index e8e7ef6b532e656dc6df849962cfcec57c7f079d..b6e895bc6fddc3d61c1fd72c9a5e65763e7aaaf4 100644 GIT binary patch delta 3322 zcmVwMeXxK!~l8gd`*(Fc=EPq1cd)O$g&C zZ4y#kW57(^P8zo%GtJbHx^|O^O(De@(g{f%oZ3mt_(z5@EvN>9oCGk`NVLX40{Vqz z2}!Je?ymO7`_Vu2R

v+8>gg<;>iX=Iwj;zJK$5=bU@a_uearF9Nt1 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 Date: Sun, 12 Jun 2022 15:27:10 -0600 Subject: [PATCH 16/21] Don't fire click for error books --- Source/LibationWinForms/GridView/ProductsDisplay.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index c4379c1d..945ab8d7 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -187,7 +187,8 @@ namespace LibationWinForms.GridView private void productsGrid_LiberateClicked(LibraryBookEntry liveGridEntry) { - LiberateClicked?.Invoke(this, liveGridEntry.LibraryBook); + if (liveGridEntry.LibraryBook.Book.UserDefinedItem.BookStatus is not LiberatedStatus.Error) + LiberateClicked?.Invoke(this, liveGridEntry.LibraryBook); } private void productsGrid_RemovableCountChanged(object sender, EventArgs e) From 2341f6ea3b694e61c9a1a48db6e30a3e369de580 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 16:29:06 -0600 Subject: [PATCH 17/21] Better display and hiding of process queue --- Source/LibationWinForms/Form1.Designer.cs | 1 + Source/LibationWinForms/Form1.ProcessQueue.cs | 2 ++ Source/LibationWinForms/Form1.cs | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/LibationWinForms/Form1.Designer.cs b/Source/LibationWinForms/Form1.Designer.cs index bcd89f8b..073e2b8f 100644 --- a/Source/LibationWinForms/Form1.Designer.cs +++ b/Source/LibationWinForms/Form1.Designer.cs @@ -451,6 +451,7 @@ // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(0, 0); this.splitContainer1.Name = "splitContainer1"; // diff --git a/Source/LibationWinForms/Form1.ProcessQueue.cs b/Source/LibationWinForms/Form1.ProcessQueue.cs index 8a8178f2..806d43c0 100644 --- a/Source/LibationWinForms/Form1.ProcessQueue.cs +++ b/Source/LibationWinForms/Form1.ProcessQueue.cs @@ -17,7 +17,9 @@ namespace LibationWinForms processBookQueue1.popoutBtn.Click += ProcessBookQueue1_PopOut; var coppalseState = Configuration.Instance.GetNonString(nameof(splitContainer1.Panel2Collapsed)); WidthChange = splitContainer1.Panel2.Width + splitContainer1.SplitterWidth; + int width = this.Width; SetQueueCollapseState(coppalseState); + this.Width = width; } private void ProductsDisplay_LiberateClicked(object sender, LibraryBook e) diff --git a/Source/LibationWinForms/Form1.cs b/Source/LibationWinForms/Form1.cs index 068e7cac..ae4628a4 100644 --- a/Source/LibationWinForms/Form1.cs +++ b/Source/LibationWinForms/Form1.cs @@ -20,7 +20,7 @@ namespace LibationWinForms // Before calling anything else, including subscribing to events, ensure database exists. If we wait and let it happen lazily, race conditions and errors are likely during new installs using var _ = DbContexts.GetContext(); - this.Load += (_, _) => this.RestoreSizeAndLocation(Configuration.Instance); + this.RestoreSizeAndLocation(Configuration.Instance); this.FormClosing += (_, _) => this.SaveSizeAndLocation(Configuration.Instance); // this looks like a perfect opportunity to refactor per below. From fa195483d6bd604b53db567708b3a527ba1e2b2f Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 16:29:33 -0600 Subject: [PATCH 18/21] Set Import/Esport initial directory --- Source/AppScaffolding/LibationScaffolding.cs | 4 ++-- Source/LibationWinForms/Dialogs/AccountsDialog.cs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 91f0f963..bf7974b5 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -429,7 +429,7 @@ namespace AppScaffolding string updateContentType = "UPDATE books " + "SET contenttype = 4 " + - "WHERE audibleproductid IN(SELECT books.audibleproductid " + + "WHERE audibleproductid IN (SELECT books.audibleproductid " + "FROM books " + "INNER JOIN series " + "ON ( books.audibleproductid = " + @@ -445,7 +445,7 @@ namespace AppScaffolding "'- 1' " + "FROM books " + "LEFT OUTER JOIN seriesbook " + - "ON books.bookid = seriesbook.bookid " + + "ON books.bookid = seriesbook.bookid " + "INNER JOIN series " + "ON books.audibleproductid = series.audibleseriesid " + "WHERE books.contenttype = 4 " + diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.cs index f9361f22..0f04bb7c 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.cs @@ -210,6 +210,9 @@ namespace LibationWinForms.Dialogs }) .ToList(); + private string GetAudibleCliAppDataPath() + => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Audible"); + private void Export(string accountId, string locale) { // without transaction, accounts persister will write ANY EDIT immediately to file @@ -229,6 +232,11 @@ namespace LibationWinForms.Dialogs SaveFileDialog sfd = new(); sfd.Filter = "JSON File|*.json"; + string audibleAppDataDir = GetAudibleCliAppDataPath(); + + if (Directory.Exists(audibleAppDataDir)) + sfd.InitialDirectory = audibleAppDataDir; + if (sfd.ShowDialog() != DialogResult.OK) return; try @@ -249,10 +257,17 @@ namespace LibationWinForms.Dialogs ex); } } + private async void importBtn_Click(object sender, EventArgs e) { OpenFileDialog ofd = new(); ofd.Filter = "JSON File|*.json"; + ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + + string audibleAppDataDir = GetAudibleCliAppDataPath(); + + if (Directory.Exists(audibleAppDataDir)) + ofd.InitialDirectory = audibleAppDataDir; if (ofd.ShowDialog() != DialogResult.OK) return; From b7b49a60cf75c66585c8a16fd7cf8efc1909fa6d Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 16:35:48 -0600 Subject: [PATCH 19/21] Migration Exception handling --- Source/AppScaffolding/LibationScaffolding.cs | 103 +++++++++++-------- 1 file changed, 58 insertions(+), 45 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index bf7974b5..c5d64f0e 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -405,58 +405,71 @@ namespace AppScaffolding public static void migrate_from_7_10_1(Configuration config) { - //https://github.com/rmcrackan/Libation/issues/270#issuecomment-1152863629 - //This migration helps fix databases contaminated with the 7.10.1 hack workaround - //and those with improperly identified or missing series. This does not solve cases - //where individual episodes are in the db with a valid series link, but said series' - //parents have not been imported into the database. For those cases, Libation will - //attempt fixup by retrieving parents from the catalog endpoint + var lastNigrationThres = config.GetNonString($"{nameof(migrate_from_7_10_1)}_ThrewError"); - using var context = DbContexts.GetContext(); + if (lastNigrationThres) return; - //This migration removes books and series with SERIES_ prefix that were created - //as a hack workaround in 7.10.1. Said workaround was removed in 7.10.2 - string removeHackSeries = "delete " + - "from series " + - "where AudibleSeriesId like 'SERIES%'"; + try + { - string removeHackBooks = "delete " + - "from books " + - "where AudibleProductId like 'SERIES%'"; + //https://github.com/rmcrackan/Libation/issues/270#issuecomment-1152863629 + //This migration helps fix databases contaminated with the 7.10.1 hack workaround + //and those with improperly identified or missing series. This does not solve cases + //where individual episodes are in the db with a valid series link, but said series' + //parents have not been imported into the database. For those cases, Libation will + //attempt fixup by retrieving parents from the catalog endpoint - //Detect series parents that were added to the database as books with ContentType.Episode, - //and change them to ContentType.Parent - string updateContentType = - "UPDATE books " + - "SET contenttype = 4 " + - "WHERE audibleproductid IN (SELECT books.audibleproductid " + - "FROM books " + - "INNER JOIN series " + - "ON ( books.audibleproductid = " + - "series.audibleseriesid) " + - "WHERE books.contenttype = 2)"; + using var context = DbContexts.GetContext(); - //Then detect series parents that were added to the database as books with ContentType.Parent - //but are missing a series link, and add the link (don't know how this happened) - string addMissingSeriesLink = - "INSERT INTO seriesbook " + - "SELECT series.seriesid, " + - "books.bookid, " + - "'- 1' " + - "FROM books " + - "LEFT OUTER JOIN seriesbook " + - "ON books.bookid = seriesbook.bookid " + - "INNER JOIN series " + - "ON books.audibleproductid = series.audibleseriesid " + - "WHERE books.contenttype = 4 " + - "AND seriesbook.seriesid IS NULL"; + //This migration removes books and series with SERIES_ prefix that were created + //as a hack workaround in 7.10.1. Said workaround was removed in 7.10.2 + string removeHackSeries = "delete " + + "from series " + + "where AudibleSeriesId like 'SERIES%'"; - context.Database.ExecuteSqlRaw(removeHackSeries); - context.Database.ExecuteSqlRaw(removeHackBooks); - context.Database.ExecuteSqlRaw(updateContentType); - context.Database.ExecuteSqlRaw(addMissingSeriesLink); + string removeHackBooks = "delete " + + "from books " + + "where AudibleProductId like 'SERIES%'"; - LibraryCommands.SaveContext(context); + //Detect series parents that were added to the database as books with ContentType.Episode, + //and change them to ContentType.Parent + string updateContentType = + "UPDATE books " + + "SET contenttype = 4 " + + "WHERE audibleproductid IN (SELECT books.audibleproductid " + + "FROM books " + + "INNER JOIN series " + + "ON ( books.audibleproductid = " + + "series.audibleseriesid) " + + "WHERE books.contenttype = 2)"; + + //Then detect series parents that were added to the database as books with ContentType.Parent + //but are missing a series link, and add the link (don't know how this happened) + string addMissingSeriesLink = + "INSERT INTO seriesbook " + + "SELECT series.seriesid, " + + "books.bookid, " + + "'- 1' " + + "FROM books " + + "LEFT OUTER JOIN seriesbook " + + "ON books.bookid = seriesbook.bookid " + + "INNER JOIN series " + + "ON books.audibleproductid = series.audibleseriesid " + + "WHERE books.contenttype = 4 " + + "AND seriesbook.seriesid IS NULL"; + + context.Database.ExecuteSqlRaw(removeHackSeries); + context.Database.ExecuteSqlRaw(removeHackBooks); + context.Database.ExecuteSqlRaw(updateContentType); + context.Database.ExecuteSqlRaw(addMissingSeriesLink); + + LibraryCommands.SaveContext(context); + } + catch (Exception ex) + { + Serilog.Log.Logger.Error(ex, "An error occured while running database migrations in {0}", nameof(migrate_from_7_10_1)); + config.SetObject($"{nameof(migrate_from_7_10_1)}_ThrewError", true); + } } } } From 58c52196f1d46bd7af87cd697cfab7f08e38ab5c Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 17:03:29 -0600 Subject: [PATCH 20/21] Remove Books button now on Main button row --- Source/LibationWinForms/Form1.Designer.cs | 67 ++++++++++++------- Source/LibationWinForms/Form1.RemoveBooks.cs | 54 ++++++--------- Source/LibationWinForms/Form1.resx | 42 ++++++++++++ .../GridView/ProductsDisplay.cs | 2 +- 4 files changed, 108 insertions(+), 57 deletions(-) diff --git a/Source/LibationWinForms/Form1.Designer.cs b/Source/LibationWinForms/Form1.Designer.cs index 073e2b8f..4cc1c171 100644 --- a/Source/LibationWinForms/Form1.Designer.cs +++ b/Source/LibationWinForms/Form1.Designer.cs @@ -42,7 +42,6 @@ this.removeLibraryBooksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeAllAccountsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeSomeAccountsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.closeRemoveBooksColumnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.liberateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.beginBookBackupsToolStripMenuItem = new LibationWinForms.FormattableToolStripMenuItem(); this.beginPdfBackupsToolStripMenuItem = new LibationWinForms.FormattableToolStripMenuItem(); @@ -75,6 +74,8 @@ this.panel1 = new System.Windows.Forms.Panel(); this.productsDisplay = new LibationWinForms.GridView.ProductsDisplay(); this.toggleQueueHideBtn = new System.Windows.Forms.Button(); + this.doneRemovingBtn = new System.Windows.Forms.Button(); + this.removeBooksBtn = new System.Windows.Forms.Button(); this.processBookQueue1 = new LibationWinForms.ProcessQueue.ProcessQueueControl(); this.menuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); @@ -99,7 +100,7 @@ // filterBtn // this.filterBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.filterBtn.Location = new System.Drawing.Point(916, 3); + this.filterBtn.Location = new System.Drawing.Point(892, 3); this.filterBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.filterBtn.Name = "filterBtn"; this.filterBtn.Size = new System.Drawing.Size(88, 27); @@ -112,10 +113,11 @@ // this.filterSearchTb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.filterSearchTb.Location = new System.Drawing.Point(196, 7); + this.filterSearchTb.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.filterSearchTb.Location = new System.Drawing.Point(195, 5); this.filterSearchTb.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.filterSearchTb.Name = "filterSearchTb"; - this.filterSearchTb.Size = new System.Drawing.Size(712, 23); + this.filterSearchTb.Size = new System.Drawing.Size(689, 25); this.filterSearchTb.TabIndex = 1; this.filterSearchTb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.filterSearchTb_KeyPress); // @@ -133,7 +135,7 @@ this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(1061, 24); + this.menuStrip1.Size = new System.Drawing.Size(1037, 24); this.menuStrip1.TabIndex = 0; this.menuStrip1.Text = "menuStrip1"; // @@ -145,8 +147,7 @@ this.scanLibraryToolStripMenuItem, this.scanLibraryOfAllAccountsToolStripMenuItem, this.scanLibraryOfSomeAccountsToolStripMenuItem, - this.removeLibraryBooksToolStripMenuItem, - this.closeRemoveBooksColumnToolStripMenuItem}); + this.removeLibraryBooksToolStripMenuItem}); this.importToolStripMenuItem.Name = "importToolStripMenuItem"; this.importToolStripMenuItem.Size = new System.Drawing.Size(55, 20); this.importToolStripMenuItem.Text = "&Import"; @@ -211,14 +212,6 @@ this.removeSomeAccountsToolStripMenuItem.Text = "Some Accounts"; this.removeSomeAccountsToolStripMenuItem.Click += new System.EventHandler(this.removeSomeAccountsToolStripMenuItem_Click); // - // closeRemoveBooksColumnToolStripMenuItem - // - this.closeRemoveBooksColumnToolStripMenuItem.Name = "closeRemoveBooksColumnToolStripMenuItem"; - this.closeRemoveBooksColumnToolStripMenuItem.Size = new System.Drawing.Size(247, 22); - this.closeRemoveBooksColumnToolStripMenuItem.Text = "&Done Removing Books"; - this.closeRemoveBooksColumnToolStripMenuItem.Visible = false; - this.closeRemoveBooksColumnToolStripMenuItem.Click += new System.EventHandler(this.closeRemoveBooksColumnToolStripMenuItem_Click); - // // liberateToolStripMenuItem // this.liberateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -407,7 +400,7 @@ this.statusStrip1.Name = "statusStrip1"; this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); this.statusStrip1.ShowItemToolTips = true; - this.statusStrip1.Size = new System.Drawing.Size(1061, 22); + this.statusStrip1.Size = new System.Drawing.Size(1037, 22); this.statusStrip1.TabIndex = 6; this.statusStrip1.Text = "statusStrip1"; // @@ -421,7 +414,7 @@ // springLbl // this.springLbl.Name = "springLbl"; - this.springLbl.Size = new System.Drawing.Size(547, 17); + this.springLbl.Size = new System.Drawing.Size(523, 17); this.springLbl.Spring = true; // // backupsCountsLbl @@ -465,7 +458,7 @@ // this.splitContainer1.Panel2.Controls.Add(this.processBookQueue1); this.splitContainer1.Size = new System.Drawing.Size(1463, 640); - this.splitContainer1.SplitterDistance = 1061; + this.splitContainer1.SplitterDistance = 1037; this.splitContainer1.SplitterWidth = 8; this.splitContainer1.TabIndex = 7; // @@ -474,6 +467,8 @@ this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.panel1.Controls.Add(this.productsDisplay); this.panel1.Controls.Add(this.toggleQueueHideBtn); + this.panel1.Controls.Add(this.doneRemovingBtn); + this.panel1.Controls.Add(this.removeBooksBtn); this.panel1.Controls.Add(this.addQuickFilterBtn); this.panel1.Controls.Add(this.filterHelpBtn); this.panel1.Controls.Add(this.filterSearchTb); @@ -482,7 +477,7 @@ this.panel1.Location = new System.Drawing.Point(0, 24); this.panel1.Margin = new System.Windows.Forms.Padding(0); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1061, 594); + this.panel1.Size = new System.Drawing.Size(1037, 594); this.panel1.TabIndex = 7; // // productsDisplay @@ -494,7 +489,7 @@ this.productsDisplay.Location = new System.Drawing.Point(15, 36); this.productsDisplay.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.productsDisplay.Name = "productsDisplay"; - this.productsDisplay.Size = new System.Drawing.Size(1031, 555); + this.productsDisplay.Size = new System.Drawing.Size(1007, 555); this.productsDisplay.TabIndex = 9; this.productsDisplay.VisibleCountChanged += new System.EventHandler(this.productsDisplay_VisibleCountChanged); this.productsDisplay.RemovableCountChanged += new System.EventHandler(this.productsDisplay_RemovableCountChanged); @@ -504,7 +499,7 @@ // toggleQueueHideBtn // this.toggleQueueHideBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.toggleQueueHideBtn.Location = new System.Drawing.Point(1013, 3); + this.toggleQueueHideBtn.Location = new System.Drawing.Point(989, 3); this.toggleQueueHideBtn.Margin = new System.Windows.Forms.Padding(4, 3, 15, 3); this.toggleQueueHideBtn.Name = "toggleQueueHideBtn"; this.toggleQueueHideBtn.Size = new System.Drawing.Size(33, 27); @@ -513,6 +508,31 @@ this.toggleQueueHideBtn.UseVisualStyleBackColor = true; this.toggleQueueHideBtn.Click += new System.EventHandler(this.ToggleQueueHideBtn_Click); // + // doneRemovingBtn + // + this.doneRemovingBtn.Location = new System.Drawing.Point(406, 3); + this.doneRemovingBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.doneRemovingBtn.Name = "doneRemovingBtn"; + this.doneRemovingBtn.Size = new System.Drawing.Size(145, 27); + this.doneRemovingBtn.TabIndex = 4; + this.doneRemovingBtn.Text = "Done Removing Books"; + this.doneRemovingBtn.UseVisualStyleBackColor = true; + this.doneRemovingBtn.Visible = false; + this.doneRemovingBtn.Click += new System.EventHandler(this.doneRemovingBtn_Click); + // + // removeBooksBtn + // + this.removeBooksBtn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.removeBooksBtn.Location = new System.Drawing.Point(206, 3); + this.removeBooksBtn.Margin = new System.Windows.Forms.Padding(15, 3, 4, 3); + this.removeBooksBtn.Name = "removeBooksBtn"; + this.removeBooksBtn.Size = new System.Drawing.Size(192, 27); + this.removeBooksBtn.TabIndex = 4; + this.removeBooksBtn.Text = "Remove # Books from Libation"; + this.removeBooksBtn.UseVisualStyleBackColor = true; + this.removeBooksBtn.Visible = false; + this.removeBooksBtn.Click += new System.EventHandler(this.removeBooksBtn_Click); + // // processBookQueue1 // this.processBookQueue1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; @@ -520,7 +540,7 @@ this.processBookQueue1.Location = new System.Drawing.Point(0, 0); this.processBookQueue1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.processBookQueue1.Name = "processBookQueue1"; - this.processBookQueue1.Size = new System.Drawing.Size(394, 640); + this.processBookQueue1.Size = new System.Drawing.Size(418, 640); this.processBookQueue1.TabIndex = 0; // // Form1 @@ -597,6 +617,7 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Button toggleQueueHideBtn; private LibationWinForms.GridView.ProductsDisplay productsDisplay; - private System.Windows.Forms.ToolStripMenuItem closeRemoveBooksColumnToolStripMenuItem; + private System.Windows.Forms.Button removeBooksBtn; + private System.Windows.Forms.Button doneRemovingBtn; } } diff --git a/Source/LibationWinForms/Form1.RemoveBooks.cs b/Source/LibationWinForms/Form1.RemoveBooks.cs index 35fe0b38..4a5753e8 100644 --- a/Source/LibationWinForms/Form1.RemoveBooks.cs +++ b/Source/LibationWinForms/Form1.RemoveBooks.cs @@ -11,24 +11,22 @@ namespace LibationWinForms { public partial class Form1 { - private ToolStripButton removeCheckedBtn = new(); - public void Configure_RemoveBooks() - { + public void Configure_RemoveBooks() { } - #region Create and Add Tool Strip Button - removeCheckedBtn.DisplayStyle = ToolStripItemDisplayStyle.Text; - removeCheckedBtn.Name = "removeSelectedBtn"; - removeCheckedBtn.Text = "Remove 0 Books"; - removeCheckedBtn.AutoToolTip = false; - removeCheckedBtn.ToolTipText = "Remove checked books and series\r\nfrom Libation's database.\r\n\r\nThey will remain in your Audible account."; - removeCheckedBtn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - removeCheckedBtn.Alignment = ToolStripItemAlignment.Left; - removeCheckedBtn.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - removeCheckedBtn.Font = new System.Drawing.Font(removeCheckedBtn.Font, System.Drawing.FontStyle.Bold); - removeCheckedBtn.Click += (_, _) => productsDisplay.RemoveCheckedBooksAsync(); - removeCheckedBtn.Visible = false; - statusStrip1.Items.Insert(1, removeCheckedBtn); - #endregion + private async void removeBooksBtn_Click(object sender, EventArgs e) + => await productsDisplay.RemoveCheckedBooksAsync(); + + private void doneRemovingBtn_Click(object sender, EventArgs e) + { + removeBooksBtn.Visible = false; + doneRemovingBtn.Visible = false; + + productsDisplay.CloseRemoveBooksColumn(); + + //Restore the filter + filterSearchTb.Enabled = true; + filterSearchTb.Visible = true; + performFilter(filterSearchTb.Text); } private void removeLibraryBooksToolStripMenuItem_Click(object sender, EventArgs e) @@ -74,30 +72,20 @@ namespace LibationWinForms //For removing books within a filter set, use //Visible Books > Remove from library filterSearchTb.Enabled = false; + filterSearchTb.Visible = false; productsDisplay.Filter(null); - removeCheckedBtn.Visible = true; - closeRemoveBooksColumnToolStripMenuItem.Visible = true; + removeBooksBtn.Visible = true; + doneRemovingBtn.Visible = true; await productsDisplay.ScanAndRemoveBooksAsync(accounts); } - private void closeRemoveBooksColumnToolStripMenuItem_Click(object sender, EventArgs e) - { - removeCheckedBtn.Visible = false; - closeRemoveBooksColumnToolStripMenuItem.Visible = false; - productsDisplay.CloseRemoveBooksColumn(); - - //Restore the filter - filterSearchTb.Enabled = true; - performFilter(filterSearchTb.Text); - } - private void productsDisplay_RemovableCountChanged(object sender, int removeCount) { - removeCheckedBtn.Text = removeCount switch + removeBooksBtn.Text = removeCount switch { - 1 => "Remove 1 Book", - _ => $"Remove {removeCount} Books" + 1 => "Remove 1 Book from Libation", + _ => $"Remove {removeCount} Books from Libation" }; } } diff --git a/Source/LibationWinForms/Form1.resx b/Source/LibationWinForms/Form1.resx index 64da6d15..f7ebef40 100644 --- a/Source/LibationWinForms/Form1.resx +++ b/Source/LibationWinForms/Form1.resx @@ -57,12 +57,54 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + + + True + + + True + 17, 17 + + True + 132, 17 + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index 945ab8d7..e7210ad0 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -87,7 +87,7 @@ namespace LibationWinForms.GridView public void CloseRemoveBooksColumn() => productsGrid.RemoveColumnVisible = false; - public async void RemoveCheckedBooksAsync() + public async Task RemoveCheckedBooksAsync() { var selectedBooks = productsGrid.GetAllBookEntries().Where(lbe => lbe.Remove is RemoveStatus.Removed).ToList(); From a3be3e354f9d53383cb7a3b78c4782c90dd561a4 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Sun, 12 Jun 2022 17:30:11 -0600 Subject: [PATCH 21/21] Code readability changes --- Source/ApplicationServices/LibraryCommands.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index cf56f163..c0056649 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -283,19 +283,20 @@ namespace ApplicationServices List newParentsImportItems = new(); foreach (var sp in orphanedSeries) { - var serie = items.First(i => i.Asin == sp.Series.AudibleSeriesId); - var lb = orphanedEpisodes.First(l => l.Book.AudibleProductId == sp.Book.AudibleProductId); + var seriesItem = items.First(i => i.Asin == sp.Series.AudibleSeriesId); - if (serie.Relationships is null) + if (seriesItem.Relationships is null) continue; - serie.PurchaseDate = new DateTimeOffset(lb.DateAdded); - serie.Series = new AudibleApi.Common.Series[] + var episode = orphanedEpisodes.First(l => l.Book.AudibleProductId == sp.Book.AudibleProductId); + + seriesItem.PurchaseDate = new DateTimeOffset(episode.DateAdded); + seriesItem.Series = new AudibleApi.Common.Series[] { - new AudibleApi.Common.Series{ Asin = serie.Asin, Title = serie.TitleWithSubtitle, Sequence = "-1"} + new AudibleApi.Common.Series{ Asin = seriesItem.Asin, Title = seriesItem.TitleWithSubtitle, Sequence = "-1"} }; - newParentsImportItems.Add(new ImportItem { DtoItem = serie, AccountId = lb.Account, LocaleName = lb.Book.Locale }); + newParentsImportItems.Add(new ImportItem { DtoItem = seriesItem, AccountId = episode.Account, LocaleName = episode.Book.Locale }); } var newCoutn = new LibraryBookImporter(context)

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 Date: Sun, 12 Jun 2022 15:23:55 -0600 Subject: [PATCH 15/21] Update --- .../Resources/Stoplight1 with pdf.psd | Bin 196923 -> 211655 bytes .../Resources/liberate_green_pdf_no.png | Bin 3673 -> 3826 bytes .../Resources/liberate_green_pdf_yes.png | Bin 3342 -> 3511 bytes .../Resources/liberate_red_pdf_no.png | Bin 3652 -> 3802 bytes .../Resources/liberate_red_pdf_yes.png | Bin 3365 -> 3505 bytes .../Resources/liberate_yellow_pdf_no.png | Bin 3703 -> 3842 bytes .../Resources/liberate_yellow_pdf_yes.png | Bin 3398 -> 3547 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Source/LibationWinForms/Resources/Stoplight1 with pdf.psd b/Source/LibationWinForms/Resources/Stoplight1 with pdf.psd index d96ef9efde1ace366f744fc0a8adf942e82a7a77..80542c2c63b46a0c859ebe27a575ffa8a4ff2a6b 100644 GIT binary patch literal 211655 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 nqONb5E(Jto;#R_>C*$}-H#^#A_{e-noJ literal 196923 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 A`~Uy| diff --git a/Source/LibationWinForms/Resources/liberate_green_pdf_no.png b/Source/LibationWinForms/Resources/liberate_green_pdf_no.png index b327f6622c90b32b94268799494f456af79322f5..a128c08837b8dba3b8cdb0829c40020d8b8e40b6 100644 GIT binary patch delta 3762 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 delta 3608 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 Eg2{CpNB{r; delta 3586 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 IM6N<$f{eoi#{d8T diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_red_pdf_yes.png index c38f104d754b798f2887f75a67b0c9821b6858a2..0d5b5eb629b03c34e124b7bba6b534f305f330fa 100644 GIT binary patch delta 3438 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 QYybcN07*qoM6N<$g2*bWPXGV_ delta 3297 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ŲF^w~_|izz%?LoU ztevR@^5p~z0f4Q*Z8IEy8-MVbLI)sIoGk;MBL7|8tAM|vz(pa$H+{C;Zzn_31>rWk zewdr#{1xC*p@7f~M6xhAui0-jTS{8O_~$S^S;qTk;4_8t(Uj9BFu$6Ov#<-D_kqqd zjxexWT&{3 zPi|8}AFzBffl+AR4#W5t<8RNR;$g-YR_3K+a0=zi(aACw_!FSc_U!rO0tq|R9kaPa fnGS#(E&n$Fi%nRxxzsmx00000NkvXXu0mjf)~#ty diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png index 2d97eef3757e671272935ed34f901029b5383d1e..2bddcffddbb2aa1205498f09482b9582f7ceb9a9 100644 GIT binary patch delta 3778 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