2009-01-15 14:21:46 +00:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Text;
|
2010-04-28 08:12:37 +00:00
|
|
|
using System.IO;
|
2009-01-15 14:21:46 +00:00
|
|
|
using System.Windows.Forms;
|
2009-02-27 14:41:55 +00:00
|
|
|
using CUETools.CDImage;
|
2009-01-17 04:09:38 +00:00
|
|
|
using CUETools.Processor;
|
|
|
|
|
using MusicBrainz;
|
|
|
|
|
using Freedb;
|
2009-01-15 14:21:46 +00:00
|
|
|
|
|
|
|
|
namespace JDP
|
|
|
|
|
{
|
|
|
|
|
public partial class frmChoice : Form
|
|
|
|
|
{
|
|
|
|
|
public frmChoice()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
2009-01-17 04:09:38 +00:00
|
|
|
|
|
|
|
|
public CUESheet CUE;
|
|
|
|
|
|
2009-02-22 07:47:56 +00:00
|
|
|
private void frmChoice_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
buttonOk.Select();
|
2009-02-22 07:47:56 +00:00
|
|
|
}
|
|
|
|
|
|
2010-02-06 23:17:07 +00:00
|
|
|
private void AddItem(object i)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
if (i is CUEToolsSourceFile)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
CUEToolsSourceFile sf = i as CUEToolsSourceFile;
|
|
|
|
|
ListViewItem item = new ListViewItem(sf.path, 0);
|
|
|
|
|
item.Tag = sf;
|
|
|
|
|
listChoices.Items.Add(item);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
2010-04-28 08:12:37 +00:00
|
|
|
else if (i is TagLib.IPicture)
|
|
|
|
|
{
|
|
|
|
|
TagLib.IPicture pic = i as TagLib.IPicture;
|
|
|
|
|
ListViewItem item = new ListViewItem(pic.Description, -1);
|
|
|
|
|
item.Tag = pic;
|
|
|
|
|
listChoices.Items.Add(item);
|
|
|
|
|
}
|
2009-03-22 16:59:05 +00:00
|
|
|
else if (i is MusicBrainz.Release)
|
|
|
|
|
{
|
|
|
|
|
ReleaseInfo r = new ReleaseInfo(CUE, i as MusicBrainz.Release);
|
2010-02-06 23:17:07 +00:00
|
|
|
ListViewItem item = new ListViewItem(r.Text, 2);
|
|
|
|
|
item.Tag = r;
|
|
|
|
|
listChoices.Items.Add(item);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
else if (i is Freedb.CDEntry)
|
|
|
|
|
{
|
|
|
|
|
ReleaseInfo r = new ReleaseInfo(CUE, i as Freedb.CDEntry);
|
2010-02-06 23:17:07 +00:00
|
|
|
ListViewItem item = new ListViewItem(r.Text, 1);
|
|
|
|
|
item.Tag = r;
|
|
|
|
|
listChoices.Items.Add(item);
|
|
|
|
|
|
|
|
|
|
// check if the entry contains non-iso characters,
|
|
|
|
|
// and add a second one if it does
|
|
|
|
|
ReleaseInfo r2 = new ReleaseInfo(CUE, i as Freedb.CDEntry);
|
|
|
|
|
r2.FixEncoding();
|
|
|
|
|
if (!r.Equals(r2))
|
|
|
|
|
{
|
|
|
|
|
item = new ListViewItem(r2.Text, 1);
|
|
|
|
|
item.Tag = r2;
|
|
|
|
|
listChoices.Items.Add(item);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (i is CUESheet)
|
|
|
|
|
{
|
|
|
|
|
ReleaseInfo r = new ReleaseInfo(CUE);
|
|
|
|
|
ListViewItem item = new ListViewItem(r.Text, 3);
|
|
|
|
|
item.Tag = r;
|
|
|
|
|
listChoices.Items.Add(item);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ListViewItem item = new ListViewItem(i.ToString(), -1);
|
|
|
|
|
item.Tag = i;
|
|
|
|
|
listChoices.Items.Add(item);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-22 07:47:56 +00:00
|
|
|
public IEnumerable<object> Choices
|
2009-01-17 04:09:38 +00:00
|
|
|
{
|
2009-02-22 07:47:56 +00:00
|
|
|
set
|
2009-01-17 04:09:38 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
if (CUE != null)
|
|
|
|
|
AddItem(CUE);
|
|
|
|
|
foreach (object i in value)
|
|
|
|
|
AddItem(i);
|
2009-03-22 16:59:05 +00:00
|
|
|
if (CUE != null)
|
2009-01-17 04:09:38 +00:00
|
|
|
{
|
2009-02-22 07:47:56 +00:00
|
|
|
textBox1.Hide();
|
2010-04-28 08:12:37 +00:00
|
|
|
pictureBox1.Hide();
|
2009-02-22 07:47:56 +00:00
|
|
|
listTracks.Show();
|
2010-02-06 23:17:07 +00:00
|
|
|
listMetadata.Show();
|
2010-04-28 08:12:37 +00:00
|
|
|
tableLayoutPanel1.SetRowSpan(listChoices, 3);
|
2010-02-06 23:17:07 +00:00
|
|
|
tableLayoutPanel1.PerformLayout();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2010-04-28 08:12:37 +00:00
|
|
|
textBox1.Show();
|
|
|
|
|
pictureBox1.Hide();
|
2010-02-06 23:17:07 +00:00
|
|
|
listTracks.Hide();
|
2010-04-28 08:12:37 +00:00
|
|
|
listMetadata.Hide();
|
|
|
|
|
tableLayoutPanel1.SetRowSpan(textBox1, 4);
|
2010-02-06 23:17:07 +00:00
|
|
|
//tableLayoutPanel1.RowStyles[2].Height = 0;
|
|
|
|
|
//tableLayoutPanel1.RowStyles[3].Height = 0;
|
|
|
|
|
tableLayoutPanel1.PerformLayout();
|
2009-01-17 04:09:38 +00:00
|
|
|
}
|
2009-02-22 07:47:56 +00:00
|
|
|
if (listChoices.Items.Count > 0)
|
|
|
|
|
listChoices.Items[0].Selected = true;
|
2009-01-17 04:09:38 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-22 07:47:56 +00:00
|
|
|
public int ChosenIndex
|
2009-01-17 04:09:38 +00:00
|
|
|
{
|
2009-02-22 07:47:56 +00:00
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return listChoices.SelectedItems.Count > 0 ? listChoices.SelectedItems[0].Index : -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public object ChosenObject
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return listChoices.SelectedItems.Count > 0 ? listChoices.SelectedItems[0].Tag : null;
|
|
|
|
|
}
|
2009-01-17 04:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2010-02-06 23:17:07 +00:00
|
|
|
private ReleaseInfo ChosenRelease
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
object o = ChosenObject;
|
|
|
|
|
return o != null && o is ReleaseInfo ? o as ReleaseInfo : null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ListViewItem ChosenItem
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return listChoices.SelectedItems.Count > 0 ? listChoices.SelectedItems[0] : null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-17 04:09:38 +00:00
|
|
|
private void frmChoice_FormClosing(object sender, FormClosingEventArgs e)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
ReleaseInfo ri = ChosenRelease;
|
|
|
|
|
if (e.CloseReason != CloseReason.None || DialogResult != DialogResult.OK || ri == null || CUE == null)
|
2009-01-17 04:09:38 +00:00
|
|
|
return;
|
2010-02-06 23:17:07 +00:00
|
|
|
CUE.CopyMetadata(ri.metadata);
|
2009-02-22 07:47:56 +00:00
|
|
|
}
|
|
|
|
|
|
2009-02-27 14:41:55 +00:00
|
|
|
private void AutoResizeTracks()
|
|
|
|
|
{
|
|
|
|
|
listTracks.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
|
|
|
listTracks.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
|
|
|
listTracks.Columns[3].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
|
|
|
int widthAvailable = listTracks.Width - listTracks.Columns[1].Width - listTracks.Columns[2].Width - listTracks.Columns[3].Width - listTracks.Padding.Horizontal - 24;
|
|
|
|
|
if (listTracks.Columns[0].Width < widthAvailable)
|
|
|
|
|
listTracks.Columns[0].Width = widthAvailable;
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-22 07:47:56 +00:00
|
|
|
private void listChoices_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
object item = ChosenObject;
|
2010-04-28 08:12:37 +00:00
|
|
|
if (item != null && item is TagLib.IPicture)
|
|
|
|
|
{
|
|
|
|
|
TagLib.IPicture picture = item as TagLib.IPicture;
|
|
|
|
|
using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count))
|
|
|
|
|
try { pictureBox1.Image = Image.FromStream(imageStream); }
|
|
|
|
|
catch { }
|
|
|
|
|
textBox1.Hide();
|
|
|
|
|
pictureBox1.Show();
|
|
|
|
|
tableLayoutPanel1.SetRowSpan(pictureBox1, 4);
|
|
|
|
|
}
|
|
|
|
|
else if (item != null && item is CUEToolsSourceFile)
|
2009-02-27 14:41:55 +00:00
|
|
|
{
|
2009-03-22 16:59:05 +00:00
|
|
|
textBox1.Text = (item as CUEToolsSourceFile).contents.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
|
2009-02-22 07:47:56 +00:00
|
|
|
}
|
2009-03-22 16:59:05 +00:00
|
|
|
else if (item != null && item is ReleaseInfo)
|
2009-02-22 07:47:56 +00:00
|
|
|
{
|
2009-03-22 16:59:05 +00:00
|
|
|
ReleaseInfo r = (item as ReleaseInfo);
|
2009-02-22 07:47:56 +00:00
|
|
|
listTracks.Items.Clear();
|
2010-02-06 23:17:07 +00:00
|
|
|
foreach (TrackInfo track in r.metadata.Tracks)
|
2009-02-22 07:47:56 +00:00
|
|
|
{
|
|
|
|
|
listTracks.Items.Add(new ListViewItem(new string[] {
|
2010-02-06 23:17:07 +00:00
|
|
|
track.Title,
|
2009-02-22 07:47:56 +00:00
|
|
|
(listTracks.Items.Count + 1).ToString(),
|
2010-02-06 23:17:07 +00:00
|
|
|
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].StartMSF,
|
|
|
|
|
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].LengthMSF
|
2009-02-22 07:47:56 +00:00
|
|
|
}));
|
|
|
|
|
}
|
2009-02-27 14:41:55 +00:00
|
|
|
AutoResizeTracks();
|
2010-02-06 23:17:07 +00:00
|
|
|
listMetadata.Items.Clear();
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Artist, "Artist" }));
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Title, "Album" }));
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Year, "Date" }));
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Genre, "Genre" }));
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.DiscNumber, "Disc Number" }));
|
|
|
|
|
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.TotalDiscs, "Total Discs" }));
|
2009-02-22 07:47:56 +00:00
|
|
|
}
|
2009-01-17 04:09:38 +00:00
|
|
|
else
|
2009-02-22 07:47:56 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
listMetadata.Items.Clear();
|
2009-02-22 07:47:56 +00:00
|
|
|
listTracks.Items.Clear();
|
|
|
|
|
textBox1.Text = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listTracks_DoubleClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
listTracks.FocusedItem.BeginEdit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listTracks_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.F2)
|
|
|
|
|
listTracks.FocusedItem.BeginEdit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listTracks_BeforeLabelEdit(object sender, LabelEditEventArgs e)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
if (ChosenRelease == null)
|
2009-02-22 07:47:56 +00:00
|
|
|
{
|
|
|
|
|
e.CancelEdit = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
ReleaseInfo ri = ChosenRelease;
|
|
|
|
|
if (ri != null && e.Label != null)
|
|
|
|
|
ri.metadata.Tracks[e.Item].Title = e.Label;
|
2009-02-22 07:47:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listTracks_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.Enter)
|
|
|
|
|
{
|
|
|
|
|
if (listTracks.FocusedItem.Index + 1 < listTracks.Items.Count) // && e.editing
|
|
|
|
|
{
|
|
|
|
|
listTracks.FocusedItem.Selected = false;
|
|
|
|
|
listTracks.FocusedItem = listTracks.Items[listTracks.FocusedItem.Index + 1];
|
|
|
|
|
listTracks.FocusedItem.Selected = true;
|
|
|
|
|
listTracks.FocusedItem.BeginEdit();
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-01-17 04:09:38 +00:00
|
|
|
}
|
2009-03-22 16:59:05 +00:00
|
|
|
|
2010-02-06 23:17:07 +00:00
|
|
|
private void listMetadata_DoubleClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
listMetadata.FocusedItem.BeginEdit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listMetadata_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.F2)
|
|
|
|
|
listMetadata.FocusedItem.BeginEdit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listMetadata_AfterLabelEdit(object sender, LabelEditEventArgs e)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
ListViewItem item = ChosenItem;
|
|
|
|
|
ReleaseInfo r = ChosenRelease;
|
|
|
|
|
if (e.Label != null && item != null && r != null)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
switch (e.Item)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
case 0:
|
|
|
|
|
foreach (TrackInfo track in r.metadata.Tracks)
|
|
|
|
|
if (track.Artist == r.metadata.Artist)
|
|
|
|
|
track.Artist = e.Label;
|
|
|
|
|
r.metadata.Artist = e.Label;
|
|
|
|
|
break;
|
|
|
|
|
case 1: r.metadata.Title = e.Label; break;
|
|
|
|
|
case 2: r.metadata.Year = e.Label; break;
|
|
|
|
|
case 3: r.metadata.Genre = e.Label; break;
|
|
|
|
|
case 4: r.metadata.DiscNumber = e.Label; break;
|
|
|
|
|
case 5: r.metadata.TotalDiscs = e.Label; break;
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
2010-02-06 23:17:07 +00:00
|
|
|
item.Text = r.Text;
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
2010-04-28 08:12:37 +00:00
|
|
|
|
|
|
|
|
private void pictureBox1_DoubleClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
pictureBox1.SizeMode = pictureBox1.SizeMode == PictureBoxSizeMode.Zoom ?
|
|
|
|
|
PictureBoxSizeMode.CenterImage : PictureBoxSizeMode.Zoom;
|
|
|
|
|
}
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sealed class ReleaseInfo
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
public CUESheet metadata;
|
|
|
|
|
|
|
|
|
|
public ReleaseInfo(CUESheet cue)
|
|
|
|
|
{
|
|
|
|
|
metadata = new CUESheet(cue.Config);
|
|
|
|
|
metadata.TOC = cue.TOC;
|
|
|
|
|
metadata.CopyMetadata(cue);
|
|
|
|
|
}
|
2009-03-22 16:59:05 +00:00
|
|
|
|
|
|
|
|
public ReleaseInfo(CUESheet cue, Freedb.CDEntry release)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
metadata = new CUESheet(cue.Config);
|
|
|
|
|
metadata.TOC = cue.TocFromCDEntry(release);
|
|
|
|
|
metadata.FillFromFreedb(release);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ReleaseInfo(CUESheet cue, MusicBrainz.Release release)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
metadata = new CUESheet(cue.Config);
|
|
|
|
|
metadata.TOC = cue.TOC;
|
|
|
|
|
metadata.FillFromMusicBrainz(release);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string FixEncoding(string src)
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
Encoding iso = Encoding.GetEncoding("iso-8859-1");
|
2009-03-22 16:59:05 +00:00
|
|
|
return Encoding.Default.GetString(iso.GetBytes(src));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string Text
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
return string.Format("{0}: {1} - {2}",
|
|
|
|
|
metadata.Year == "" ? "YYYY" : metadata.Year,
|
|
|
|
|
metadata.Artist == "" ? "Unknown Artist" : metadata.Artist,
|
|
|
|
|
metadata.Title == "" ? "Unknown Title" : metadata.Title);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void FixEncoding()
|
|
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
metadata.Artist = FixEncoding(metadata.Artist);
|
|
|
|
|
metadata.Title = FixEncoding(metadata.Title);
|
|
|
|
|
foreach (TrackInfo track in metadata.Tracks)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
track.Title = FixEncoding(track.Title);
|
|
|
|
|
track.Artist = FixEncoding(track.Artist);
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-02-06 23:17:07 +00:00
|
|
|
public bool Equals(ReleaseInfo r)
|
2009-03-22 16:59:05 +00:00
|
|
|
{
|
2010-02-06 23:17:07 +00:00
|
|
|
bool equal = metadata.Title == r.metadata.Title && metadata.Artist == r.metadata.Artist;
|
|
|
|
|
for (int t = 0; t < metadata.TrackCount; t++)
|
|
|
|
|
if (r.metadata.Tracks[t].Title != metadata.Tracks[t].Title || r.metadata.Tracks[t].Artist != metadata.Tracks[t].Artist)
|
|
|
|
|
equal = false;
|
|
|
|
|
return equal;
|
2009-03-22 16:59:05 +00:00
|
|
|
}
|
2009-01-15 14:21:46 +00:00
|
|
|
}
|
|
|
|
|
}
|