diff --git a/CUERipper/CUERipper.csproj b/CUERipper/CUERipper.csproj index cca603b..be5e95a 100644 --- a/CUERipper/CUERipper.csproj +++ b/CUERipper/CUERipper.csproj @@ -79,12 +79,6 @@ frmCUERipper.cs - - Form - - - frmProperties.cs - @@ -97,10 +91,6 @@ frmCUERipper.cs - - frmProperties.cs - Designer - ResXFileCodeGenerator Resources.Designer.cs @@ -234,6 +224,11 @@ + + + + + diff --git a/CUERipper/Properties/Resources.Designer.cs b/CUERipper/Properties/Resources.Designer.cs index fd94d45..4cd15f1 100644 --- a/CUERipper/Properties/Resources.Designer.cs +++ b/CUERipper/Properties/Resources.Designer.cs @@ -81,6 +81,13 @@ namespace CUERipper.Properties { } } + internal static System.Drawing.Bitmap arrow_circle_double { + get { + object obj = ResourceManager.GetObject("arrow-circle-double", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap cddb { get { object obj = ResourceManager.GetObject("cddb", resourceCulture); @@ -131,6 +138,13 @@ namespace CUERipper.Properties { } } + internal static System.Drawing.Bitmap edit_list_order { + get { + object obj = ResourceManager.GetObject("edit-list-order", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized string similar to Exception. /// @@ -227,6 +241,20 @@ namespace CUERipper.Properties { } } + internal static System.Drawing.Bitmap spellcheck { + get { + object obj = ResourceManager.GetObject("spellcheck", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap tag_label { + get { + object obj = ResourceManager.GetObject("tag-label", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Icon tta { get { object obj = ResourceManager.GetObject("tta", resourceCulture); @@ -234,6 +262,13 @@ namespace CUERipper.Properties { } } + internal static System.Drawing.Bitmap users__arrow { + get { + object obj = ResourceManager.GetObject("users--arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Icon wave { get { object obj = ResourceManager.GetObject("wave", resourceCulture); diff --git a/CUERipper/Properties/Resources.resx b/CUERipper/Properties/Resources.resx index 21d6bff..540a625 100644 --- a/CUERipper/Properties/Resources.resx +++ b/CUERipper/Properties/Resources.resx @@ -117,77 +117,92 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\musicbrainz.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\cddb.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\freedb.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\arok.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\accuraterip_16.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\cdrepair.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ape.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\flac.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ipod_sound.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\mp3.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ogg.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\tta.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\wave.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\wv.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Done ripping - - - Rip probably contains errors - - - You can try to repair it using CUETools - Exception - - Failed to load ripper module - Looking up album via No CD drives found - - Paused + + Failed to load ripper module - - retry + + + ..\Resources\flac.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Rip probably contains errors + + + ..\musicbrainz.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Done ripping + + + You can try to repair it using CUETools + + + ..\Resources\cdrepair.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\users--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\cddb.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ogg.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Detecting drives + + ..\Resources\ape.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ipod_sound.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\wv.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\accuraterip_16.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\freedb.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\spellcheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Paused + + + ..\Resources\mp3.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\arok.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tta.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\wave.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow-circle-double.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + retry + + + ..\Resources\tag-label.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\edit-list-order.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/CUERipper/Resources/arrow-circle-double.png b/CUERipper/Resources/arrow-circle-double.png new file mode 100644 index 0000000..ba5ebd1 Binary files /dev/null and b/CUERipper/Resources/arrow-circle-double.png differ diff --git a/CUERipper/Resources/edit-list-order.png b/CUERipper/Resources/edit-list-order.png new file mode 100644 index 0000000..b639532 Binary files /dev/null and b/CUERipper/Resources/edit-list-order.png differ diff --git a/CUERipper/Resources/spellcheck.png b/CUERipper/Resources/spellcheck.png new file mode 100644 index 0000000..ebc632d Binary files /dev/null and b/CUERipper/Resources/spellcheck.png differ diff --git a/CUERipper/Resources/tag-label.png b/CUERipper/Resources/tag-label.png new file mode 100644 index 0000000..354f9ee Binary files /dev/null and b/CUERipper/Resources/tag-label.png differ diff --git a/CUERipper/Resources/users--arrow.png b/CUERipper/Resources/users--arrow.png new file mode 100644 index 0000000..c1c42b7 Binary files /dev/null and b/CUERipper/Resources/users--arrow.png differ diff --git a/CUERipper/frmCUERipper.Designer.cs b/CUERipper/frmCUERipper.Designer.cs index 3416552..a5fddae 100644 --- a/CUERipper/frmCUERipper.Designer.cs +++ b/CUERipper/frmCUERipper.Designer.cs @@ -52,11 +52,6 @@ namespace CUERipper this.buttonGo = new System.Windows.Forms.Button(); this.buttonAbort = new System.Windows.Forms.Button(); this.buttonPause = new System.Windows.Forms.Button(); - this.contextMenuStripRelease = new System.Windows.Forms.ContextMenuStrip(this.components); - this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.variousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.fixEncodingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.numericWriteOffset = new System.Windows.Forms.NumericUpDown(); this.lblWriteOffset = new System.Windows.Forms.Label(); this.checkBoxEACMode = new System.Windows.Forms.CheckBox(); @@ -93,8 +88,16 @@ namespace CUERipper this.imageListMetadataSource = new System.Windows.Forms.ImageList(this.components); this.bnComboBoxDrives = new CUEControls.ImgComboBox(); this.bnComboBoxOutputFormat = new CUEControls.ImgComboBox(); + this.listMetadata = new System.Windows.Forms.ListView(); + this.columnHeaderValue = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderName = new System.Windows.Forms.ColumnHeader(); + this.buttonTrackMetadata = new System.Windows.Forms.Button(); + this.buttonMetadata = new System.Windows.Forms.Button(); + this.buttonVA = new System.Windows.Forms.Button(); + this.buttonReload = new System.Windows.Forms.Button(); + this.buttonEncoding = new System.Windows.Forms.Button(); + this.buttonTracks = new System.Windows.Forms.Button(); this.statusStrip1.SuspendLayout(); - this.contextMenuStripRelease.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericWriteOffset)).BeginInit(); this.groupBoxSettings.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.losslessOrNotBindingSource)).BeginInit(); @@ -233,41 +236,6 @@ namespace CUERipper this.buttonPause.UseVisualStyleBackColor = true; this.buttonPause.Click += new System.EventHandler(this.buttonPause_Click); // - // contextMenuStripRelease - // - this.contextMenuStripRelease.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.editToolStripMenuItem, - this.variousToolStripMenuItem, - this.fixEncodingToolStripMenuItem, - this.reloadToolStripMenuItem}); - this.contextMenuStripRelease.Name = "contextMenuStripRelease"; - resources.ApplyResources(this.contextMenuStripRelease, "contextMenuStripRelease"); - this.contextMenuStripRelease.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripRelease_Opening); - // - // editToolStripMenuItem - // - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); - this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click); - // - // variousToolStripMenuItem - // - this.variousToolStripMenuItem.Name = "variousToolStripMenuItem"; - resources.ApplyResources(this.variousToolStripMenuItem, "variousToolStripMenuItem"); - this.variousToolStripMenuItem.Click += new System.EventHandler(this.variousToolStripMenuItem_Click); - // - // fixEncodingToolStripMenuItem - // - this.fixEncodingToolStripMenuItem.Name = "fixEncodingToolStripMenuItem"; - resources.ApplyResources(this.fixEncodingToolStripMenuItem, "fixEncodingToolStripMenuItem"); - this.fixEncodingToolStripMenuItem.Click += new System.EventHandler(this.fixEncodingToolStripMenuItem_Click); - // - // reloadToolStripMenuItem - // - this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; - resources.ApplyResources(this.reloadToolStripMenuItem, "reloadToolStripMenuItem"); - this.reloadToolStripMenuItem.Click += new System.EventHandler(this.reloadToolStripMenuItem_Click); - // // numericWriteOffset // resources.ApplyResources(this.numericWriteOffset, "numericWriteOffset"); @@ -539,7 +507,6 @@ namespace CUERipper // bnComboBoxRelease // this.bnComboBoxRelease.BackColor = System.Drawing.Color.Transparent; - this.bnComboBoxRelease.ContextMenuStrip = this.contextMenuStripRelease; this.bnComboBoxRelease.DataSource = this.releasesBindingSource; this.bnComboBoxRelease.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxRelease.ForeColor = System.Drawing.SystemColors.ControlText; @@ -553,7 +520,6 @@ namespace CUERipper rectRadius5.TopLeft = 2; rectRadius5.TopRight = 6; this.bnComboBoxRelease.Radius = rectRadius5; - this.toolTip1.SetToolTip(this.bnComboBoxRelease, resources.GetString("bnComboBoxRelease.ToolTip")); this.bnComboBoxRelease.SelectedValueChanged += new System.EventHandler(this.bnComboBoxRelease_SelectedValueChanged); // // releasesBindingSource @@ -568,6 +534,11 @@ namespace CUERipper this.imageListMetadataSource.Images.SetKeyName(0, "musicbrainz"); this.imageListMetadataSource.Images.SetKeyName(1, "freedb"); this.imageListMetadataSource.Images.SetKeyName(2, "local"); + this.imageListMetadataSource.Images.SetKeyName(3, "localshadow"); + this.imageListMetadataSource.Images.SetKeyName(4, "tracks"); + this.imageListMetadataSource.Images.SetKeyName(5, "tracks1"); + this.imageListMetadataSource.Images.SetKeyName(6, "album"); + this.imageListMetadataSource.Images.SetKeyName(7, "track"); // // bnComboBoxDrives // @@ -605,15 +576,97 @@ namespace CUERipper this.bnComboBoxOutputFormat.DropDown += new System.EventHandler(this.bnComboBoxOutputFormat_DroppedDown); this.bnComboBoxOutputFormat.TextChanged += new System.EventHandler(this.bnComboBoxOutputFormat_TextChanged); // + // listMetadata + // + this.listMetadata.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderValue, + this.columnHeaderName}); + this.listMetadata.FullRowSelect = true; + this.listMetadata.GridLines = true; + this.listMetadata.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listMetadata.LabelEdit = true; + resources.ApplyResources(this.listMetadata, "listMetadata"); + this.listMetadata.Name = "listMetadata"; + this.listMetadata.UseCompatibleStateImageBehavior = false; + this.listMetadata.View = System.Windows.Forms.View.Details; + this.listMetadata.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.listMetadata_AfterLabelEdit); + this.listMetadata.Click += new System.EventHandler(this.listMetadata_Click); + // + // columnHeaderValue + // + resources.ApplyResources(this.columnHeaderValue, "columnHeaderValue"); + // + // columnHeaderName + // + resources.ApplyResources(this.columnHeaderName, "columnHeaderName"); + // + // buttonTrackMetadata + // + this.buttonTrackMetadata.BackColor = System.Drawing.Color.Transparent; + this.buttonTrackMetadata.FlatAppearance.BorderSize = 0; + this.buttonTrackMetadata.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control; + this.buttonTrackMetadata.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent; + resources.ApplyResources(this.buttonTrackMetadata, "buttonTrackMetadata"); + this.buttonTrackMetadata.ForeColor = System.Drawing.SystemColors.ControlText; + this.buttonTrackMetadata.ImageList = this.imageListChecked; + this.buttonTrackMetadata.Name = "buttonTrackMetadata"; + this.buttonTrackMetadata.UseVisualStyleBackColor = false; + // + // buttonMetadata + // + this.buttonMetadata.Image = global::CUERipper.Properties.Resources.tag_label; + resources.ApplyResources(this.buttonMetadata, "buttonMetadata"); + this.buttonMetadata.Name = "buttonMetadata"; + this.buttonMetadata.UseVisualStyleBackColor = true; + this.buttonMetadata.Click += new System.EventHandler(this.buttonMetadata_Click); + // + // buttonVA + // + this.buttonVA.Image = global::CUERipper.Properties.Resources.users__arrow; + resources.ApplyResources(this.buttonVA, "buttonVA"); + this.buttonVA.Name = "buttonVA"; + this.buttonVA.UseVisualStyleBackColor = true; + this.buttonVA.Click += new System.EventHandler(this.buttonVA_Click); + // + // buttonReload + // + this.buttonReload.Image = global::CUERipper.Properties.Resources.arrow_circle_double; + resources.ApplyResources(this.buttonReload, "buttonReload"); + this.buttonReload.Name = "buttonReload"; + this.buttonReload.UseVisualStyleBackColor = true; + this.buttonReload.Click += new System.EventHandler(this.buttonReload_Click); + // + // buttonEncoding + // + this.buttonEncoding.Image = global::CUERipper.Properties.Resources.spellcheck; + resources.ApplyResources(this.buttonEncoding, "buttonEncoding"); + this.buttonEncoding.Name = "buttonEncoding"; + this.buttonEncoding.UseVisualStyleBackColor = true; + this.buttonEncoding.Click += new System.EventHandler(this.buttonEncoding_Click); + // + // buttonTracks + // + this.buttonTracks.Image = global::CUERipper.Properties.Resources.edit_list_order; + resources.ApplyResources(this.buttonTracks, "buttonTracks"); + this.buttonTracks.Name = "buttonTracks"; + this.buttonTracks.UseVisualStyleBackColor = true; + this.buttonTracks.Click += new System.EventHandler(this.buttonTracks_Click); + // // frmCUERipper // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.txtOutputPath); + this.Controls.Add(this.buttonTracks); + this.Controls.Add(this.buttonEncoding); + this.Controls.Add(this.buttonMetadata); + this.Controls.Add(this.buttonReload); + this.Controls.Add(this.buttonTrackMetadata); + this.Controls.Add(this.buttonVA); this.Controls.Add(this.bnComboBoxRelease); + this.Controls.Add(this.txtOutputPath); this.Controls.Add(this.bnComboBoxDrives); - this.Controls.Add(this.bnComboBoxOutputFormat); this.Controls.Add(this.progressBarErrors); + this.Controls.Add(this.bnComboBoxOutputFormat); this.Controls.Add(this.progressBarCD); this.Controls.Add(this.groupBoxSettings); this.Controls.Add(this.listTracks); @@ -621,6 +674,7 @@ namespace CUERipper this.Controls.Add(this.statusStrip1); this.Controls.Add(this.buttonAbort); this.Controls.Add(this.buttonPause); + this.Controls.Add(this.listMetadata); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.KeyPreview = true; this.MaximizeBox = false; @@ -631,7 +685,6 @@ namespace CUERipper this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.frmCUERipper_KeyDown); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); - this.contextMenuStripRelease.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.numericWriteOffset)).EndInit(); this.groupBoxSettings.ResumeLayout(false); this.groupBoxSettings.PerformLayout(); @@ -662,8 +715,6 @@ namespace CUERipper private System.Windows.Forms.Button buttonGo; private System.Windows.Forms.Button buttonAbort; private System.Windows.Forms.Button buttonPause; - private System.Windows.Forms.ContextMenuStrip contextMenuStripRelease; - private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusAr; @@ -704,9 +755,15 @@ namespace CUERipper private System.Windows.Forms.BindingSource losslessOrNotBindingSource; private CUEControls.ImgComboBox bnComboBoxOutputFormat; private System.Windows.Forms.ImageList imageListChecked; - private System.Windows.Forms.ToolStripMenuItem variousToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem fixEncodingToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem; + private System.Windows.Forms.ListView listMetadata; + private System.Windows.Forms.ColumnHeader columnHeaderName; + private System.Windows.Forms.ColumnHeader columnHeaderValue; + private System.Windows.Forms.Button buttonTrackMetadata; + private System.Windows.Forms.Button buttonMetadata; + private System.Windows.Forms.Button buttonVA; + private System.Windows.Forms.Button buttonReload; + private System.Windows.Forms.Button buttonEncoding; + private System.Windows.Forms.Button buttonTracks; } } diff --git a/CUERipper/frmCUERipper.cs b/CUERipper/frmCUERipper.cs index 4cb771a..9687fc3 100644 --- a/CUERipper/frmCUERipper.cs +++ b/CUERipper/frmCUERipper.cs @@ -10,6 +10,7 @@ using System.Text; using System.Threading; using System.Windows.Forms; using System.Configuration; +using System.Drawing.Drawing2D; using CUETools.AccurateRip; using CUETools.CTDB; using CUETools.CDImage; @@ -28,7 +29,6 @@ namespace CUERipper private StartStop _startStop; private CUEConfig _config; private CUESheet cueSheet; - private CUEMetadataEntry selectedRelease; private DriveInfo selectedDriveInfo; private string _pathOut; string _defaultLosslessFormat, _defaultLossyFormat, _defaultHybridFormat; @@ -57,8 +57,92 @@ namespace CUERipper "%music%\\%artist%\\[%year% - ]%album%[ - %edition%]$ifgreater($max(%discnumber%,%totaldiscs%),1, - cd %discnumber%,)[' ('%unique%')']\\%artist% - %album%[ - %edition%].cue" }; + //// Calculate the graphics path that representing the figure in the bitmap + //// excluding the transparent color which is the top left pixel. + //private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap, Color colorTransparent) + //{ + // // Create GraphicsPath for our bitmap calculation + // GraphicsPath graphicsPath = new GraphicsPath(); + + // // Use the top left pixel as our transparent color + // colorTransparent = bitmap.GetPixel(0, 0); + + // // This is to store the column value where an opaque pixel is first found. + // // This value will determine where we start scanning for trailing + // // opaque pixels. + // int colOpaquePixel = 0; + + // // Go through all rows (Y axis) + // for (int row = 0; row < bitmap.Height; row++) + // { + // // Reset value + // colOpaquePixel = 0; + + // // Go through all columns (X axis) + // for (int col = 0; col < bitmap.Width; col++) + // { + // // If this is an opaque pixel, mark it and search + // // for anymore trailing behind + // if (bitmap.GetPixel(col, row) != colorTransparent) + // { + // // Opaque pixel found, mark current position + // colOpaquePixel = col; + // // Create another variable to set the current pixel position + // int colNext = col; + // // Starting from current found opaque pixel, search for + // // anymore opaque pixels trailing behind, until a transparent + // // pixel is found or minimum width is reached + // for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++) + // if (bitmap.GetPixel(colNext, row) == colorTransparent) + // break; + // // Form a rectangle for line of opaque pixels found and + // // add it to our graphics path + // graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, + // row, colNext - colOpaquePixel, 1)); + // // No need to scan the line of opaque pixels just found + // col = colNext; + // } + // } + // } + + // // Return calculated graphics path + // return graphicsPath; + //} + + //private static void CreateControlRegion(Button button, Bitmap bitmap, Color colorTransparent) + //{ + // // Return if control and bitmap are null + // if (button == null || bitmap == null) + // return; + + // // Set our control's size to be the same as the bitmap + // button.Width = bitmap.Width; + // button.Height = bitmap.Height; + + // // Do not show button text + // button.Text = ""; + + // // Change cursor to hand when over button + // button.Cursor = Cursors.Hand; + + // // Set background image of button + // button.BackgroundImage = bitmap; + + // // Calculate the graphics path based on the bitmap supplied + // GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap, colorTransparent); + + // // Apply new region + + // button.Region = new Region(graphicsPath); + //} + private void frmCUERipper_Load(object sender, EventArgs e) { + //buttonTrackMetadata.Parent = listTracks; + //buttonTrackMetadata.ImageList = null; + //CreateControlRegion(buttonTrackMetadata, new Bitmap(imageListChecked.Images[0]), imageListChecked.TransparentColor); + //CreateControlRegion(buttonTrackMetadata, Properties.Resources.cdrepair, Color.White); + SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath); _config.Load(sr); _defaultLosslessFormat = sr.Load("DefaultLosslessFormat") ?? "flac"; @@ -148,6 +232,7 @@ namespace CUERipper try { arName = reader.ARName; + reader.Close(); } catch { @@ -185,7 +270,7 @@ namespace CUERipper data.Drives.Clear(); listTracks.Items.Clear(); data.Releases.Clear(); - selectedRelease = null; + data.selectedRelease = null; selectedDriveInfo = null; bnComboBoxRelease.Text = ""; @@ -204,7 +289,7 @@ namespace CUERipper bool outputFormatVisible = false; - private void SetupControls () + private void SetupControls() { bool running = _workThread != null; @@ -213,15 +298,25 @@ namespace CUERipper txtOutputPath.Enabled = !running && !outputFormatVisible; bnComboBoxRelease.Enabled = !running && data.Releases.Count > 0; bnComboBoxDrives.Enabled = !running && data.Drives.Count > 0; - bnComboBoxOutputFormat.Enabled = + bnComboBoxOutputFormat.Enabled = listTracks.Enabled = + listMetadata.Enabled = groupBoxSettings.Enabled = !running; + buttonGo.Enabled = !running && data.selectedRelease != null; buttonPause.Visible = buttonPause.Enabled = buttonAbort.Visible = buttonAbort.Enabled = running; - buttonGo.Visible = buttonGo.Enabled = !running; + buttonGo.Visible = !running; toolStripStatusLabel1.Text = String.Empty; toolStripProgressBar1.Value = 0; progressBarErrors.Value = 0; progressBarCD.Value = 0; + + buttonTracks.Enabled = data.selectedRelease != null && !running; + buttonMetadata.Enabled = data.selectedRelease != null && !running; + buttonVA.Enabled = data.selectedRelease != null && !running && + data.selectedRelease.ImageKey == "freedb" && !data.selectedRelease.metadata.IsVarious(); + buttonEncoding.Enabled = data.selectedRelease != null && !running && + data.selectedRelease.ImageKey == "freedb" && (new CUEMetadata(data.selectedRelease.metadata)).FreedbToEncoding(); + buttonReload.Enabled = data.selectedRelease != null && !running; } private void CheckStop() @@ -352,7 +447,7 @@ namespace CUERipper this.BeginInvoke((MethodInvoker)delegate() { data.Releases.Clear(); - selectedRelease = null; + data.selectedRelease = null; bnComboBoxRelease.Text = ex.Message; }); } @@ -376,9 +471,9 @@ namespace CUERipper bnComboBoxOutputFormat.Items.RemoveAt(OutputPathUseTemplates.Length + 10); } - selectedRelease.metadata.Save(); + data.selectedRelease.metadata.Save(); - cueSheet.CopyMetadata(selectedRelease.metadata); + cueSheet.CopyMetadata(data.selectedRelease.metadata); cueSheet.OutputStyle = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : CUEStyle.GapsAppended; _pathOut = cueSheet.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text, @@ -411,20 +506,61 @@ namespace CUERipper private void UpdateRelease() { - listTracks.Items.Clear(); - selectedRelease = bnComboBoxRelease.SelectedItem as CUEMetadataEntry; + data.selectedRelease = bnComboBoxRelease.SelectedItem as CUEMetadataEntry; comboBoxOutputFormat_TextUpdate(this, new EventArgs()); - if (selectedRelease == null) - return; - - for (int i = 1; i <= selectedDriveInfo.drive.TOC.TrackCount; i++) + listTracks.BeginUpdate(); + listMetadata.BeginUpdate(); + listTracks.Items.Clear(); + listMetadata.Items.Clear(); + if (!data.metadataMode) { - listTracks.Items.Add(new ListViewItem(new string[] { - selectedDriveInfo.drive.TOC[i].IsAudio ? selectedRelease.metadata.Tracks[i - selectedDriveInfo.drive.TOC.FirstAudio].Title : "Data track", - selectedDriveInfo.drive.TOC[i].Number.ToString(), - selectedDriveInfo.drive.TOC[i].StartMSF, - selectedDriveInfo.drive.TOC[i].LengthMSF })); + listTracks.Visible = true; + listMetadata.Visible = false; + if (data.selectedRelease != null) + for (int i = 1; i <= selectedDriveInfo.drive.TOC.TrackCount; i++) + { + string title; + if (!selectedDriveInfo.drive.TOC[i].IsAudio) + title = "Data track"; + else + title = data.selectedRelease.metadata.Tracks[i - selectedDriveInfo.drive.TOC.FirstAudio].Title; + listTracks.Items.Add(new ListViewItem(new string[] { + title, + selectedDriveInfo.drive.TOC[i].Number.ToString(), + selectedDriveInfo.drive.TOC[i].StartMSF, + selectedDriveInfo.drive.TOC[i].LengthMSF })); + } } + else //if (data.selectedTrack.no == 0) + { + listTracks.Visible = false; + listMetadata.Visible = true; + if (data.selectedRelease != null) + { + PropertyDescriptorCollection props = TypeDescriptor.GetProperties(data.selectedRelease.metadata); + PropertyDescriptorCollection sortedprops = props.Sort(new string[] { "Artist", "Title", "Genre", "Year", "DiscNumber", "TotalDiscs" }); + foreach (PropertyDescriptor p in sortedprops) + if (p.Name != "Tracks" && p.Name != "Id" && p.Name != "Catalog") + listMetadata.Items.Add(new ListViewItem(new string[] { p.GetValue(data.selectedRelease.metadata).ToString(), p.Name })); + } + } + //else + //{ + // listTracks.Visible = false; + // listMetadata.Visible = true; + // if (data.selectedRelease != null) + // { + // CUETrackMetadata track = data.selectedRelease.metadata.Tracks[data.selectedTrack.no - 1]; + // PropertyDescriptorCollection props = TypeDescriptor.GetProperties(track); + // //props = props.Sort(new string[] { "TopLeft", "TopRight", "BottomLeft", "BottomRight" }); + // foreach (PropertyDescriptor p in props) + // if (p.Name != "ISRC") + // listMetadata.Items.Add(new ListViewItem(new string[] { p.GetValue(track).ToString(), p.Name })); + // } + //} + listTracks.EndUpdate(); + listMetadata.EndUpdate(); + SetupControls(); } private void MusicBrainz_LookupProgress(object sender, XmlRequestEventArgs e) @@ -622,15 +758,15 @@ namespace CUERipper toolStripStatusLabelMusicBrainz.Enabled = false; toolStripStatusLabelMusicBrainz.Text = ""; toolStripStatusLabelMusicBrainz.ToolTipText = ""; - buttonGo.Enabled = false; listTracks.Items.Clear(); data.Releases.Clear(); - selectedRelease = null; + data.selectedRelease = null; bnComboBoxRelease.Enabled = false; bnComboBoxRelease.Text = ""; if (selectedDriveInfo == null || selectedDriveInfo.drive == null) { selectedDriveInfo = null; + SetupControls(); return; } if (cueSheet != null) @@ -650,11 +786,13 @@ namespace CUERipper //selectedDriveInfo.drive.Close(); bnComboBoxRelease.Text = ex.Message; //bnComboBoxRelease.Enabled = false; + SetupControls(); return; } if (selectedDriveInfo.drive.TOC.AudioTracks == 0) { bnComboBoxRelease.Text = "No audio tracks"; + SetupControls(); return; } UpdateRelease(); @@ -694,65 +832,13 @@ namespace CUERipper private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e) { - if (selectedRelease == null) return; + if (data.selectedRelease == null) return; if (e.Label != null && selectedDriveInfo.drive.TOC[e.Item + 1].IsAudio) - selectedRelease.metadata.Tracks[e.Item].Title = e.Label; + data.selectedRelease.metadata.Tracks[e.Item].Title = e.Label; else e.CancelEdit = true; } - private void contextMenuStripRelease_Opening(object sender, CancelEventArgs e) - { - if (selectedRelease == null) return; - bool isVarious = false; - for (int i = 0; i < selectedRelease.metadata.Tracks.Count; i++) - if (selectedRelease.metadata.Tracks[i].Artist != selectedRelease.metadata.Artist) - isVarious = true; - variousToolStripMenuItem.Enabled = selectedRelease.ImageKey == "freedb" && !isVarious; - CUEMetadata copy = new CUEMetadata(selectedRelease.metadata); - fixEncodingToolStripMenuItem.Enabled = selectedRelease.ImageKey == "freedb" && copy.FreedbToEncoding(); - } - - private void editToolStripMenuItem_Click(object sender, EventArgs e) - { - if (selectedRelease == null) return; - frmProperties frm = new frmProperties(); - frm.Metadata = selectedRelease.metadata; - frm.ShowDialog(); - data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); - comboBoxOutputFormat_TextUpdate(sender, e); - } - - private void variousToolStripMenuItem_Click(object sender, EventArgs e) - { - if (selectedRelease == null) return; - selectedRelease.metadata.FreedbToVarious(); - UpdateRelease(); - data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); - } - - private void fixEncodingToolStripMenuItem_Click(object sender, EventArgs e) - { - if (selectedRelease == null) return; - selectedRelease.metadata.FreedbToEncoding(); - UpdateRelease(); - data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); - comboBoxOutputFormat_TextUpdate(sender, e); - } - - private void reloadToolStripMenuItem_Click(object sender, EventArgs e) - { - loadAllMetadata = true; - data.Releases.Clear(); - selectedRelease = null; - UpdateRelease(); - _workThread = new Thread(Lookup); - _workThread.Priority = ThreadPriority.BelowNormal; - _workThread.IsBackground = true; - SetupControls(); - _workThread.Start(selectedDriveInfo.drive); - } - private void frmCUERipper_FormClosed(object sender, FormClosedEventArgs e) { SettingsWriter sw = new SettingsWriter("CUERipper", "settings.txt", Application.ExecutablePath); @@ -903,7 +989,7 @@ namespace CUERipper private void comboBoxOutputFormat_TextUpdate(object sender, EventArgs e) { if (selectedFormat == null) return; - if (selectedRelease == null) + if (data.selectedRelease == null) { txtOutputPath.Text = ""; return; @@ -911,7 +997,7 @@ namespace CUERipper CUEStyle style = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : CUEStyle.GapsAppended; CUESheet sheet = new CUESheet(_config); sheet.TOC = selectedDriveInfo.drive.TOC; - sheet.CopyMetadata(selectedRelease.metadata); + sheet.CopyMetadata(data.selectedRelease.metadata); txtOutputPath.Text = sheet.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text, style == CUEStyle.SingleFileWithCUE ? "." + selectedFormat.ToString() : ".cue", CUEAction.Encode, null); } @@ -1055,6 +1141,86 @@ namespace CUERipper { bnComboBoxOutputFormat_DroppedDown(sender, e); } + + private void listMetadata_Click(object sender, EventArgs e) + { + listMetadata.FocusedItem.BeginEdit(); + } + + private void listMetadata_AfterLabelEdit(object sender, LabelEditEventArgs e) + { + if (data.selectedRelease == null || e.Label == null || !data.metadataMode) + { + e.CancelEdit = true; + } + else + { + PropertyDescriptorCollection props = TypeDescriptor.GetProperties(data.selectedRelease.metadata); + PropertyDescriptor prop = props[listMetadata.Items[e.Item].SubItems[1].Text]; + if (prop.Name == "Artist") + data.selectedRelease.metadata.UpdateArtist(e.Label); + else + prop.SetValue(data.selectedRelease.metadata, e.Label); + data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); + } + //else + //{ + // CUETrackMetadata track = data.selectedRelease.metadata.Tracks[data.selectedTrack.no - 1]; + // PropertyDescriptorCollection props = TypeDescriptor.GetProperties(track); + // props[listMetadata.Items[e.Item].SubItems[1].Text].SetValue(track, e.Label); + // data.Tracks.ResetItem(data.selectedTrack.no + 1); + //} + } + + private void buttonMetadata_Click(object sender, EventArgs e) + { + buttonTracks.Visible = true; + buttonTracks.Focus(); + buttonMetadata.Visible = false; + data.metadataMode = true; + UpdateRelease(); + } + + private void buttonTracks_Click(object sender, EventArgs e) + { + buttonMetadata.Visible = true; + buttonMetadata.Focus(); + buttonTracks.Visible = false; + data.metadataMode = false; + UpdateRelease(); + } + + private void buttonReload_Click(object sender, EventArgs e) + { + loadAllMetadata = true; + data.Releases.Clear(); + data.selectedRelease = null; + UpdateRelease(); + _workThread = new Thread(Lookup); + _workThread.Priority = ThreadPriority.BelowNormal; + _workThread.IsBackground = true; + SetupControls(); + _workThread.Start(selectedDriveInfo.drive); + } + + private void buttonVA_Click(object sender, EventArgs e) + { + if (data.selectedRelease == null) return; + data.selectedRelease.metadata.FreedbToVarious(); + UpdateRelease(); + data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); + SetupControls(); + } + + private void buttonEncoding_Click(object sender, EventArgs e) + { + if (data.selectedRelease == null) return; + data.selectedRelease.metadata.FreedbToEncoding(); + UpdateRelease(); + data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex); + comboBoxOutputFormat_TextUpdate(sender, e); + SetupControls(); + } } public class StartStop @@ -1166,6 +1332,9 @@ namespace CUERipper internal class CUERipperData { + public CUERipperData() + { + } private BindingList cueStyles = new BindingList { "image", "tracks" }; //private BindingList losslessOrNot = new BindingList { "lossless", "lossy" }; private BindingList> losslessOrNot = new BindingList> { @@ -1177,6 +1346,9 @@ namespace CUERipper private BindingList formats = new BindingList(); private BindingList encoders = new BindingList(); + public CUEMetadataEntry selectedRelease { get; set; } + public bool metadataMode { get; set; } + public BindingList CUEStyles { get diff --git a/CUERipper/frmCUERipper.resx b/CUERipper/frmCUERipper.resx index 48727c6..47f15e4 100644 --- a/CUERipper/frmCUERipper.resx +++ b/CUERipper/frmCUERipper.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 0, 456 + 0, 469 @@ -175,7 +175,7 @@ toolStripStatusAr - 0, 456 + 0, 469 571, 25 @@ -197,7 +197,7 @@ $this - 10 + 15 @@ -237,7 +237,7 @@ 6, 87 - 553, 245 + 553, 221 2 @@ -258,7 +258,7 @@ $this - 8 + 13 Top, Left, Right @@ -288,7 +288,7 @@ $this - 9 + 14 Top, Left, Right @@ -321,7 +321,7 @@ $this - 11 + 16 Top, Left, Right @@ -354,43 +354,7 @@ $this - 12 - - - 17, 17 - - - 149, 22 - - - Edit - - - 149, 22 - - - Various Artists - - - 149, 22 - - - Fix Encoding - - - 149, 22 - - - Reload - - - 150, 92 - - - contextMenuStripRelease - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 17 310, 15 @@ -783,7 +747,7 @@ 6, 332 - 370, 121 + 370, 134 29 @@ -798,7 +762,7 @@ $this - 7 + 12 998, 56 @@ -810,7 +774,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy CQAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 @@ -841,17 +805,17 @@ AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AyAAB9AHx BvAB8QH0BgAB9AHxBvAB8QH0BgAB9AHyBvEB8gH0BgAB9AHxBvAB8QH0BgAC8QbzAvEGAALxBvMC8QYA - AfIB9AL/AfQD/wH0AfIGAALxBvMC8QYAAfEB8wHyAfAB6gHwAvIB8wHxBgAB8QHzBvIB8wHxBgAB8QL/ - AfQB8QH0A/8B8QYAAfEB8wbyAfMB8QYAAfEB8wHxA20B8QLzAfEGAAHxCPMB8QYAAfEB/wH0A/EB9AL/ + AfIB9AIAAfQDAAH0AfIGAALxBvMC8QYAAfEB8wHyAfAB6gHwAvIB8wHxBgAB8QHzBvIB8wHxBgAB8QIA + AfQB8QH0AwAB8QYAAfEB8wbyAfMB8QYAAfEB8wHxA+oB8QLzAfEGAAHxCPMB8QYAAfEBAAH0A/EB9AIA AfEGAAHxAvMB7ALqAewC8wHxBgAB8QH0AuwB8ALsAfEB9AHxBgAB8QH0BvMB9AHxBgAB8gH0AvIB9ALy AvQB8gYAAfEB9AHzBOsB8wH0AfEGAAHyAfQB7AHyAfQB8gLsAfQB8gYAAfII9AHyBgAB8gH0AfID9ALy - AfQB8gYAAfIC9ATsAvQB8gYAAfIB/wT0AfMB7QH/AfIGAAHyAf8G9AH/AfIGAAHyAvQD/wH0AfIB9AHy - BgAB8gH/AfQB7wLtAe8B9AH/AfIGAAHyBv8B8gH/AfIGAAHyCP8B8gYAAfIB9AT/A/QB8gYAAfII/wHy - BgAC8wb/AvMGAALzBv8C8wYAAfMI9AHzBgAC8wb/AvMGAAH/AfMG8gHzAf8GAAH/AfMG8gHzAf8GAAH/ - AfMG8gHzAf8GAAH/AfMG8gHzAf/DAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/ - gQAY/wHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEH - AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEH - AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcY/ws= + AfQB8gYAAfIC9ATsAvQB8gYAAfIBAAT0AfMB7QEAAfIGAAHyAQAG9AEAAfIGAAHyAvQDAAH0AfIB9AHy + BgAB8gEAAfQB7wLtAe8B9AEAAfIGAAHyBgAB8gEAAfIGAAHyCAAB8gYAAfIB9AQAA/QB8gYAAfIIAAHy + BgAC8wYAAvMGAALzBgAC8wYAAfMI9AHzBgAC8wYAAvMHAAHzBvIB8wgAAfMG8gHzCAAB8wbyAfMIAAHz + BvIB88QAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BABj/AeABBwHgAQcB4AEH + AeABBwHgAQcB4AEHAeYB5wHgAQcB4AEHAeABBwHsAXcB4AEHAeABBwHgAQcB6AE3AeABBwHgAQcB4AEH + AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAegBFwHoARcB4wGHAegBFwHvAdcB7wH3AecBhwHvAfcE5wHg + AQcC5wHwAQ8B8AEPAfABDwHwAQ8Y/ws= @@ -891,7 +855,7 @@ $this - 5 + 9 382, 392 @@ -918,10 +882,10 @@ $this - 6 + 11 - 7, 61 + 6, 314 552, 20 @@ -942,7 +906,7 @@ $this - 1 + 7 708, 56 @@ -954,9 +918,9 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS - CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa + DgAAAk1TRnQBSQFMAgEBCAEAAQwBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm @@ -983,22 +947,40 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wIAAXoCUQt6AQAB7Q8K - IAABUQEAAREBEwEAAQ8KegG1BAQD8wEEA/MCBAFfAQohAAG8A/8BEwEPCXoBtQMEAfQCBAH0AQQB9AIE - AfQCBAEKAfEC7gHyAQAB8gTuAfIBAAHyAu4B8REAAbwE/wEACXoBtQGiAgQB/wIEAf8BBAH/AgQB/wIE - AQoBvAH1AfQDBwT0AwcB9AH1AbwQAAFRAQ8B6wIHAbwBAAERBAABEQN6AbUBogMEA/8BBAP/AwQBCgHw - AfQC8wH0BvMB9ALzAfQB8BAAAXoBUQEPAgAB/wEAAQ8B9wL/AZICEQJ6AbUBogUEAf8BBAH/BQQBCgHw - AfQM8wH0AfAQAAR6AQAB/wEAAREE/wG8AQACegG1AaIFBAH/AQQB/wUEAQoB8AH0DPMB9AHwEAAErgEA - Af8CAAETAbwD/wEAAq4BtQGiDQQBCgHxAfUF9AEAAXMB7gT0AfUB8RAABK4BAAH/AQABEgEPAwAB/wEA - Aq4N/wH0AfMB7AHyAfUF9AEcAcMBUQEIA/QB9QHyEAAErgEAAf8BDwEAARECEgEAAf8BAAKuAf8BogL/ - AQQD/wIEA/8CBAHsAfIG9QEbAVgBegFRAQgD9QHyEAAErgEAAv8BkgERAQABDwEAAf8BAAKuAf8BogL/ - AQQC/wEEBP8BBAH0AfMB7AHyAf8G9QEaAVgBegFRARoB9QH/AfIQAASuAQABBwP/AbwB6gEAAf8BAAKu - Af8BogL/AQQC/wQEAf8DBAEKAfII/wEaAVgBegFRARoB/wHyEAAErgERARMBBwb/AQACrgH/AaIBBAH/ - AQQC/wEEAv8BBAH/AQQB9AHzAQoB8gn/ARsBWAF6Ae0B8AHyEAAFrgERAQABEQGSBP8BAAKuAf8BhgL/ - AgQC/wIEA/8CBAHsAfMK8gHwAe8B9AHtAbwQAAeuAREBAAEPAesBvAH/AQACrgH/AYYL/wH0AfMB7AwA - AfQB7gEWAW8RAAmuAQ8BAAETAREBrgEAAv8BtQv/AfQBBw0AAfQBFgHzEAABQgFNAT4HAAE+AwABKAMA - AUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAYABAQIAAv8GAAL/BgABCAEQXgAB/wHwAgABgAEBAgAB/wH4 - AgAL + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ARgABmQZ5 + AfMIAAH3AW0BvC0AAZkFoAJ5AfQIAAHwAW0CAAGSAeoCEgEUARUBQwERAewDAAGZCHkB8wYAAZkIeQHz + BQABmQWgAXkBmgFRAnkBmQQAAfMBbQHzAgAB6gFtARICFAESAW0B6wERAwABmQegAnkB9AUAAZkHoAJ5 + AfQEAAGZBaADeQFYAaABmQQAAe8C7AIAAfcBbQPqAhIBFAHsAwABmQegAXkBmgF5AfQEAAGZB6ABeQGa + AXkB9AMAAZkIoAFYAaABUQF5AZkTAAGZB6ADeQGZBAABmQegA3kBmQMAAZkIoAFYAaABWAGgAZkCAALr + AW0OAAGZCqABmQQAAZkKoAGZAwABmQigAVgBoAFYAaABmQIAAfQB7QH/AgAB9wVtAuoBkgMAAZkKoAGZ + BAABmQqgAZkDAAGZAcMHoAFYAaABWAGgAZkDAAH0Ae0CAAJtARIBEwEUARIBbQHrAeoDAAGZCqABmQQA + AZkKoAGZAwABGgHDB6ABWAGgAVgBoAGZAgAB7wHsAe8CAAHvAesGbQH3AwABmQqgAZkEAAGZCaABkQGY + AwABGgPDBaABWAGgAVgBoAGZEwABmQHDCaABmQQAAZkBwwigAosB8gIAARsBGgh5AaABWAGgAZkCAAPs + DgABmQHDCaABmQQAAZkBwwSgAZEEswHaAbQB8gMAARoDwwWgAVgBoAGZAwAB7AMAAe8B7ATrAm0B9wMA + ARoBwwmgARoEAAEaAcMEoAGzAdwF2wG0AwABGwEaCHkBoAEaAwAB7AMAAewBbQISAhMBEgJtAwABGgTD + BqABGgQAARoEwwGgAbsEtAHcAbQB8gUAARoDwwWgARoCAAHvAewDAAHvBOwD6wHvAwABGwoaARsEAAEb + CRoCtAHzBgABGwgaARstAAEJAfMDAAF6AlELegEAAe0PCiAAAVEBAAERARMBAAEPCnoBtQQEA/MBBAPz + AgQBXwEKEAAQ/wEAAbwD/wETAQ8JegG1AwQB9AIEAfQBBAH0AgQB9AIEAQoB8QK8AfIBAAHyBLwB8gEA + AfICvAHxAfACvAHwAf8B8AS8AfAB/wHwArwB8AEAAbwE/wEACXoBtQGiAgQB/wIEAf8BBAH/AgQB/wIE + AQoBvAH/AfQDBwT0AwcB9AH/ArwB/wH0AwcE9AMHAfQB/wG8AVEBDwHrAgcBvAEAAREEAAERA3oBtQGi + AwQD/wEEA/8DBAEKAfAB9ALzAfQG8wH0AvMB9ALwAfQC8wH0BvMB9ALzAfQB8AF6AVEBDwIAAf8BAAEP + AfcC/wGSAhECegG1AaIFBAH/AQQB/wUEAQoB8AH0DPMB9ALwAfQM8wH0AfAEegEAAf8BAAERBP8BvAEA + AnoBtQGiBQQB/wEEAf8FBAEKAfAB9AzzAfQC8AH0DPMB9AHwBK4BAAH/AgABEwG8A/8BAAKuAbUBog0E + AQoB8QH/BfQBAAFzAbwE9AH/AvEB/wX0AQABcwG8BPQB/wHxBK4BAAH/AQABEgEPAwAB/wEAAq4N/wH0 + AfMB7AHyAf8F9AEcAcMBUQEIA/QB/wLyAf8F9AEcAcMBUQEIA/QB/wHyBK4BAAH/AQ8BAAERAhIBAAH/ + AQACrgH/AaIC/wEEA/8CBAP/AgQB7AHyBv8BGwFYAXoBUQEIA/8C8gb/ARsBWAF6AVEBCAP/AfIErgEA + Av8BkgERAQABDwEAAf8BAAKuAf8BogL/AQQC/wEEBP8BBAH0AfMB7AHyB/8BGgFYAXoBUQEaAv8C8gf/ + ARoBWAF6AVEBGgL/AfIErgEAAQcD/wG8AeoBAAH/AQACrgH/AaIC/wEEAv8EBAH/AwQBCgHyCP8BGgFY + AXoBUQEaAf8C8gj/ARoBWAF6AVEBGgH/AfIErgERARMBBwb/AQACrgH/AaIBBAH/AQQC/wEEAv8BBAH/ + AQQB9AHzAQoB8gn/ARsBWAF6Ae0B8ALyCf8BGwFYAXoB7QHwAfIFrgERAQABEQGSBP8BAAKuAf8BhgL/ + AgQC/wIEA/8CBAHsAfMK8gHwAe8B9AHtAbwB8wryAfAB7wH0Ae0BvAeuAREBAAEPAesBvAH/AQACrgH/ + AYYL/wH0AfMB7AwAAfQBvAEWAW8MAAH0AbwBFgFvAQAJrgEPAQABEwERAa4BAAL/AbUL/wH0AQcNAAH0 + ARYB8w0AAfQBFgHzAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD/4EACP8BgAF/ + AY8F/wGAAT8BzAEBAcABDwHAAQ8BgAEHAYwBAQHAAQcBwAEHAYABBwGMAQEBwAEDAcABAwGAAQEC/wHA + AQMBwAEDAYABAQGPAf8BwAEDAcABAwGAAQEBjAEBAcABAwHAAQMBgAEBAcwBAQHAAQMBwAEDAYABAQGM + AQEBwAEDAcABAwGAAQEC/wHAAQMBwAEBAYABAQGPAf8BwAEDAcABAAHgAQEB3AEBAcABAwHAAQAB4AEB + AdwBAQHAAQMBwAEAAfgBAQGcAQEBwAEDAcABAQH4AQEF/wHzAYABAQIABP8EAAL/BgABCAEQXgAB/wHw + Af8B8AGAAQECAAH/AfgB/wH4Cw== @@ -1013,9 +995,6 @@ Releases - - Right-lick to edit release info - bnComboBoxRelease @@ -1026,8 +1005,11 @@ $this - 2 + 6 + + 116, 469 + 6, 6 @@ -1050,10 +1032,10 @@ $this - 3 + 8 - 6, 60 + 5, 313 552, 21 @@ -1071,19 +1053,244 @@ $this + 10 + + + 1 + + + Value + + + 400 + + + 0 + + + Name + + + 120 + + + 7, 87 + + + 550, 220 + + + 39 + + + False + + + listMetadata + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + Flat + + + 0 + + + NoControl + + + 373, 112 + + + 19, 17 + + + 40 + + + False + + + buttonTrackMetadata + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 4 - - True - + + 7, 60 + + + 80, 23 + + + 41 + + + Meta + + + ImageBeforeText + + + buttonMetadata + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + NoControl + + + 183, 60 + + + 80, 23 + + + 42 + + + V/A + + + ImageBeforeText + + + buttonVA + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + NoControl + + + 95, 60 + + + 80, 23 + + + 43 + + + Reload + + + ImageBeforeText + + + buttonReload + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + NoControl + + + 271, 60 + + + 80, 23 + + + 44 + + + Codepage + + + ImageBeforeText + + + buttonEncoding + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 7, 60 + + + 80, 23 + + + 45 + + + Tracks + + + ImageBeforeText + + + False + + + buttonTracks + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + 50 + + True + 6, 13 - 571, 481 + 571, 494 @@ -1548,30 +1755,6 @@ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - editToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - variousToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - fixEncodingToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - reloadToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - losslessOrNotBindingSource @@ -1668,6 +1851,24 @@ System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tracksBindingSource + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + columnHeaderValue + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + columnHeaderName + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + frmCUERipper diff --git a/CUERipper/frmProperties.Designer.cs b/CUERipper/frmProperties.Designer.cs deleted file mode 100644 index 1a1100d..0000000 --- a/CUERipper/frmProperties.Designer.cs +++ /dev/null @@ -1,184 +0,0 @@ -namespace CUETools.Processor -{ - partial class frmProperties - { - /// - /// 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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmProperties)); - this.textArtist = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.textTitle = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.textYear = new System.Windows.Forms.TextBox(); - this.textGenre = new System.Windows.Forms.TextBox(); - this.textCatalog = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.labelCD = new System.Windows.Forms.Label(); - this.textBoxDiscNumber = new System.Windows.Forms.TextBox(); - this.textBoxTotalDiscs = new System.Windows.Forms.TextBox(); - this.labelSlash = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // textArtist - // - resources.ApplyResources(this.textArtist, "textArtist"); - this.textArtist.Name = "textArtist"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // textTitle - // - resources.ApplyResources(this.textTitle, "textTitle"); - this.textTitle.Name = "textTitle"; - // - // button1 - // - this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; - resources.ApplyResources(this.button1, "button1"); - this.button1.Name = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.button2, "button2"); - this.button2.Name = "button2"; - this.button2.UseVisualStyleBackColor = true; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // textYear - // - resources.ApplyResources(this.textYear, "textYear"); - this.textYear.Name = "textYear"; - // - // textGenre - // - resources.ApplyResources(this.textGenre, "textGenre"); - this.textGenre.Name = "textGenre"; - // - // textCatalog - // - resources.ApplyResources(this.textCatalog, "textCatalog"); - this.textCatalog.Name = "textCatalog"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // labelCD - // - resources.ApplyResources(this.labelCD, "labelCD"); - this.labelCD.Name = "labelCD"; - // - // textBoxDiscNumber - // - resources.ApplyResources(this.textBoxDiscNumber, "textBoxDiscNumber"); - this.textBoxDiscNumber.Name = "textBoxDiscNumber"; - // - // textBoxTotalDiscs - // - resources.ApplyResources(this.textBoxTotalDiscs, "textBoxTotalDiscs"); - this.textBoxTotalDiscs.Name = "textBoxTotalDiscs"; - // - // labelSlash - // - resources.ApplyResources(this.labelSlash, "labelSlash"); - this.labelSlash.Name = "labelSlash"; - // - // frmProperties - // - this.AcceptButton = this.button1; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.button2; - this.Controls.Add(this.labelSlash); - this.Controls.Add(this.textBoxTotalDiscs); - this.Controls.Add(this.textBoxDiscNumber); - this.Controls.Add(this.labelCD); - this.Controls.Add(this.label5); - this.Controls.Add(this.label4); - this.Controls.Add(this.textCatalog); - this.Controls.Add(this.textGenre); - this.Controls.Add(this.textYear); - this.Controls.Add(this.label3); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.label2); - this.Controls.Add(this.textTitle); - this.Controls.Add(this.label1); - this.Controls.Add(this.textArtist); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Name = "frmProperties"; - this.Load += new System.EventHandler(this.frmProperties_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox textArtist; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox textTitle; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textYear; - private System.Windows.Forms.TextBox textGenre; - private System.Windows.Forms.TextBox textCatalog; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label labelCD; - private System.Windows.Forms.TextBox textBoxDiscNumber; - private System.Windows.Forms.TextBox textBoxTotalDiscs; - private System.Windows.Forms.Label labelSlash; - } -} \ No newline at end of file diff --git a/CUERipper/frmProperties.cs b/CUERipper/frmProperties.cs deleted file mode 100644 index 46c9bbb..0000000 --- a/CUERipper/frmProperties.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using CUETools.Processor; - -namespace CUETools.Processor -{ - public partial class frmProperties : Form - { - public frmProperties() - { - InitializeComponent(); - } - - private void frmProperties_Load(object sender, EventArgs e) - { - textArtist.Text = Metadata.Artist; - textTitle.Text = Metadata.Title; - textYear.Text = Metadata.Year; - textGenre.Text = Metadata.Genre; - textCatalog.Text = Metadata.Catalog; - textBoxDiscNumber.Text = Metadata.DiscNumber; - textBoxTotalDiscs.Text = Metadata.TotalDiscs; - } - - public CUEMetadata Metadata { get; set; } - - private void button1_Click(object sender, EventArgs e) - { - Metadata.Tracks.ForEach(track => track.Artist = track.Artist == Metadata.Artist ? textArtist.Text : track.Artist); - Metadata.Artist = textArtist.Text; - Metadata.Title = textTitle.Text; - Metadata.Year = textYear.Text; - Metadata.Genre = textGenre.Text; - Metadata.Catalog = textCatalog.Text; - Metadata.DiscNumber = textBoxDiscNumber.Text; - Metadata.TotalDiscs = textBoxTotalDiscs.Text; - } - } -} \ No newline at end of file diff --git a/CUERipper/frmProperties.de-DE.resx b/CUERipper/frmProperties.de-DE.resx deleted file mode 100644 index 92552a6..0000000 --- a/CUERipper/frmProperties.de-DE.resx +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Interpret - - - Titel - - - OK - - - Abbrechen - - - Jahr - - - Genre - - - Katalog - - - CD - - - / - - - CD-Informationen - - \ No newline at end of file diff --git a/CUERipper/frmProperties.resx b/CUERipper/frmProperties.resx deleted file mode 100644 index 3781f6e..0000000 --- a/CUERipper/frmProperties.resx +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Left, Right - - - - 48, 12 - - - 375, 20 - - - - 0 - - - textArtist - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 15 - - - True - - - 12, 15 - - - 30, 13 - - - 1 - - - Artist - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 14 - - - True - - - NoControl - - - 12, 41 - - - 27, 13 - - - 3 - - - Title - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12 - - - Top, Left, Right - - - 48, 38 - - - 375, 20 - - - 2 - - - textTitle - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 13 - - - 347, 90 - - - 75, 23 - - - 14 - - - Ok - - - button1 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - - - 266, 90 - - - 75, 23 - - - 15 - - - Cancel - - - button2 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - - - True - - - 12, 67 - - - 29, 13 - - - 6 - - - Year - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - - - 48, 64 - - - 67, 20 - - - 7 - - - textYear - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - 163, 64 - - - 100, 20 - - - 8 - - - textGenre - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - 318, 64 - - - 104, 20 - - - 9 - - - textCatalog - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - True - - - 121, 67 - - - 36, 13 - - - 10 - - - Genre - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - True - - - 269, 67 - - - 43, 13 - - - 11 - - - Catalog - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - True - - - 12, 95 - - - 22, 13 - - - 16 - - - CD - - - labelCD - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 48, 92 - - - 50, 20 - - - 17 - - - textBoxDiscNumber - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 125, 92 - - - 50, 20 - - - 18 - - - textBoxTotalDiscs - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - True - - - 107, 95 - - - 12, 13 - - - 19 - - - / - - - labelSlash - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 435, 127 - - - CenterParent - - - Release information - - - frmProperties - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CUETools.Processor/CUEMetadata.cs b/CUETools.Processor/CUEMetadata.cs new file mode 100644 index 0000000..b390ff2 --- /dev/null +++ b/CUETools.Processor/CUEMetadata.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Text; +using System.Xml.Serialization; +using CUETools.CDImage; + +namespace CUETools.Processor +{ + [Serializable] + public class CUEMetadata + { + public CUEMetadata() + { + TotalDiscs = ""; + DiscNumber = ""; + Year = ""; + Genre = ""; + Artist = ""; + Title = ""; + Catalog = ""; + Tracks = new List(); + } + + public CUEMetadata(CUEMetadata src) + : this(src.Id, src.Tracks.Count) + { + CopyMetadata(src); + } + + public CUEMetadata(string id, int AudioTracks) + : this() + { + Id = id; + for (int i = 0; i < AudioTracks; i++) + Tracks.Add(new CUETrackMetadata()); + } + + private static XmlSerializer serializer = new XmlSerializer(typeof(CUEMetadata)); + + public static string MetadataPath + { + get + { + string cache = System.IO.Path.Combine(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "CUE Tools"), "MetadataCache"); + if (!Directory.Exists(cache)) + Directory.CreateDirectory(cache); + return cache; + } + } + + public string Id { get; set; } + [DefaultValue("")] + public string TotalDiscs { get; set; } + [DefaultValue("")] + public string DiscNumber { get; set; } + [DefaultValue("")] + public string Year { get; set; } + [DefaultValue("")] + public string Genre { get; set; } + [DefaultValue("")] + public string Artist { get; set; } + [DefaultValue("")] + public string Title { get; set; } + [DefaultValue("")] + public string Catalog { get; set; } + public List Tracks { get; set; } + + public void Save() + { + TextWriter writer = new StreamWriter(Path.Combine(MetadataPath, Id + ".xml")); + serializer.Serialize(writer, this); + writer.Close(); + } + + public static CUEMetadata Load(string Id) + { + //serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode); + //serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute); + using (FileStream fs = new FileStream(Path.Combine(MetadataPath, Id + ".xml"), FileMode.Open)) + return serializer.Deserialize(fs) as CUEMetadata; + } + + public void CopyMetadata(CUEMetadata metadata) + { + // if (metadata.Tracks.Count != Tracks.Count) throw; + // Tracks.Count = metadata.Tracks.Count; + TotalDiscs = metadata.TotalDiscs; + DiscNumber = metadata.DiscNumber; + Year = metadata.Year; + Genre = metadata.Genre; + Artist = metadata.Artist; + Title = metadata.Title; + Catalog = metadata.Catalog; + for (int i = 0; i < Tracks.Count; i++) + { + Tracks[i].Title = metadata.Tracks[i].Title; + Tracks[i].Artist = metadata.Tracks[i].Artist; + Tracks[i].ISRC = metadata.Tracks[i].ISRC; + } + } + + public void FillFromMusicBrainz(MusicBrainz.Release release, int firstAudio) + { + string date = release.GetEvents().Count > 0 ? release.GetEvents()[0].Date : null; + Year = date == null ? "" : date.Substring(0, 4); + Artist = release.GetArtist(); + Title = release.GetTitle(); + // How to get Genre: http://mm.musicbrainz.org/ws/1/release/6fe1e218-2aee-49ac-94f0-7910ba2151df.html?type=xml&inc=tags + //Catalog = release.GetEvents().Count > 0 ? release.GetEvents()[0].Barcode : ""; + for (int i = 0; i < Tracks.Count; i++) + { + MusicBrainz.Track track = release.GetTracks()[i + firstAudio]; // !!!!!! - _toc.FirstAudio? + Tracks[i].Title = track.GetTitle(); + Tracks[i].Artist = track.GetArtist(); + } + } + + public void FillFromFreedb(Freedb.CDEntry cdEntry, int firstAudio) + { + Year = cdEntry.Year; + Genre = cdEntry.Genre; + Artist = cdEntry.Artist; + Title = cdEntry.Title; + for (int i = 0; i < Tracks.Count; i++) + { + Tracks[i].Title = cdEntry.Tracks[i + firstAudio].Title; + Tracks[i].Artist = cdEntry.Artist; + } + } + + private static string FreedbToEncoding(Encoding iso, Encoding def, ref bool changed, ref bool error, string s) + { + try + { + string res = def.GetString(iso.GetBytes(s)); + changed |= res != s; + return res; + } + catch // EncoderFallbackException, DecoderFallbackException + { + error = true; + } + return s; + } + + public bool FreedbToEncoding() + { + Encoding iso = Encoding.GetEncoding("iso-8859-1", new EncoderExceptionFallback(), new DecoderExceptionFallback()); + Encoding def = Encoding.GetEncoding(Encoding.Default.CodePage, new EncoderExceptionFallback(), new DecoderExceptionFallback()); + bool different = false; + bool error = false; + Artist = FreedbToEncoding(iso, def, ref different, ref error, Artist); + Title = FreedbToEncoding(iso, def, ref different, ref error, Title); + for (int i = 0; i < Tracks.Count; i++) + { + Tracks[i].Artist = FreedbToEncoding(iso, def, ref different, ref error, Tracks[i].Artist); + Tracks[i].Title = FreedbToEncoding(iso, def, ref different, ref error, Tracks[i].Title); + } + return different && !error; + } + + public void FreedbToVarious() + { + for (int i = 0; i < Tracks.Count; i++) + { + string title = Tracks[i].Title; + int idx = title.IndexOf(" / "); + if (idx < 0) idx = title.IndexOf(" - "); + if (idx >= 0) + { + Tracks[i].Title = title.Substring(idx + 3); + Tracks[i].Artist = title.Substring(0, idx); + } + else + { + Tracks[i].Artist = title; + } + } + } + + public void UpdateArtist(string artist) + { + for (int i = 0; i < Tracks.Count; i++) + if (Tracks[i].Artist == Artist) + Tracks[i].Artist = artist; + Artist = artist; + } + + public bool IsVarious() + { + bool isVarious = false; + for (int i = 0; i < Tracks.Count; i++) + if (Tracks[i].Artist != Artist) + isVarious = true; + return isVarious; + } + } + + public class CUETrackMetadata + { + public CUETrackMetadata() + { + Artist = ""; + Title = ""; + ISRC = ""; + } + [DefaultValue("")] + public string Artist { get; set; } + [DefaultValue("")] + public string Title { get; set; } + [DefaultValue("")] + public string ISRC { get; set; } + } + + public class CUEMetadataEntry + { + public CUEMetadata metadata { get; set; } + public CDImageLayout TOC { get; set; } + public string ImageKey { get; set; } + + public CUEMetadataEntry(CUEMetadata metadata, CDImageLayout TOC, string key) + { + this.metadata = metadata; + this.TOC = TOC; + this.ImageKey = key; + } + + public CUEMetadataEntry(CDImageLayout TOC, string key) + : this(new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks), TOC, key) + { + } + + public override string ToString() + { + return string.Format("{0}{1} - {2}", metadata.Year != "" ? metadata.Year + ": " : "", + metadata.Artist == "" ? "Unknown Artist" : metadata.Artist, + metadata.Title == "" ? "Unknown Title" : metadata.Title); + } + } +} diff --git a/CUETools.Processor/Processor.cs b/CUETools.Processor/Processor.cs index c9977de..e873179 100644 --- a/CUETools.Processor/Processor.cs +++ b/CUETools.Processor/Processor.cs @@ -2237,6 +2237,16 @@ string status = processor.Go(); try { _logFiles.Add(new CUEToolsSourceFile(logPath, new StreamReader(logPath, CUESheet.Encoding))); } catch { } } + else if (Path.GetExtension(pathIn).ToLower() == ".m3u") + { + string cueSheet = CUESheet.CreateDummyCUESheet(_config, pathIn); + sr = new StringReader(cueSheet); + _logFiles = new List(); + _defaultLog = Path.GetFileNameWithoutExtension(pathIn); + foreach (string logPath in Directory.GetFiles(_inputDir, "*.log")) + try { _logFiles.Add(new CUEToolsSourceFile(logPath, new StreamReader(logPath, CUESheet.Encoding))); } + catch { } + } else { string extension = Path.GetExtension(pathIn).ToLower(); @@ -2606,6 +2616,8 @@ string status = processor.Go(); _tracks[i].Artist = taglibMetadata.Tracks[i].Artist; if ((_config.overwriteCUEData || _tracks[i].Title == "") && taglibMetadata.Tracks[i].Title != "") _tracks[i].Title = taglibMetadata.Tracks[i].Title; + if (_tracks[i].Title == "" && _hasTrackFilenames) + _tracks[i].Title = Path.GetFileNameWithoutExtension(_trackFilenames[i]).TrimStart(" .-_0123456789".ToCharArray()); } } @@ -4778,7 +4790,8 @@ string status = processor.Go(); pathIn = Path.GetFullPath(pathIn); List fileGroups = CUESheet.ScanFolder(_config, Path.GetDirectoryName(pathIn)); FileGroupInfo fileGroup = fileGroups.Find(f => f.type == FileGroupInfoType.TrackFiles && f.Contains(pathIn)) ?? - fileGroups.Find(f => f.type == FileGroupInfoType.FileWithCUE && f.Contains(pathIn)); + fileGroups.Find(f => f.type == FileGroupInfoType.FileWithCUE && f.Contains(pathIn)) ?? + fileGroups.Find(f => f.type == FileGroupInfoType.M3UFile && f.Contains(pathIn)); return fileGroup == null ? null : CreateDummyCUESheet(_config, fileGroup); } @@ -5481,6 +5494,30 @@ string status = processor.Go(); fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.CUESheetFile)); continue; } + if (ext == ".m3u") + { + FileGroupInfo m3uGroup = new FileGroupInfo(file, FileGroupInfoType.M3UFile); + using (StreamReader m3u = new StreamReader(file.FullName)) + { + do + { + string line = m3u.ReadLine(); + if (line == null) break; + if (line[0] == '#') continue; + line = Path.Combine(Path.GetDirectoryName(file.FullName), line); + if (File.Exists(line)) + m3uGroup.files.Add(new FileInfo(line)); + else + { + m3uGroup = null; + break; + } + } while (true); + }; + if (m3uGroup != null) + fileGroups.Add(m3uGroup); + continue; + } if (ext == ".zip") { fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.Archive)); @@ -5514,6 +5551,7 @@ string status = processor.Go(); if (ext.StartsWith(".") && _config.formats.TryGetValue(ext.Substring(1), out fmt) && fmt.allowLossless) { uint disc = 0; + uint number = 0; string album = null; bool cueFound = false; TagLib.UserDefined.AdditionalFileTypes.Config = _config; @@ -5523,6 +5561,7 @@ string status = processor.Go(); TagLib.File fileInfo = TagLib.File.Create(fileAbsraction); disc = fileInfo.Tag.Disc; album = fileInfo.Tag.Album; + number = fileInfo.Tag.Track; cueFound = fmt.allowEmbed && Tagging.Analyze(fileInfo).Get("CUESHEET") != null; } catch { } @@ -5547,6 +5586,7 @@ string status = processor.Go(); if (groupFound != null) { groupFound.files.Add(file); + if (number > 0) groupFound.numbers.Add(file, number); } else { @@ -5555,11 +5595,18 @@ string status = processor.Go(); groupFound.album = album; groupFound.files.Add(file); fileGroups.Add(groupFound); - // TODO: tracks must be sorted according to tracknumer (or filename if missing) + if (number > 0) groupFound.numbers.Add(file, number); } } } - fileGroups.RemoveAll(new Predicate(FileGroupInfo.IsExcessive)); + fileGroups.RemoveAll(group => group.type == FileGroupInfoType.TrackFiles && group.files.Count < 2); + // tracks must be sorted according to tracknumer (or filename if missing) + foreach (FileGroupInfo group in fileGroups) + if (group.type == FileGroupInfoType.TrackFiles) + { + group.files.Sort(group.CompareNumbers); + group.numbers = null; + } return fileGroups; } @@ -5718,6 +5765,7 @@ string status = processor.Go(); Folder, Archive, CUESheetFile, + M3UFile, FileWithCUE, TrackFiles } @@ -5725,6 +5773,7 @@ string status = processor.Go(); public class FileGroupInfo { public List files; + public Dictionary numbers; public FileSystemInfo main; public FileGroupInfoType type; public uint discNo; @@ -5735,11 +5784,16 @@ string status = processor.Go(); main = _main; type = _type; files = new List(); + numbers = new Dictionary(); } - public static bool IsExcessive(FileGroupInfo group) + public int CompareNumbers(FileSystemInfo a, FileSystemInfo b) { - return group.type == FileGroupInfoType.TrackFiles && group.files.Count < 2; + if (numbers.ContainsKey(a) && numbers.ContainsKey(b)) + return Comparer.Default.Compare(numbers[a], numbers[b]); + if (!numbers.ContainsKey(a) && !numbers.ContainsKey(b)) + return Comparer.Default.Compare(a.FullName, b.FullName); + return Comparer.Default.Compare(numbers.ContainsKey(a), numbers.ContainsKey(b)); } public bool Contains(string pathIn) diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 414d7aa..79ff660 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -585,7 +585,7 @@ namespace JDP { if (fileGroup.type == FileGroupInfoType.CUESheetFile) throw new Exception("already contains a cue sheet"); foreach (FileGroupInfo fileGroup in fileGroups) - if (fileGroup.type == FileGroupInfoType.TrackFiles || fileGroup.type == FileGroupInfoType.FileWithCUE) + if (fileGroup.type == FileGroupInfoType.TrackFiles || fileGroup.type == FileGroupInfoType.FileWithCUE || fileGroup.type == FileGroupInfoType.M3UFile) _batchPaths.Insert(directoriesFound + (++cueSheetsFound), fileGroup.main.FullName); } else if (File.Exists(pathIn)) @@ -593,7 +593,8 @@ namespace JDP { pathIn = Path.GetFullPath(pathIn); List fileGroups = CUESheet.ScanFolder(_profile._config, Path.GetDirectoryName(pathIn)); FileGroupInfo fileGroup = fileGroups.Find(f => f.type == FileGroupInfoType.TrackFiles && f.Contains(pathIn)) ?? - fileGroups.Find(f => f.type == FileGroupInfoType.FileWithCUE && f.Contains(pathIn)); + fileGroups.Find(f => f.type == FileGroupInfoType.FileWithCUE && f.Contains(pathIn)) ?? + fileGroups.Find(f => f.type == FileGroupInfoType.M3UFile && f.Contains(pathIn)); if (fileGroup == null) throw new Exception("doesn't seem to be part of an album"); string cueSheetContents;