diff --git a/LibationLauncher/LibationLauncher.csproj b/LibationLauncher/LibationLauncher.csproj index fdf81f9a..bd81c98f 100644 --- a/LibationLauncher/LibationLauncher.csproj +++ b/LibationLauncher/LibationLauncher.csproj @@ -13,7 +13,7 @@ win-x64 - 5.5.0.20 + 5.5.1.1 diff --git a/LibationWinForms/Dialogs/BookDetailsDialog.Designer.cs b/LibationWinForms/Dialogs/BookDetailsDialog.Designer.cs index 83726793..2022c1bb 100644 --- a/LibationWinForms/Dialogs/BookDetailsDialog.Designer.cs +++ b/LibationWinForms/Dialogs/BookDetailsDialog.Designer.cs @@ -28,51 +28,107 @@ /// private void InitializeComponent() { - this.SaveBtn = new System.Windows.Forms.Button(); + this.saveBtn = new System.Windows.Forms.Button(); this.newTagsTb = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); + this.coverPb = new System.Windows.Forms.PictureBox(); + this.detailsTb = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.cancelBtn = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.coverPb)).BeginInit(); + this.groupBox1.SuspendLayout(); this.SuspendLayout(); // - // SaveBtn + // saveBtn // - this.SaveBtn.Location = new System.Drawing.Point(462, 29); - this.SaveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.SaveBtn.Name = "SaveBtn"; - this.SaveBtn.Size = new System.Drawing.Size(88, 27); - this.SaveBtn.TabIndex = 1; - this.SaveBtn.Text = "Save"; - this.SaveBtn.UseVisualStyleBackColor = true; - this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click); + this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.saveBtn.Location = new System.Drawing.Point(481, 247); + this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.saveBtn.Name = "saveBtn"; + this.saveBtn.Size = new System.Drawing.Size(88, 27); + this.saveBtn.TabIndex = 3; + this.saveBtn.Text = "Save"; + this.saveBtn.UseVisualStyleBackColor = true; + this.saveBtn.Click += new System.EventHandler(this.saveBtn_Click); // // newTagsTb // - this.newTagsTb.Location = new System.Drawing.Point(14, 31); + this.newTagsTb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.newTagsTb.Location = new System.Drawing.Point(7, 40); this.newTagsTb.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.newTagsTb.Name = "newTagsTb"; this.newTagsTb.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.newTagsTb.Size = new System.Drawing.Size(437, 23); - this.newTagsTb.TabIndex = 0; + this.newTagsTb.Size = new System.Drawing.Size(661, 23); + this.newTagsTb.TabIndex = 1; // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(14, 10); + this.label1.Location = new System.Drawing.Point(7, 19); this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(458, 15); - this.label1.TabIndex = 2; + this.label1.TabIndex = 0; this.label1.Text = "Tags are separated by a space. Each tag can contain letters, numbers, and undersc" + "ores"; + // + // coverPb + // + this.coverPb.Location = new System.Drawing.Point(12, 12); + this.coverPb.Name = "coverPb"; + this.coverPb.Size = new System.Drawing.Size(80, 80); + this.coverPb.TabIndex = 3; + this.coverPb.TabStop = false; + // + // detailsTb + // + this.detailsTb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.detailsTb.Location = new System.Drawing.Point(98, 12); + this.detailsTb.Multiline = true; + this.detailsTb.Name = "detailsTb"; + this.detailsTb.ReadOnly = true; + this.detailsTb.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.detailsTb.Size = new System.Drawing.Size(589, 151); + this.detailsTb.TabIndex = 0; + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.newTagsTb); + this.groupBox1.Location = new System.Drawing.Point(12, 169); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(675, 73); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Edit Tags"; + // + // cancelBtn + // + this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelBtn.Location = new System.Drawing.Point(599, 247); + this.cancelBtn.Name = "cancelBtn"; + this.cancelBtn.Size = new System.Drawing.Size(88, 27); + this.cancelBtn.TabIndex = 4; + this.cancelBtn.Text = "Cancel"; + this.cancelBtn.UseVisualStyleBackColor = true; + this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click); // // BookDetailsDialog // - this.AcceptButton = this.SaveBtn; + this.AcceptButton = this.saveBtn; this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(564, 69); - this.Controls.Add(this.label1); - this.Controls.Add(this.newTagsTb); - this.Controls.Add(this.SaveBtn); + this.CancelButton = this.cancelBtn; + this.ClientSize = new System.Drawing.Size(699, 286); + this.Controls.Add(this.cancelBtn); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.detailsTb); + this.Controls.Add(this.coverPb); + this.Controls.Add(this.saveBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.MaximizeBox = false; @@ -82,14 +138,21 @@ this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Book Details"; + ((System.ComponentModel.ISupportInitialize)(this.coverPb)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion - private System.Windows.Forms.Button SaveBtn; + private System.Windows.Forms.Button saveBtn; private System.Windows.Forms.TextBox newTagsTb; private System.Windows.Forms.Label label1; - } + private System.Windows.Forms.PictureBox coverPb; + private System.Windows.Forms.TextBox detailsTb; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button cancelBtn; + } } \ No newline at end of file diff --git a/LibationWinForms/Dialogs/BookDetailsDialog.cs b/LibationWinForms/Dialogs/BookDetailsDialog.cs index ebd17f45..b0fe66e7 100644 --- a/LibationWinForms/Dialogs/BookDetailsDialog.cs +++ b/LibationWinForms/Dialogs/BookDetailsDialog.cs @@ -1,6 +1,9 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Windows.Forms; +using DataLayer; +using Dinah.Core; namespace LibationWinForms.Dialogs { @@ -8,21 +11,62 @@ namespace LibationWinForms.Dialogs { public string NewTags { get; private set; } + private LibraryBook _libraryBook { get; } + private Book Book => _libraryBook.Book; + public BookDetailsDialog() { InitializeComponent(); } - public BookDetailsDialog(string title, string rawTags) : this() + public BookDetailsDialog(LibraryBook libraryBook) : this() { - this.Text = title; - - this.newTagsTb.Text = rawTags; + _libraryBook = ArgumentValidator.EnsureNotNull(libraryBook, nameof(libraryBook)); + initDetails(); + initTags(); +//initLiberated(); } + // 1st draft: lazily cribbed from GridEntry.ctor() + private void initDetails() + { + this.Text = Book.Title; - private void SaveBtn_Click(object sender, EventArgs e) + (var isDefault, var picture) = FileManager.PictureStorage.GetPicture(new FileManager.PictureDefinition(Book.PictureId, FileManager.PictureSize._80x80)); + this.coverPb.Image = Dinah.Core.Drawing.ImageReader.ToImage(picture); + + var t = @$" +Title: {Book.Title} +Author(s): {Book.AuthorNames} +Narrator(s): {Book.NarratorNames} +Length: {(Book.LengthInMinutes == 0 ? "" : $"{Book.LengthInMinutes / 60} hr {Book.LengthInMinutes % 60} min")} +Category: {string.Join(" > ", Book.CategoriesNames)} +Purchase Date: {_libraryBook.DateAdded.ToString("d")} +".Trim(); + + if (!string.IsNullOrWhiteSpace(Book.SeriesNames)) + t += $"\r\nSeries: {Book.SeriesNames}"; + + var bookRating = Book.Rating?.ToStarString(); + if (!string.IsNullOrWhiteSpace(bookRating)) + t += $"\r\nBook Rating:\r\n{bookRating}"; + + var myRating = Book.UserDefinedItem.Rating?.ToStarString(); + if (!string.IsNullOrWhiteSpace(myRating)) + t += $"\r\nMy Rating:\r\n{myRating}"; + + this.detailsTb.Text = t; + } + private void initTags() => this.newTagsTb.Text = Book.UserDefinedItem.Tags; + + private void saveBtn_Click(object sender, EventArgs e) { NewTags = this.newTagsTb.Text; - DialogResult = DialogResult.OK; + this.DialogResult = DialogResult.OK; + } + + private void cancelBtn_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); } } } diff --git a/LibationWinForms/ProductsGrid.cs b/LibationWinForms/ProductsGrid.cs index a5182c9c..bed5c441 100644 --- a/LibationWinForms/ProductsGrid.cs +++ b/LibationWinForms/ProductsGrid.cs @@ -67,7 +67,7 @@ namespace LibationWinForms await Liberate_Click(liveGridEntry); break; case nameof(liveGridEntry.DisplayTags): - EditTags_Click(liveGridEntry); + Details_Click(liveGridEntry.LibraryBook); break; } } @@ -89,13 +89,13 @@ namespace LibationWinForms await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(libraryBook, (_, __) => RefreshRow(libraryBook.Book.AudibleProductId)); } - private void EditTags_Click(GridEntry liveGridEntry) + private void Details_Click(LibraryBook libraryBook) { - var bookDetailsForm = new BookDetailsDialog(liveGridEntry.Title, liveGridEntry.LibraryBook.Book.UserDefinedItem.Tags); + var bookDetailsForm = new BookDetailsDialog(libraryBook); if (bookDetailsForm.ShowDialog() != DialogResult.OK) return; - var qtyChanges = LibraryCommands.UpdateTags(liveGridEntry.LibraryBook.Book, bookDetailsForm.NewTags); + var qtyChanges = LibraryCommands.UpdateTags(libraryBook.Book, bookDetailsForm.NewTags); if (qtyChanges == 0) return;