mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
reorganizing a bit
This commit is contained in:
@@ -23,60 +23,82 @@ namespace JDP
|
||||
|
||||
private void frmChoice_Load(object sender, EventArgs e)
|
||||
{
|
||||
button1.Select();
|
||||
buttonOk.Select();
|
||||
}
|
||||
|
||||
private ListViewItem ToItem(object i)
|
||||
private void AddItem(object i)
|
||||
{
|
||||
string text = "";
|
||||
int image = -1;
|
||||
if (i is string)
|
||||
text = i as string;
|
||||
else if (i is CUEToolsSourceFile)
|
||||
if (i is CUEToolsSourceFile)
|
||||
{
|
||||
text = (i as CUEToolsSourceFile).path;
|
||||
image = 0;
|
||||
CUEToolsSourceFile sf = i as CUEToolsSourceFile;
|
||||
ListViewItem item = new ListViewItem(sf.path, 0);
|
||||
item.Tag = sf;
|
||||
listChoices.Items.Add(item);
|
||||
}
|
||||
else if (i is MusicBrainz.Release)
|
||||
{
|
||||
ReleaseInfo r = new ReleaseInfo(CUE, i as MusicBrainz.Release);
|
||||
text = r.Text;
|
||||
image = 2;
|
||||
i = r;
|
||||
ListViewItem item = new ListViewItem(r.Text, 2);
|
||||
item.Tag = r;
|
||||
listChoices.Items.Add(item);
|
||||
}
|
||||
else if (i is Freedb.CDEntry)
|
||||
{
|
||||
ReleaseInfo r = new ReleaseInfo(CUE, i as Freedb.CDEntry);
|
||||
text = r.Text;
|
||||
image = 1;
|
||||
i = r;
|
||||
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);
|
||||
}
|
||||
ListViewItem item = new ListViewItem(text, image);
|
||||
item.Tag = i;
|
||||
return item;
|
||||
}
|
||||
|
||||
public IEnumerable<object> Choices
|
||||
{
|
||||
set
|
||||
{
|
||||
foreach(object i in value)
|
||||
{
|
||||
ListViewItem item = ToItem(i);
|
||||
listChoices.Items.Add(item);
|
||||
}
|
||||
if (CUE != null)
|
||||
AddItem(CUE);
|
||||
foreach (object i in value)
|
||||
AddItem(i);
|
||||
if (CUE != null)
|
||||
{
|
||||
string text = String.Format("{0}: {1} - {2}",
|
||||
CUE.Year == "" ? "YYYY" : CUE.Year,
|
||||
CUE.Artist == "" ? "Unknown Artist" : CUE.Artist,
|
||||
CUE.Title == "" ? "Unknown Title" : CUE.Title);
|
||||
ListViewItem item = new ListViewItem(text, 3);
|
||||
item.Tag = CUE;
|
||||
listChoices.Items.Insert(0, item);
|
||||
textBox1.Hide();
|
||||
listTracks.Show();
|
||||
btnEdit.Show();
|
||||
listMetadata.Show();
|
||||
tableLayoutPanel1.SetRowSpan(listChoices, 2);
|
||||
tableLayoutPanel1.PerformLayout();
|
||||
}
|
||||
else
|
||||
{
|
||||
listTracks.Hide();
|
||||
tableLayoutPanel1.SetRowSpan(textBox1, 3);
|
||||
//tableLayoutPanel1.RowStyles[2].Height = 0;
|
||||
//tableLayoutPanel1.RowStyles[3].Height = 0;
|
||||
tableLayoutPanel1.PerformLayout();
|
||||
}
|
||||
if (listChoices.Items.Count > 0)
|
||||
listChoices.Items[0].Selected = true;
|
||||
@@ -99,12 +121,29 @@ namespace JDP
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
private void frmChoice_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
object item = ChosenObject;
|
||||
if (e.CloseReason != CloseReason.None || DialogResult != DialogResult.OK || item == null || !(item is ReleaseInfo))
|
||||
ReleaseInfo ri = ChosenRelease;
|
||||
if (e.CloseReason != CloseReason.None || DialogResult != DialogResult.OK || ri == null || CUE == null)
|
||||
return;
|
||||
(item as ReleaseInfo).FillCUE();
|
||||
CUE.CopyMetadata(ri.metadata);
|
||||
}
|
||||
|
||||
private void AutoResizeTracks()
|
||||
@@ -123,84 +162,37 @@ namespace JDP
|
||||
if (item != null && item is CUEToolsSourceFile)
|
||||
{
|
||||
textBox1.Text = (item as CUEToolsSourceFile).contents.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
|
||||
chkFixEncoding.Visible = false;
|
||||
}
|
||||
else if (item != null && item is ReleaseInfo)
|
||||
{
|
||||
ReleaseInfo r = (item as ReleaseInfo);
|
||||
listTracks.Items.Clear();
|
||||
if (r.musicbrainz != null)
|
||||
foreach (MusicBrainz.Track track in r.musicbrainz.GetTracks())
|
||||
{
|
||||
listTracks.Items.Add(new ListViewItem(new string[] {
|
||||
track.GetTitle(),
|
||||
(listTracks.Items.Count + 1).ToString(),
|
||||
CUE == null ? "" : CUE.TOC[listTracks.Items.Count + CUE.TOC.FirstAudio].StartMSF,
|
||||
CUE == null ? "" : CUE.TOC[listTracks.Items.Count + CUE.TOC.FirstAudio].LengthMSF
|
||||
}));
|
||||
}
|
||||
if (r.freedb != null)
|
||||
for (int i = 0; i < r.freedb.Tracks.Count; i++)
|
||||
{
|
||||
listTracks.Items.Add(new ListViewItem(new string[] {
|
||||
r.freedb.Tracks[i].Title,
|
||||
(i + 1).ToString(),
|
||||
CDImageLayout.TimeToString((uint)r.freedb.Tracks[i].FrameOffset - 150),
|
||||
CDImageLayout.TimeToString((i + 1 < r.freedb.Tracks.Count) ? (uint) (r.freedb.Tracks[i + 1].FrameOffset - r.freedb.Tracks[i].FrameOffset) :
|
||||
(CUE == null || i >= CUE.TOC.TrackCount) ? 0 : CUE.TOC[i + CUE.TOC.FirstAudio].Length)
|
||||
}));
|
||||
}
|
||||
AutoResizeTracks();
|
||||
chkFixEncoding.Visible = r.freedb != null;
|
||||
chkFixEncoding.Checked = r.freedb_latin1 != null;
|
||||
}
|
||||
else if (item != null && item is CUESheet)
|
||||
{
|
||||
CUESheet cueSheet = item as CUESheet;
|
||||
listTracks.Items.Clear();
|
||||
foreach (TrackInfo track in cueSheet.Tracks)
|
||||
foreach (TrackInfo track in r.metadata.Tracks)
|
||||
{
|
||||
listTracks.Items.Add(new ListViewItem(new string[] {
|
||||
track.Title,
|
||||
track.Title,
|
||||
(listTracks.Items.Count + 1).ToString(),
|
||||
CUE == null ? "" : CUE.TOC[listTracks.Items.Count + 1].StartMSF,
|
||||
CUE == null ? "" : CUE.TOC[listTracks.Items.Count + 1].LengthMSF
|
||||
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].StartMSF,
|
||||
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].LengthMSF
|
||||
}));
|
||||
}
|
||||
AutoResizeTracks();
|
||||
chkFixEncoding.Visible = false;
|
||||
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" }));
|
||||
}
|
||||
else
|
||||
{
|
||||
listMetadata.Items.Clear();
|
||||
listTracks.Items.Clear();
|
||||
chkFixEncoding.Visible = false;
|
||||
textBox1.Text = "";
|
||||
}
|
||||
}
|
||||
|
||||
private void btnEdit_Click(object sender, EventArgs e)
|
||||
{
|
||||
object item = ChosenObject;
|
||||
if (item == null || CUE == null)
|
||||
return;
|
||||
if (item is ReleaseInfo)
|
||||
(item as ReleaseInfo).FillCUE();
|
||||
else if (!(item is CUESheet))
|
||||
return;
|
||||
listChoices.Items[0].Selected = true;
|
||||
listChoices.Items[0].Text = String.Format("{0}: {1} - {2}",
|
||||
CUE.Year == "" ? "YYYY" : CUE.Year,
|
||||
CUE.Artist == "" ? "Unknown Artist" : CUE.Artist,
|
||||
CUE.Title == "" ? "Unknown Title" : CUE.Title);
|
||||
frmProperties frm = new frmProperties();
|
||||
frm.CUE = CUE;
|
||||
if (frm.ShowDialog(this) == DialogResult.OK)
|
||||
listChoices.Items[0].Text = String.Format("{0}: {1} - {2}",
|
||||
CUE.Year == "" ? "YYYY" : CUE.Year,
|
||||
CUE.Artist == "" ? "Unknown Artist" : CUE.Artist,
|
||||
CUE.Title == "" ? "Unknown Title" : CUE.Title);
|
||||
}
|
||||
|
||||
private void listTracks_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
listTracks.FocusedItem.BeginEdit();
|
||||
@@ -214,8 +206,7 @@ namespace JDP
|
||||
|
||||
private void listTracks_BeforeLabelEdit(object sender, LabelEditEventArgs e)
|
||||
{
|
||||
object item = ChosenObject;
|
||||
if (item == null || !(item is CUESheet))
|
||||
if (ChosenRelease == null)
|
||||
{
|
||||
e.CancelEdit = true;
|
||||
return;
|
||||
@@ -224,10 +215,9 @@ namespace JDP
|
||||
|
||||
private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e)
|
||||
{
|
||||
if (e.Label != null)
|
||||
{
|
||||
CUE.Tracks[e.Item].Title = e.Label;
|
||||
}
|
||||
ReleaseInfo ri = ChosenRelease;
|
||||
if (ri != null && e.Label != null)
|
||||
ri.metadata.Tracks[e.Item].Title = e.Label;
|
||||
}
|
||||
|
||||
private void listTracks_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
||||
@@ -244,51 +234,70 @@ namespace JDP
|
||||
}
|
||||
}
|
||||
|
||||
private void chkFixEncoding_CheckedChanged(object sender, EventArgs e)
|
||||
private void listMetadata_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
if (listChoices.SelectedItems.Count > 0)
|
||||
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)
|
||||
{
|
||||
ListViewItem item = ChosenItem;
|
||||
ReleaseInfo r = ChosenRelease;
|
||||
if (e.Label != null && item != null && r != null)
|
||||
{
|
||||
ListViewItem item = listChoices.Items[listChoices.SelectedItems[0].Index];
|
||||
if (item.Tag is ReleaseInfo)
|
||||
switch (e.Item)
|
||||
{
|
||||
ReleaseInfo r = item.Tag as ReleaseInfo;
|
||||
if ((r.freedb_latin1 == null) == chkFixEncoding.Checked)
|
||||
{
|
||||
r.FixEncoding();
|
||||
item.Text = r.Text;
|
||||
for (int i = 0; i < r.freedb.Tracks.Count; i++)
|
||||
listTracks.Items[i].Text = r.freedb.Tracks[i].Title;
|
||||
}
|
||||
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;
|
||||
}
|
||||
item.Text = r.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sealed class ReleaseInfo
|
||||
{
|
||||
public Freedb.CDEntry freedb_latin1;
|
||||
public Freedb.CDEntry freedb;
|
||||
public MusicBrainz.Release musicbrainz;
|
||||
public CUESheet CUE;
|
||||
private Encoding iso;
|
||||
public CUESheet metadata;
|
||||
|
||||
public ReleaseInfo(CUESheet cue)
|
||||
{
|
||||
metadata = new CUESheet(cue.Config);
|
||||
metadata.TOC = cue.TOC;
|
||||
metadata.CopyMetadata(cue);
|
||||
}
|
||||
|
||||
public ReleaseInfo(CUESheet cue, Freedb.CDEntry release)
|
||||
{
|
||||
CUE = cue;
|
||||
iso = Encoding.GetEncoding("iso-8859-1");
|
||||
freedb_latin1 = null;
|
||||
freedb = release;
|
||||
metadata = new CUESheet(cue.Config);
|
||||
metadata.TOC = cue.TocFromCDEntry(release);
|
||||
metadata.FillFromFreedb(release);
|
||||
}
|
||||
|
||||
public ReleaseInfo(CUESheet cue, MusicBrainz.Release release)
|
||||
{
|
||||
CUE = cue;
|
||||
iso = Encoding.GetEncoding("iso-8859-1");
|
||||
musicbrainz = release;
|
||||
metadata = new CUESheet(cue.Config);
|
||||
metadata.TOC = cue.TOC;
|
||||
metadata.FillFromMusicBrainz(release);
|
||||
}
|
||||
|
||||
private string FixEncoding(string src)
|
||||
{
|
||||
Encoding iso = Encoding.GetEncoding("iso-8859-1");
|
||||
return Encoding.Default.GetString(iso.GetBytes(src));
|
||||
}
|
||||
|
||||
@@ -296,44 +305,31 @@ namespace JDP
|
||||
{
|
||||
get
|
||||
{
|
||||
if (musicbrainz != null)
|
||||
return string.Format("{0}: {1} - {2}",
|
||||
musicbrainz.GetEvents().Count > 0 ? musicbrainz.GetEvents()[0].Date.Substring(0, 4) : "YYYY",
|
||||
musicbrainz.GetArtist(),
|
||||
musicbrainz.GetTitle());
|
||||
if (freedb != null)
|
||||
return string.Format("{0}: {1} - {2}",
|
||||
freedb.Year,
|
||||
freedb.Artist,
|
||||
freedb.Title);
|
||||
return null;
|
||||
return string.Format("{0}: {1} - {2}",
|
||||
metadata.Year == "" ? "YYYY" : metadata.Year,
|
||||
metadata.Artist == "" ? "Unknown Artist" : metadata.Artist,
|
||||
metadata.Title == "" ? "Unknown Title" : metadata.Title);
|
||||
}
|
||||
}
|
||||
|
||||
public void FixEncoding()
|
||||
{
|
||||
if (freedb == null)
|
||||
return;
|
||||
if (freedb_latin1 != null)
|
||||
metadata.Artist = FixEncoding(metadata.Artist);
|
||||
metadata.Title = FixEncoding(metadata.Title);
|
||||
foreach (TrackInfo track in metadata.Tracks)
|
||||
{
|
||||
freedb = freedb_latin1;
|
||||
freedb_latin1 = null;
|
||||
return;
|
||||
track.Title = FixEncoding(track.Title);
|
||||
track.Artist = FixEncoding(track.Artist);
|
||||
}
|
||||
freedb_latin1 = freedb;
|
||||
freedb = new Freedb.CDEntry(freedb_latin1);
|
||||
freedb.Artist = FixEncoding(freedb.Artist);
|
||||
freedb.Title = FixEncoding(freedb.Title);
|
||||
foreach (Freedb.Track tr in freedb.Tracks)
|
||||
tr.Title = FixEncoding(tr.Title);
|
||||
}
|
||||
|
||||
public void FillCUE()
|
||||
public bool Equals(ReleaseInfo r)
|
||||
{
|
||||
if (musicbrainz != null)
|
||||
CUE.FillFromMusicBrainz(musicbrainz);
|
||||
else if (freedb != null)
|
||||
CUE.FillFromFreedb(freedb);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user