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;