CTDB metadata support

This commit is contained in:
chudov
2011-05-15 17:41:14 +00:00
parent a6941bc51b
commit d5fdd19735
20 changed files with 1246 additions and 572 deletions

View File

@@ -548,6 +548,7 @@ namespace CUERipper
this.imageListMetadataSource.Images.SetKeyName(5, "tracks1"); this.imageListMetadataSource.Images.SetKeyName(5, "tracks1");
this.imageListMetadataSource.Images.SetKeyName(6, "album"); this.imageListMetadataSource.Images.SetKeyName(6, "album");
this.imageListMetadataSource.Images.SetKeyName(7, "track"); this.imageListMetadataSource.Images.SetKeyName(7, "track");
this.imageListMetadataSource.Images.SetKeyName(8, "ctdb");
// //
// bnComboBoxDrives // bnComboBoxDrives
// //

View File

@@ -532,7 +532,7 @@ namespace CUERipper
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(data.selectedRelease.metadata); PropertyDescriptorCollection props = TypeDescriptor.GetProperties(data.selectedRelease.metadata);
PropertyDescriptorCollection sortedprops = props.Sort(new string[] { "Artist", "Title", "Genre", "Year", "DiscNumber", "TotalDiscs" }); PropertyDescriptorCollection sortedprops = props.Sort(new string[] { "Artist", "Title", "Genre", "Year", "DiscNumber", "TotalDiscs" });
foreach (PropertyDescriptor p in sortedprops) foreach (PropertyDescriptor p in sortedprops)
if (p.Name != "Tracks" && p.Name != "Id" && p.Name != "Catalog") if (p.Name != "Tracks" && p.Name != "Id" && !p.Attributes.Contains(new System.Xml.Serialization.XmlIgnoreAttribute()))
listMetadata.Items.Add(new ListViewItem(new string[] { p.GetValue(data.selectedRelease.metadata).ToString(), p.Name })); listMetadata.Items.Add(new ListViewItem(new string[] { p.GetValue(data.selectedRelease.metadata).ToString(), p.Name }));
} }
} }
@@ -574,6 +574,13 @@ namespace CUERipper
}); });
} }
private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource, CTDBResponseMeta release)
{
CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "ctdb");
entry.metadata.FillFromCtdb(release, entry.TOC.FirstAudio - 1);
return entry;
}
private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource, Release release) private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource, Release release)
{ {
CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "musicbrainz"); CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "musicbrainz");
@@ -616,7 +623,7 @@ namespace CUERipper
cueSheet.Action = CUEAction.Encode; cueSheet.Action = CUEAction.Encode;
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " CTDB..."; }); this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " CTDB..."; });
cueSheet.UseCUEToolsDB(true, "CUERipper " + CUESheet.CUEToolsVersion, selectedDriveInfo.drive.ARName); cueSheet.UseCUEToolsDB(true, "CUERipper " + CUESheet.CUEToolsVersion, selectedDriveInfo.drive.ARName, true, false);
cueSheet.CTDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress); cueSheet.CTDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress);
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " AccurateRip..."; }); this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " AccurateRip..."; });
cueSheet.UseAccurateRip(); cueSheet.UseAccurateRip();
@@ -635,6 +642,11 @@ namespace CUERipper
System.Diagnostics.Trace.WriteLine(ex.Message); System.Diagnostics.Trace.WriteLine(ex.Message);
} }
foreach (var ctdbMeta in cueSheet.CTDB.Metadata)
{
data.Releases.Add(CreateCUESheet(audioSource, ctdbMeta));
}
if (data.Releases.Count == 0 || loadAllMetadata) if (data.Releases.Count == 0 || loadAllMetadata)
{ {
loadAllMetadata = false; loadAllMetadata = false;

View File

@@ -924,8 +924,8 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADY
DgAAAk1TRnQBSQFMAgEBCAEAAQwBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo DwAAAk1TRnQBSQFMAgEBCQEAAQwBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -953,40 +953,46 @@
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ARgABmQZ5 AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wUAAfQBvAG1ArQBtQG8
AfMIAAH3AW0BvC0AAZkFoAJ5AfQIAAHwAW0CAAGSAeoCEgEUARUBQwERAewDAAGZCHkB8wYAAZkIeQHz AiA1AAH/AbwBtAEJBBkBCQIgAf8zAAH/AbsBCQH0AhkDCQEZAiABuwH/MgABvAEJAfUDGQEJCCAwAAH0
BQABmQWgAXkBmgFRAnkBmQQAAfMBbQHzAgAB6gFtARICFAESAW0B6wERAwABmQegAnkB9AUAAZkHoAJ5 AbQB/wH1BBkIIDAAAbwBCQIZAfQFGQEJAiABGQEJAbwwAAG1AfIDCQEZAQkCtAEJARkCIAHdARkBtTAA
AfQEAAGZBaADeQFYAaABmQQAAe8C7AIAAfcBbQPqAhIBFAHsAwABmQegAXkBmgF5AfQEAAGZB6ABeQGa AbQBGQMJARkBtAL/AbQBGQIgAQkBGQG0MAABtAEZAwkBGQG0Av8BtAEZAwkBGQG0MAABtQEZBQkCtAEJ
AXkB9AMAAZkIoAFYAaABUQF5AZkTAAGZB6ADeQGZBAABmQegA3kBmQMAAZkIoAFYAaABWAGgAZkCAALr AfUB9AMZAbUwAAG8BAkDGQH0AfUB9AP1AQkBvDAAAfQBtAH0AQkBGQH/AgkBGQH1AfQB9QL/AbQB9DEA
AW0OAAGZCqABmQQAAZkKoAGZAwABmQigAVgBoAFYAaABmQIAAfQB7QH/AgAB9wVtAuoBkgMAAZkKoAGZ AbwBCQH1Af8B9QIJARkB/wL1Af8BCQG8MgAB/wG7AQkB/wH0AgkBGQH1Av8BCQG7Af8zAAH/AbwBtAEJ
BAABmQqgAZkDAAGZAcMHoAFYAaABWAGgAZkDAAH0Ae0CAAJtARIBEwEUARIBbQHrAeoDAAGZCqABmQQA AhkB9AHzAQkBtAG8Af82AAH0AbwBtQK0AbUBvAH0dQABmQZ5AfMIAAH3AW0BvC0AAZkFoAJ5AfQIAAHw
AZkKoAGZAwABGgHDB6ABWAGgAVgBoAGZAgAB7wHsAe8CAAHvAesGbQH3AwABmQqgAZkEAAGZCaABkQGY AW0CAAGSAeoCEgEUARUBQwERAewDAAGZCHkB8wYAAZkIeQHzBQABmQWgAXkBmgFRAnkBmQQAAfMBbQHz
AwABGgPDBaABWAGgAVgBoAGZEwABmQHDCaABmQQAAZkBwwigAosB8gIAARsBGgh5AaABWAGgAZkCAAPs AgAB6gFtARICFAESAW0B6wERAwABmQegAnkB9AUAAZkHoAJ5AfQEAAGZBaADeQFYAaABmQQAAe8C7AIA
DgABmQHDCaABmQQAAZkBwwSgAZEEswHaAbQB8gMAARoDwwWgAVgBoAGZAwAB7AMAAe8B7ATrAm0B9wMA AfcBbQPqAhIBFAHsAwABmQegAXkBmgF5AfQEAAGZB6ABeQGaAXkB9AMAAZkIoAFYAaABUQF5AZkTAAGZ
ARoBwwmgARoEAAEaAcMEoAGzAdwF2wG0AwABGwEaCHkBoAEaAwAB7AMAAewBbQISAhMBEgJtAwABGgTD B6ADeQGZBAABmQegA3kBmQMAAZkIoAFYAaABWAGgAZkCAALrAW0OAAGZCqABmQQAAZkKoAGZAwABmQig
BqABGgQAARoEwwGgAbsEtAHcAbQB8gUAARoDwwWgARoCAAHvAewDAAHvBOwD6wHvAwABGwoaARsEAAEb AVgBoAFYAaABmQIAAfQB7QH/AgAB9wVtAuoBkgMAAZkKoAGZBAABmQqgAZkDAAGZAcMHoAFYAaABWAGg
CRoCtAHzBgABGwgaARstAAEJAfMDAAF6AlELegEAAe0PCiAAAVEBAAERARMBAAEPCnoBtQQEA/MBBAPz AZkDAAH0Ae0CAAJtARIBEwEUARIBbQHrAeoDAAGZCqABmQQAAZkKoAGZAwABGgHDB6ABWAGgAVgBoAGZ
AgQBXwEKEAAQ/wEAAbwD/wETAQ8JegG1AwQB9AIEAfQBBAH0AgQB9AIEAQoB8QK8AfIBAAHyBLwB8gEA AgAB7wHsAe8CAAHvAesGbQH3AwABmQqgAZkEAAGZCaABkQGYAwABGgPDBaABWAGgAVgBoAGZEwABmQHD
AfICvAHxAfACvAHwAf8B8AS8AfAB/wHwArwB8AEAAbwE/wEACXoBtQGiAgQB/wIEAf8BBAH/AgQB/wIE CaABmQQAAZkBwwigAosB8gIAARsBGgh5AaABWAGgAZkCAAPsDgABmQHDCaABmQQAAZkBwwSgAZEEswHa
AQoBvAH/AfQDBwT0AwcB9AH/ArwB/wH0AwcE9AMHAfQB/wG8AVEBDwHrAgcBvAEAAREEAAERA3oBtQGi AbQB8gMAARoDwwWgAVgBoAGZAwAB7AMAAe8B7ATrAm0B9wMAARoBwwmgARoEAAEaAcMEoAGzAdwF2wG0
AwQD/wEEA/8DBAEKAfAB9ALzAfQG8wH0AvMB9ALwAfQC8wH0BvMB9ALzAfQB8AF6AVEBDwIAAf8BAAEP AwABGwEaCHkBoAEaAwAB7AMAAewBbQISAhMBEgJtAwABGgTDBqABGgQAARoEwwGgAbsEtAHcAbQB8gUA
AfcC/wGSAhECegG1AaIFBAH/AQQB/wUEAQoB8AH0DPMB9ALwAfQM8wH0AfAEegEAAf8BAAERBP8BvAEA ARoDwwWgARoCAAHvAewDAAHvBOwD6wHvAwABGwoaARsEAAEbCRoCtAHzBgABGwgaARstAAEJAfMDAAF6
AnoBtQGiBQQB/wEEAf8FBAEKAfAB9AzzAfQC8AH0DPMB9AHwBK4BAAH/AgABEwG8A/8BAAKuAbUBog0E AlELegEAAe0PCiAAAVEBAAERARMBAAEPCnoBtQQEA/MBBAPzAgQBXwEKEAAQ/wEAAbwD/wETAQ8JegG1
AQoB8QH/BfQBAAFzAbwE9AH/AvEB/wX0AQABcwG8BPQB/wHxBK4BAAH/AQABEgEPAwAB/wEAAq4N/wH0 AwQB9AIEAfQBBAH0AgQB9AIEAQoB8QK8AfIBAAHyBLwB8gEAAfICvAHxAfACvAHwAf8B8AS8AfAB/wHw
AfMB7AHyAf8F9AEcAcMBUQEIA/QB/wLyAf8F9AEcAcMBUQEIA/QB/wHyBK4BAAH/AQ8BAAERAhIBAAH/ ArwB8AEAAbwE/wEACXoBtQGiAgQB/wIEAf8BBAH/AgQB/wIEAQoBvAH/AfQDBwT0AwcB9AH/ArwB/wH0
AQACrgH/AaIC/wEEA/8CBAP/AgQB7AHyBv8BGwFYAXoBUQEIA/8C8gb/ARsBWAF6AVEBCAP/AfIErgEA AwcE9AMHAfQB/wG8AVEBDwHrAgcBvAEAAREEAAERA3oBtQGiAwQD/wEEA/8DBAEKAfAB9ALzAfQG8wH0
Av8BkgERAQABDwEAAf8BAAKuAf8BogL/AQQC/wEEBP8BBAH0AfMB7AHyB/8BGgFYAXoBUQEaAv8C8gf/ AvMB9ALwAfQC8wH0BvMB9ALzAfQB8AF6AVEBDwIAAf8BAAEPAfcC/wGSAhECegG1AaIFBAH/AQQB/wUE
ARoBWAF6AVEBGgL/AfIErgEAAQcD/wG8AeoBAAH/AQACrgH/AaIC/wEEAv8EBAH/AwQBCgHyCP8BGgFY AQoB8AH0DPMB9ALwAfQM8wH0AfAEegEAAf8BAAERBP8BvAEAAnoBtQGiBQQB/wEEAf8FBAEKAfAB9Azz
AXoBUQEaAf8C8gj/ARoBWAF6AVEBGgH/AfIErgERARMBBwb/AQACrgH/AaIBBAH/AQQC/wEEAv8BBAH/ AfQC8AH0DPMB9AHwBK4BAAH/AgABEwG8A/8BAAKuAbUBog0EAQoB8QH/BfQBAAFzAbwE9AH/AvEB/wX0
AQQB9AHzAQoB8gn/ARsBWAF6Ae0B8ALyCf8BGwFYAXoB7QHwAfIFrgERAQABEQGSBP8BAAKuAf8BhgL/ AQABcwG8BPQB/wHxBK4BAAH/AQABEgEPAwAB/wEAAq4N/wH0AfMB7AHyAf8F9AEcAcMBUQEIA/QB/wLy
AgQC/wIEA/8CBAHsAfMK8gHwAe8B9AHtAbwB8wryAfAB7wH0Ae0BvAeuAREBAAEPAesBvAH/AQACrgH/ Af8F9AEcAcMBUQEIA/QB/wHyBK4BAAH/AQ8BAAERAhIBAAH/AQACrgH/AaIC/wEEA/8CBAP/AgQB7AHy
AYYL/wH0AfMB7AwAAfQBvAEWAW8MAAH0AbwBFgFvAQAJrgEPAQABEwERAa4BAAL/AbUL/wH0AQcNAAH0 Bv8BGwFYAXoBUQEIA/8C8gb/ARsBWAF6AVEBCAP/AfIErgEAAv8BkgERAQABDwEAAf8BAAKuAf8BogL/
ARYB8w0AAfQBFgHzAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD/4EACP8BgAF/ AQQC/wEEBP8BBAH0AfMB7AHyB/8BGgFYAXoBUQEaAv8C8gf/ARoBWAF6AVEBGgL/AfIErgEAAQcD/wG8
AY8F/wGAAT8BzAEBAcABDwHAAQ8BgAEHAYwBAQHAAQcBwAEHAYABBwGMAQEBwAEDAcABAwGAAQEC/wHA AeoBAAH/AQACrgH/AaIC/wEEAv8EBAH/AwQBCgHyCP8BGgFYAXoBUQEaAf8C8gj/ARoBWAF6AVEBGgH/
AQMBwAEDAYABAQGPAf8BwAEDAcABAwGAAQEBjAEBAcABAwHAAQMBgAEBAcwBAQHAAQMBwAEDAYABAQGM AfIErgERARMBBwb/AQACrgH/AaIBBAH/AQQC/wEEAv8BBAH/AQQB9AHzAQoB8gn/ARsBWAF6Ae0B8ALy
AQEBwAEDAcABAwGAAQEC/wHAAQMBwAEBAYABAQGPAf8BwAEDAcABAAHgAQEB3AEBAcABAwHAAQAB4AEB Cf8BGwFYAXoB7QHwAfIFrgERAQABEQGSBP8BAAKuAf8BhgL/AgQC/wIEA/8CBAHsAfMK8gHwAe8B9AHt
AdwBAQHAAQMBwAEAAfgBAQGcAQEBwAEDAcABAQH4AQEF/wHzAYABAQIABP8EAAL/BgABCAEQXgAB/wHw AbwB8wryAfAB7wH0Ae0BvAeuAREBAAEPAesBvAH/AQACrgH/AYYL/wH0AfMB7AwAAfQBvAEWAW8MAAH0
Af8B8AGAAQECAAH/AfgB/wH4Cw== AbwBFgFvAQAJrgEPAQABEwERAa4BAAL/AbUL/wH0AQcNAAH0ARYB8w0AAfQBFgHzAUIBTQE+BwABPgMA
ASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD/wEAAfABBwYAAcABAwYAAYABAQYAAYBHAAGAAQEGAAGA
AQEGAAHAAQMGAAHwAQ8GAAj/AYABfwGPBf8BgAE/AcwBAQHAAQ8BwAEPAYABBwGMAQEBwAEHAcABBwGA
AQcBjAEBAcABAwHAAQMBgAEBAv8BwAEDAcABAwGAAQEBjwH/AcABAwHAAQMBgAEBAYwBAQHAAQMBwAED
AYABAQHMAQEBwAEDAcABAwGAAQEBjAEBAcABAwHAAQMBgAEBAv8BwAEDAcABAQGAAQEBjwH/AcABAwHA
AQAB4AEBAdwBAQHAAQMBwAEAAeABAQHcAQEBwAEDAcABAAH4AQEBnAEBAcABAwHAAQEB+AEBBf8B8wGA
AQECAAT/BAAC/wYAAQgBEF4AAf8B8AH/AfABgAEBAgAB/wH4Af8B+As=
</value> </value>
</data> </data>
<data name="bnComboBoxRelease.Location" type="System.Drawing.Point, System.Drawing"> <data name="bnComboBoxRelease.Location" type="System.Drawing.Point, System.Drawing">

View File

@@ -413,6 +413,31 @@ namespace CUETools.CDImage
} }
} }
public static CDImageLayout FromString(string str)
{
var ids = str.Split(':');
int firstaudio = 1;
int audiotracks = 0;
int trackcount = ids.Length - 1;
while (firstaudio < ids.Length && ids[firstaudio - 1][0] == '-')
firstaudio ++;
while (firstaudio + audiotracks < ids.Length && ids[firstaudio + audiotracks - 1][0] != '-')
audiotracks ++;
for (var i = 0; i < ids.Length; i++)
if (ids[i][0] == '-')
ids[i] = ids[i].Substring(1);
return new CDImageLayout(trackcount, audiotracks, firstaudio, string.Join(" ", ids));
}
public string ToString()
{
StringBuilder mbSB = new StringBuilder();
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
mbSB.AppendFormat("{0}{1}:", _tracks[iTrack].IsAudio ? "" : "-", _tracks[iTrack].Start);
mbSB.AppendFormat("{0}", Length);
return mbSB.ToString();
}
public void InsertTrack(CDTrack track) public void InsertTrack(CDTrack track)
{ {
_tracks.Insert((int)track.Number - 1, track); _tracks.Insert((int)track.Number - 1, track);

View File

@@ -45,6 +45,13 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="FormMetadata.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormMetadata.Designer.cs">
<DependentUpon>FormMetadata.cs</DependentUpon>
</Compile>
<Compile Include="Metadata.cs" />
<Compile Include="Plugin.cs" /> <Compile Include="Plugin.cs" />
<Compile Include="Options.cs"> <Compile Include="Options.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@@ -55,6 +62,9 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="FormMetadata.resx">
<DependentUpon>FormMetadata.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Options.resx"> <EmbeddedResource Include="Options.resx">
<DependentUpon>Options.cs</DependentUpon> <DependentUpon>Options.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>

View File

@@ -0,0 +1,110 @@
namespace CUETools.CTDB.EACPlugin
{
partial class FormMetadata
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.listView1 = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// progressBar1
//
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Top;
this.progressBar1.Location = new System.Drawing.Point(10, 198);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(587, 23);
this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
this.progressBar1.TabIndex = 0;
//
// backgroundWorker1
//
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//
// listView1
//
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.listView1.Dock = System.Windows.Forms.DockStyle.Top;
this.listView1.FullRowSelect = true;
this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listView1.HideSelection = false;
this.listView1.Location = new System.Drawing.Point(10, 10);
this.listView1.MultiSelect = false;
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(587, 188);
this.listView1.TabIndex = 1;
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);
//
// columnHeader1
//
this.columnHeader1.Text = "Album";
//
// button1
//
this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button1.Location = new System.Drawing.Point(519, 204);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 2;
this.button1.Text = "Cancel";
this.button1.UseVisualStyleBackColor = true;
this.button1.Visible = false;
//
// FormMetadata
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.button1;
this.ClientSize = new System.Drawing.Size(607, 233);
this.Controls.Add(this.button1);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.listView1);
this.Name = "FormMetadata";
this.Padding = new System.Windows.Forms.Padding(10);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "CTDB Metadata Lookup";
this.Load += new System.EventHandler(this.FormMetadata_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ProgressBar progressBar1;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.Button button1;
}
}

View File

@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CUETools.CTDB.EACPlugin
{
public partial class FormMetadata : Form
{
private CUEToolsDB ctdb;
private CTDBResponseMeta meta;
private string agent;
public FormMetadata(CUEToolsDB ctdb, string agent)
{
this.ctdb = ctdb;
this.agent = agent;
this.InitializeComponent();
}
public CTDBResponseMeta Meta
{
get
{
return this.meta;
}
}
private void FormMetadata_Load(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
this.ctdb.ContactDB(this.agent, null, true, false);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.progressBar1.Visible = false;
this.button1.Visible = true;
CTDBResponseMeta bestMeta = null;
foreach (var metadata in ctdb.Metadata)
{
bestMeta = metadata;
uint td = 0, dn = 0;
var disccount = metadata.disccount ?? "1";
var discnumber = metadata.discnumber ?? "1";
var discnumber01 = (uint.TryParse(disccount, out td) && uint.TryParse(discnumber, out dn) && td > 9 && dn > 0) ?
string.Format("{0:00}", dn) : discnumber;
var discnumberandtotal = disccount != "1" ? discnumber01 + "/" + disccount : (discnumber != "1" ? discnumber01 : "");
var label = metadata.country ?? "";
if (metadata.label != null)
foreach (var l in metadata.label)
label = (label == "" ? "" : label + ": ") + (l.name ?? "") + (l.name != null && l.catno != null ? " " : "") + (l.catno ?? "");
var text = string.Format("{0}{1} - {2}{3}{4}", metadata.year != null ? metadata.year + ": " : "",
metadata.artist == null ? "Unknown Artist" : metadata.artist,
metadata.album == "" ? "Unknown Title" : metadata.album,
discnumberandtotal != "" ? " (disc " + discnumberandtotal + (metadata.discname != null ? ": " + metadata.discname : "") + ")" : "",
label == "" ? "" : " (" + label + ")");
listView1.Items.Add(new ListViewItem(text) { Tag = metadata });
}
this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
this.meta = bestMeta;
if (listView1.Items.Count < 2)
this.Close();
}
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
var ht = listView1.HitTest(e.Location);
if (ht.Item != null)
{
meta = ht.Item.Tag as CTDBResponseMeta;
this.Close();
}
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Text;
using HelperFunctionsLib;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Net;
using System.IO;
using CUETools.CDImage;
using CUETools.AccurateRip;
using CUETools.Codecs;
using CUETools.CTDB;
namespace MetadataPlugIn
{
[Guid("8271734A-126F-44e9-AC9C-836449B39E51"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IMetadataRetriever)),
]
public class MetadataRetriever : IMetadataRetriever
{
public bool GetCDInformation(CCDMetadata data, bool cdinfo, bool cover, bool lyrics)
{
if (!cdinfo)
return false;
var TOC = new CDImageLayout();
for (int i = 0; i < data.NumberOfTracks; i++)
{
uint start = data.GetTrackStartPosition(i);
uint next = data.GetTrackEndPosition(i);
TOC.AddTrack(new CDTrack(
(uint)i + 1,
start,
next - start,
!data.GetTrackDataTrack(i),
data.GetTrackPreemphasis(i)));
}
TOC[1][0].Start = 0U;
var ctdb = new CUEToolsDB(TOC, null);
var form = new CUETools.CTDB.EACPlugin.FormMetadata(ctdb, "EAC" + data.HostVersion + " CTDB 2.1.1");
form.ShowDialog();
var meta = form.Meta;
if (meta == null)
return false;
int year, disccount, discnumber;
if (meta.year != null && int.TryParse(meta.year, out year))
data.Year = year;
if (meta.disccount != null && int.TryParse(meta.disccount, out disccount))
data.TotalNumberOfCDs = disccount;
if (meta.discnumber != null && int.TryParse(meta.discnumber, out discnumber))
data.CDNumber = discnumber;
if (meta.album != null)
data.AlbumTitle = meta.album;
if (meta.artist != null)
data.AlbumArtist = meta.artist;
if (meta.track != null)
for (int track = 0; track < data.NumberOfTracks; track++)
{
if (track < meta.track.Length)
{
if (meta.track[track].name != null)
data.SetTrackTitle(track, meta.track[track].name);
var trackartist = meta.track[track].artist ?? meta.artist;
if (trackartist != null)
data.SetTrackArtist(track, trackartist);
}
else if (meta.artist != null)
data.SetTrackArtist(track, meta.artist);
}
return true;
}
public string GetPluginGuid()
{
return ((GuidAttribute)Attribute.GetCustomAttribute(GetType(), typeof(GuidAttribute))).Value;
}
public Array GetPluginLogo()
{
return null; // File.ReadAllBytes(@"C:\Work\cuetoolsnet\CUETools\Resources\accuraterip.bmp");
}
public string GetPluginName()
{
return "CUETools DB Metadata Plugin V2.1.1";
}
public void ShowOptions()
{
AudioDataPlugIn.Options opt = new AudioDataPlugIn.Options();
opt.ShowDialog();
}
public bool SubmitCDInformation(IMetadataLookup data)
{
throw new NotSupportedException();
}
public bool SupportsCoverRetrieval()
{
return false;
}
public bool SupportsLyricsRetrieval()
{
return false;
}
public bool SupportsMetadataRetrieval()
{
return true;
}
public bool SupportsMetadataSubmission()
{
return false;
}
}
}

View File

@@ -42,62 +42,26 @@ namespace AudioDataPlugIn
// This functions just returns an unique identifier. // This functions just returns an unique identifier.
// For that, the string representation of the unique // For that, the string representation of the unique
// guid is used // guid is used
public string GetAudioTransferPluginGuid() public string GetAudioTransferPluginGuid()
{ {
// Determine the guid attribute of the given class return ((GuidAttribute)Attribute.GetCustomAttribute(GetType(), typeof(GuidAttribute))).Value;
Attribute attrib = Attribute.GetCustomAttribute(typeof(AudioDataTransfer), typeof(GuidAttribute));
// Is the returned attribute a GuidAttribute as
// we asked for?
if (attrib is GuidAttribute)
{
// Yes, so return the guid of this class
return ((GuidAttribute)attrib).Value;
}
else
{
// No, something went wrong. Just return
// the name of the plugin and hope that it
// is unique
return GetAudioTransferPluginName();
}
} }
// Each plugin has also an (unique) display name // Each plugin has also an (unique) display name
// which will be used for selecting/deselecting // which will be used for selecting/deselecting
// the plugin and for display in the log file // the plugin and for display in the log file
public string GetAudioTransferPluginName() public string GetAudioTransferPluginName()
{ {
// Return the name which should be
// displayed in EAC and in the log file
// including a version number
return "CUETools DB Plugin V2.1.1"; return "CUETools DB Plugin V2.1.1";
} }
// Each plugin should have its own options page. // Each plugin should have its own options page.
// Even though if there are no options, a help or // Even though if there are no options, a help or
// information dialog should be displayed // information dialog should be displayed
public void ShowOptions() public void ShowOptions()
{ {
// Create a new option dialog object
Options opt = new Options(); Options opt = new Options();
// And show that dialog (return when
// the dialog is closed)
opt.ShowDialog(); opt.ShowDialog();
} }
@@ -155,7 +119,7 @@ namespace AudioDataPlugIn
#if USEAR #if USEAR
ar.ContactAccurateRip(ArId); ar.ContactAccurateRip(ArId);
#endif #endif
ctdb.ContactDB("EAC" + m_data.HostVersion + " CTDB 2.1.1", m_drivename); ctdb.ContactDB("EAC" + m_data.HostVersion + " CTDB 2.1.1", m_drivename, false, false);
ctdb.Init(true, ar); ctdb.Init(true, ar);
this.sequence_ok = true; this.sequence_ok = true;
this.m_start_pos = 0; this.m_start_pos = 0;

View File

@@ -1,11 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Management; using System.Management;
using System.Net; using System.Net;
using System.Xml; using System.Xml;
using System.Xml.Serialization;
using System.Text; using System.Text;
using System.Security.Cryptography; using System.Security.Cryptography;
using CUETools.CDImage; using CUETools.CDImage;
@@ -16,7 +18,7 @@ namespace CUETools.CTDB
{ {
public class CUEToolsDB public class CUEToolsDB
{ {
const string urlbase = "http://db.cuetools.net"; const string urlbase = "http://dbnew.cuetools.net";
string userAgent; string userAgent;
string driveName; string driveName;
@@ -27,6 +29,7 @@ namespace CUETools.CTDB
private int length; private int length;
private int total; private int total;
List<DBEntry> entries = new List<DBEntry>(); List<DBEntry> entries = new List<DBEntry>();
List<CTDBResponseMeta> metadata = new List<CTDBResponseMeta>();
DBEntry selectedEntry; DBEntry selectedEntry;
IWebProxy proxy; IWebProxy proxy;
HttpUploadHelper uploadHelper; HttpUploadHelper uploadHelper;
@@ -39,16 +42,19 @@ namespace CUETools.CTDB
this.uploadHelper = new HttpUploadHelper(); this.uploadHelper = new HttpUploadHelper();
} }
public void ContactDB(string userAgent, string driveName) public void ContactDB(string userAgent, string driveName, bool musicbrainz, bool fuzzy)
{ {
this.driveName = driveName; this.driveName = driveName;
this.userAgent = userAgent + " (" + Environment.OSVersion.VersionString + ")" + (driveName != null ? " (" + driveName + ")" : ""); this.userAgent = userAgent + " (" + Environment.OSVersion.VersionString + ")" + (driveName != null ? " (" + driveName + ")" : "");
this.total = 0; this.total = 0;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/lookup.php?tocid=" + toc.TOCID); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase
+ "/lookup2.php?musicbrainz=" + (musicbrainz ? 1 : 0)
+ "&fuzzy=" + (fuzzy ? 1 : 0)
+ "&toc=" + toc.ToString());
req.Method = "GET"; req.Method = "GET";
req.Proxy = proxy; req.Proxy = proxy;
req.UserAgent = userAgent; req.UserAgent = this.userAgent;
if (uploadHelper.onProgress != null) if (uploadHelper.onProgress != null)
uploadHelper.onProgress(this, new UploadProgressEventArgs(req.RequestUri.AbsoluteUri, 0)); uploadHelper.onProgress(this, new UploadProgressEventArgs(req.RequestUri.AbsoluteUri, 0));
@@ -60,55 +66,35 @@ namespace CUETools.CTDB
if (accResult == HttpStatusCode.OK) if (accResult == HttpStatusCode.OK)
{ {
XmlSerializer serializer = new XmlSerializer(typeof(CTDBResponse));
this.total = 0; this.total = 0;
using (Stream responseStream = resp.GetResponseStream()) using (Stream responseStream = resp.GetResponseStream())
{ {
using (XmlTextReader reader = new XmlTextReader(responseStream)) CTDBResponse ctdbResp = serializer.Deserialize(responseStream) as CTDBResponse;
{ if (ctdbResp.entry != null)
reader.ReadToFollowing("ctdb"); foreach (var ctdbRespEntry in ctdbResp.entry)
if (reader.ReadToDescendant("entry")) {
do if (ctdbRespEntry.toc == null)
{ continue;
XmlReader entry = reader.ReadSubtree();
string crc32 = reader["crc32"];
string confidence = reader["confidence"];
string npar = reader["npar"];
string stride = reader["stride"];
string id = reader["id"];
string hasPatity = reader["hasparity"];
byte[] parity = null;
CDImageLayout entry_toc = null;
entry.Read(); var parity = Convert.FromBase64String(ctdbRespEntry.parity);
while (entry.Read() && entry.NodeType != XmlNodeType.EndElement) var entry_toc = CDImageLayout.FromString(ctdbRespEntry.toc);
{ this.total += ctdbRespEntry.confidence;
if (entry.Name == "parity") var entry = new DBEntry(
{ parity,
entry.Read(); // entry.NodeType == XmlNodeType.Text 0,
parity = Convert.FromBase64String(entry.Value); parity.Length,
entry.Read(); ctdbRespEntry.confidence,
} ctdbRespEntry.npar,
else if (entry.Name == "toc") ctdbRespEntry.stride,
{ uint.Parse(ctdbRespEntry.crc32, NumberStyles.HexNumber),
string trackcount = entry["trackcount"]; ctdbRespEntry.id,
string audiotracks = entry["audiotracks"]; entry_toc,
string firstaudio = entry["firstaudio"]; ctdbRespEntry.hasparity == 1);
entry.Read(); entries.Add(entry);
string trackoffsets = entry.Value; }
entry.Read(); if (ctdbResp.musicbrainz != null && ctdbResp.musicbrainz.Length != 0)
entry_toc = new CDImageLayout(int.Parse(trackcount), int.Parse(audiotracks), int.Parse(firstaudio), trackoffsets); metadata.AddRange(ctdbResp.musicbrainz);
}
else
{
reader.Skip();
}
}
entry.Close();
this.total += int.Parse(confidence);
entries.Add(new DBEntry(parity, 0, parity.Length, int.Parse(confidence), int.Parse(npar), int.Parse(stride), uint.Parse(crc32, NumberStyles.HexNumber), id, entry_toc, hasPatity == "1"));
} while (reader.ReadToNextSibling("entry"));
reader.Close();
}
} }
if (entries.Count == 0) if (entries.Count == 0)
accResult = HttpStatusCode.NotFound; accResult = HttpStatusCode.NotFound;
@@ -128,7 +114,7 @@ namespace CUETools.CTDB
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET"; req.Method = "GET";
req.Proxy = proxy; req.Proxy = proxy;
req.UserAgent = userAgent; req.UserAgent = this.userAgent;
try try
{ {
@@ -232,21 +218,17 @@ namespace CUETools.CTDB
} }
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/submit2.php"); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/submit2.php");
req.Proxy = proxy; req.Proxy = proxy;
req.UserAgent = userAgent; req.UserAgent = this.userAgent;
NameValueCollection form = new NameValueCollection(); NameValueCollection form = new NameValueCollection();
if (upload) if (upload)
form.Add("parityfile", "1"); form.Add("parityfile", "1");
if (confirm != null) if (confirm != null)
form.Add("confirmid", confirm.id); form.Add("confirmid", confirm.id);
form.Add("tocid", toc.TOCID); form.Add("toc", toc.ToString());
form.Add("crc32", ((int)verify.CRC).ToString()); form.Add("crc32", ((int)verify.CRC).ToString());
form.Add("trackcrcs", verify.TrackCRCs); form.Add("trackcrcs", verify.TrackCRCs);
form.Add("parity", Convert.ToBase64String(verify.Parity, 0, 16)); form.Add("parity", Convert.ToBase64String(verify.Parity, 0, 16));
form.Add("confidence", confidence.ToString()); form.Add("confidence", confidence.ToString());
form.Add("trackcount", toc.TrackCount.ToString());
form.Add("firstaudio", toc.FirstAudio.ToString());
form.Add("audiotracks", toc.AudioTracks.ToString());
form.Add("trackoffsets", toc.TrackOffsets);
form.Add("userid", GetUUID()); form.Add("userid", GetUUID());
form.Add("quality", quality.ToString()); form.Add("quality", quality.ToString());
if (driveName != null) if (driveName != null)
@@ -368,7 +350,7 @@ namespace CUETools.CTDB
entry.canRecover = false; entry.canRecover = false;
else else
{ {
FetchDB(string.Format("{0}/repair.php?tocid={1}&id={2}", urlbase, toc.TOCID, entry.id), entry); FetchDB(string.Format("{0}/repair.php?id={1}", urlbase, entry.id), entry);
if (entry.httpStatus != HttpStatusCode.OK) if (entry.httpStatus != HttpStatusCode.OK)
entry.canRecover = false; entry.canRecover = false;
else else
@@ -496,6 +478,14 @@ namespace CUETools.CTDB
} }
} }
public IEnumerable<CTDBResponseMeta> Metadata
{
get
{
return metadata;
}
}
public HttpUploadHelper UploadHelper public HttpUploadHelper UploadHelper
{ {
get get
@@ -670,4 +660,88 @@ namespace CUETools.CTDB
return new DBHDR(stream, name); return new DBHDR(stream, name);
} }
} }
[Serializable]
public class CTDBResponseEntry
{
[XmlAttribute]
public string id { get; set; }
[XmlAttribute]
public string crc32 { get; set; }
[XmlAttribute]
public int confidence { get; set; }
[XmlAttribute]
public int npar { get; set; }
[XmlAttribute]
public int stride { get; set; }
[XmlAttribute, DefaultValue(1)]
public int hasparity { get; set; }
[XmlAttribute]
public string parity { get; set; }
[XmlAttribute]
public string toc { get; set; }
}
[Serializable]
public class CTDBResponseMetaTrack
{
[XmlAttribute]
public string name { get; set; }
[XmlAttribute]
public string artist { get; set; }
}
[Serializable]
public class CTDBResponseMetaLabel
{
[XmlAttribute]
public string name { get; set; }
[XmlAttribute]
public string catno { get; set; }
}
[Serializable]
public class CTDBResponseMeta
{
[XmlAttribute]
public string release_gid { get; set; }
[XmlAttribute]
public string artist { get; set; }
[XmlAttribute]
public string album { get; set; }
[XmlAttribute]
public string year { get; set; }
[XmlAttribute]
public string genre { get; set; }
[XmlAttribute]
public string country { get; set; }
[XmlAttribute]
public string releasedate { get; set; }
[XmlAttribute]
public string discnumber { get; set; }
[XmlAttribute]
public string disccount { get; set; }
[XmlAttribute]
public string discname { get; set; }
[XmlAttribute]
public string coverarturl { get; set; }
[XmlAttribute]
public string infourl { get; set; }
[XmlAttribute]
public string barcode { get; set; }
[XmlElement]
public CTDBResponseMetaTrack[] track;
[XmlElement]
public CTDBResponseMetaLabel[] label;
}
[Serializable]
[XmlRoot(ElementName="ctdb", Namespace="http://db.cuetools.net/ns/mmd-1.0#")]
public class CTDBResponse
{
[XmlElement]
public CTDBResponseEntry[] entry;
[XmlElement]
public CTDBResponseMeta[] musicbrainz;
}
} }

View File

@@ -15,11 +15,14 @@ namespace CUETools.Processor
{ {
TotalDiscs = ""; TotalDiscs = "";
DiscNumber = ""; DiscNumber = "";
DiscName = "";
Year = ""; Year = "";
Genre = ""; Genre = "";
Artist = ""; Artist = "";
Title = ""; Title = "";
Catalog = ""; Barcode = "";
ReleaseDate = "";
Label = "";
Tracks = new List<CUETrackMetadata>(); Tracks = new List<CUETrackMetadata>();
} }
@@ -56,6 +59,8 @@ namespace CUETools.Processor
[DefaultValue("")] [DefaultValue("")]
public string DiscNumber { get; set; } public string DiscNumber { get; set; }
[DefaultValue("")] [DefaultValue("")]
public string DiscName { get; set; }
[DefaultValue("")]
public string Year { get; set; } public string Year { get; set; }
[DefaultValue("")] [DefaultValue("")]
public string Genre { get; set; } public string Genre { get; set; }
@@ -63,8 +68,12 @@ namespace CUETools.Processor
public string Artist { get; set; } public string Artist { get; set; }
[DefaultValue("")] [DefaultValue("")]
public string Title { get; set; } public string Title { get; set; }
[DefaultValue(""), XmlElement(ElementName="Catalog")]
public string Barcode { get; set; }
[DefaultValue("")] [DefaultValue("")]
public string Catalog { get; set; } public string ReleaseDate { get; set; }
[DefaultValue("")]
public string Label { get; set; }
public List<CUETrackMetadata> Tracks { get; set; } public List<CUETrackMetadata> Tracks { get; set; }
[XmlIgnore] [XmlIgnore]
@@ -107,11 +116,14 @@ namespace CUETools.Processor
{ {
if ((overwrite || TotalDiscs == "") && metadata.TotalDiscs != "") TotalDiscs = metadata.TotalDiscs; if ((overwrite || TotalDiscs == "") && metadata.TotalDiscs != "") TotalDiscs = metadata.TotalDiscs;
if ((overwrite || DiscNumber == "") && metadata.DiscNumber != "") DiscNumber = metadata.DiscNumber; if ((overwrite || DiscNumber == "") && metadata.DiscNumber != "") DiscNumber = metadata.DiscNumber;
if ((overwrite || DiscName == "") && metadata.DiscName != "") DiscName = metadata.DiscName;
if ((overwrite || Year == "") && metadata.Year != "") Year = metadata.Year; if ((overwrite || Year == "") && metadata.Year != "") Year = metadata.Year;
if ((overwrite || Genre == "") && metadata.Genre != "") Genre = metadata.Genre; if ((overwrite || Genre == "") && metadata.Genre != "") Genre = metadata.Genre;
if ((overwrite || Artist == "") && metadata.Artist != "") Artist = metadata.Artist; if ((overwrite || Artist == "") && metadata.Artist != "") Artist = metadata.Artist;
if ((overwrite || Title == "") && metadata.Title != "") Title = metadata.Title; if ((overwrite || Title == "") && metadata.Title != "") Title = metadata.Title;
if ((overwrite || Catalog == "") && metadata.Catalog != "") Catalog = metadata.Catalog; if ((overwrite || Barcode == "") && metadata.Barcode != "") Barcode = metadata.Barcode;
if ((overwrite || ReleaseDate == "") && metadata.ReleaseDate != "") ReleaseDate = metadata.ReleaseDate;
if ((overwrite || Label == "") && metadata.Label != "") Label = metadata.Label;
for (int i = 0; i < Tracks.Count; i++) for (int i = 0; i < Tracks.Count; i++)
{ {
if ((overwrite || Tracks[i].Title == "") && metadata.Tracks[i].Title != "") Tracks[i].Title = metadata.Tracks[i].Title; if ((overwrite || Tracks[i].Title == "") && metadata.Tracks[i].Title != "") Tracks[i].Title = metadata.Tracks[i].Title;
@@ -120,6 +132,11 @@ namespace CUETools.Processor
} }
} }
public override int GetHashCode()
{
return Artist.GetHashCode() ^ Title.GetHashCode() ^ Year.GetHashCode();
}
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
CUEMetadata metadata = obj as CUEMetadata; CUEMetadata metadata = obj as CUEMetadata;
@@ -127,11 +144,14 @@ namespace CUETools.Processor
return false; return false;
if (TotalDiscs != metadata.TotalDiscs || if (TotalDiscs != metadata.TotalDiscs ||
DiscNumber != metadata.DiscNumber || DiscNumber != metadata.DiscNumber ||
DiscName != metadata.DiscName ||
Year != metadata.Year || Year != metadata.Year ||
Genre != metadata.Genre || Genre != metadata.Genre ||
Artist != metadata.Artist || Artist != metadata.Artist ||
Title != metadata.Title || Title != metadata.Title ||
Catalog != metadata.Catalog || Barcode != metadata.Barcode ||
ReleaseDate != metadata.ReleaseDate ||
Label != metadata.Label ||
Tracks.Count != metadata.Tracks.Count Tracks.Count != metadata.Tracks.Count
) )
return false; return false;
@@ -156,11 +176,14 @@ namespace CUETools.Processor
// Tracks.Count = metadata.Tracks.Count; // Tracks.Count = metadata.Tracks.Count;
TotalDiscs = metadata.TotalDiscs; TotalDiscs = metadata.TotalDiscs;
DiscNumber = metadata.DiscNumber; DiscNumber = metadata.DiscNumber;
DiscName = metadata.DiscName;
Year = metadata.Year; Year = metadata.Year;
Genre = metadata.Genre; Genre = metadata.Genre;
Artist = metadata.Artist; Artist = metadata.Artist;
Title = metadata.Title; Title = metadata.Title;
Catalog = metadata.Catalog; Barcode = metadata.Barcode;
ReleaseDate = metadata.ReleaseDate;
Label = metadata.Label;
for (int i = 0; i < Tracks.Count; i++) for (int i = 0; i < Tracks.Count; i++)
{ {
Tracks[i].Title = metadata.Tracks[i].Title; Tracks[i].Title = metadata.Tracks[i].Title;
@@ -171,12 +194,18 @@ namespace CUETools.Processor
public void FillFromMusicBrainz(MusicBrainz.Release release, int firstAudio) public void FillFromMusicBrainz(MusicBrainz.Release release, int firstAudio)
{ {
string date = release.GetEvents().Count > 0 ? release.GetEvents()[0].Date : null; var evs = release.GetEvents();
Year = date == null ? "" : date.Substring(0, 4); if (evs.Count > 0)
{
var ev = evs[0];
ReleaseDate = ev.Date ?? "";
Year = (ev.Date ?? "").Substring(0, 4);
Barcode = ev.Barcode ?? "";
Label = ((ev.Label == null ? null : ev.Label.GetName()) ?? "") + (ev.Label == null ? "" : " ") + (ev.CatalogNumber ?? "");
}
Artist = release.GetArtist(); Artist = release.GetArtist();
Title = release.GetTitle(); Title = release.GetTitle();
// How to get Genre: http://mm.musicbrainz.org/ws/1/release/6fe1e218-2aee-49ac-94f0-7910ba2151df.html?type=xml&inc=tags // 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++) for (int i = 0; i < Tracks.Count; i++)
{ {
MusicBrainz.Track track = release.GetTracks()[i + firstAudio]; // !!!!!! - _toc.FirstAudio? MusicBrainz.Track track = release.GetTracks()[i + firstAudio]; // !!!!!! - _toc.FirstAudio?
@@ -184,7 +213,7 @@ namespace CUETools.Processor
Tracks[i].Artist = track.GetArtist(); Tracks[i].Artist = track.GetArtist();
} }
} }
public void FillFromFreedb(Freedb.CDEntry cdEntry, int firstAudio) public void FillFromFreedb(Freedb.CDEntry cdEntry, int firstAudio)
{ {
Year = cdEntry.Year; Year = cdEntry.Year;
@@ -198,6 +227,31 @@ namespace CUETools.Processor
} }
} }
public void FillFromCtdb(CUETools.CTDB.CTDBResponseMeta cdEntry, int firstAudio)
{
this.Year = cdEntry.year ?? "";
this.Genre = cdEntry.genre ?? "";
this.Artist = cdEntry.artist ?? "";
this.Title = cdEntry.album ?? "";
this.DiscNumber = cdEntry.discnumber ?? "";
this.TotalDiscs = cdEntry.disccount ?? "";
this.DiscName = cdEntry.discname ?? "";
this.Barcode = cdEntry.barcode ?? "";
this.ReleaseDate = cdEntry.releasedate ?? "";
this.Label = cdEntry.country ?? "";
if (cdEntry.label != null)
foreach (var l in cdEntry.label)
this.Label = (this.Label == "" ? "" : this.Label + ": ") + (l.name ?? "") + (l.name != null && l.catno != null ? " " : "") + (l.catno ?? "");
if (cdEntry.track != null && cdEntry.track.Length >= this.Tracks.Count)
{
for (int i = 0; i < this.Tracks.Count; i++)
{
this.Tracks[i].Title = cdEntry.track[i].name ?? "";
this.Tracks[i].Artist = cdEntry.track[i].artist ?? cdEntry.artist ?? "";
}
}
}
private static string FreedbToEncoding(Encoding iso, Encoding def, ref bool changed, ref bool error, string s) private static string FreedbToEncoding(Encoding iso, Encoding def, ref bool changed, ref bool error, string s)
{ {
try try
@@ -305,9 +359,11 @@ namespace CUETools.Processor
public override string ToString() public override string ToString()
{ {
return string.Format("{0}{1} - {2}", metadata.Year != "" ? metadata.Year + ": " : "", return string.Format("{0}{1} - {2}{3}{4}", metadata.Year != "" ? metadata.Year + ": " : "",
metadata.Artist == "" ? "Unknown Artist" : metadata.Artist, metadata.Artist == "" ? "Unknown Artist" : metadata.Artist,
metadata.Title == "" ? "Unknown Title" : metadata.Title); metadata.Title == "" ? "Unknown Title" : metadata.Title,
metadata.DiscNumberAndTotal != "" ? " (disc " + metadata.DiscNumberAndTotal + (metadata.DiscName != "" ? ": " + metadata.DiscName : "") + ")" : "",
metadata.Label == "" ? "" : " (" + metadata.Label + ")");
} }
} }
} }

View File

@@ -2056,7 +2056,7 @@ string status = processor.Go();
Genre = metadata.Genre; Genre = metadata.Genre;
Artist = metadata.Artist; Artist = metadata.Artist;
Title = metadata.Title; Title = metadata.Title;
Catalog = metadata.Catalog; Catalog = metadata.Barcode;
for (int i = 0; i < Tracks.Count; i++) for (int i = 0; i < Tracks.Count; i++)
{ {
Tracks[i].Title = metadata.Tracks[i].Title; Tracks[i].Title = metadata.Tracks[i].Title;
@@ -2076,7 +2076,7 @@ string status = processor.Go();
metadata.Genre = Genre; metadata.Genre = Genre;
metadata.Artist = Artist; metadata.Artist = Artist;
metadata.Title = Title; metadata.Title = Title;
metadata.Catalog = Catalog; metadata.Barcode = Catalog;
for (int i = 0; i < Tracks.Count; i++) for (int i = 0; i < Tracks.Count; i++)
{ {
metadata.Tracks[i].Title = Tracks[i].Title; metadata.Tracks[i].Title = Tracks[i].Title;
@@ -2220,7 +2220,7 @@ string status = processor.Go();
_localDB.Save(); _localDB.Save();
} }
public List<object> LookupAlbumInfo(bool useFreedb, bool useMusicBrainz, bool useCache, bool useCUE) public List<object> LookupAlbumInfo(bool useFreedb, bool useMusicBrainz, bool useCTDB, bool useCache, bool useCUE)
{ {
List<object> Releases = new List<object>(); List<object> Releases = new List<object>();
StringCollection DiscIds = new StringCollection(); StringCollection DiscIds = new StringCollection();
@@ -2275,6 +2275,22 @@ string status = processor.Go();
Releases.Add(new CUEMetadataEntry(entry.Metadata, TOC, "local")); Releases.Add(new CUEMetadataEntry(entry.Metadata, TOC, "local"));
} }
bool ctdbFound = false;
if (useCTDB)
{
ShowProgress("Looking up album via CTDB...", 0.0, null, null);
var ctdb = new CUEToolsDB(TOC, proxy);
ctdb.ContactDB("CUETools " + CUEToolsVersion, null, true, true);
foreach (var meta in ctdb.Metadata)
{
CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
metadata.FillFromCtdb(meta, TOC.FirstAudio - 1);
CDImageLayout toc = TOC; // TocFromCDEntry(meta);
Releases.Add(new CUEMetadataEntry(metadata, toc, "ctdb"));
ctdbFound = true;
}
}
if (useFreedb) if (useFreedb)
{ {
ShowProgress("Looking up album via Freedb...", 0.0, null, null); ShowProgress("Looking up album via Freedb...", 0.0, null, null);
@@ -2337,7 +2353,7 @@ string status = processor.Go();
} }
} }
if (useMusicBrainz) if (useMusicBrainz && !ctdbFound)
{ {
ShowProgress("Looking up album via MusicBrainz...", 0.0, null, null); ShowProgress("Looking up album via MusicBrainz...", 0.0, null, null);
@@ -3191,13 +3207,13 @@ string status = processor.Go();
_padding += _eacLog.Length; _padding += _eacLog.Length;
} }
public void UseCUEToolsDB(bool submit, string userAgent, string driveName) public void UseCUEToolsDB(bool submit, string userAgent, string driveName, bool meta, bool fuzzy)
{ {
ShowProgress((string)"Contacting CUETools database...", 0, null, null); ShowProgress((string)"Contacting CUETools database...", 0, null, null);
_CUEToolsDB = new CUEToolsDB(_toc, proxy); _CUEToolsDB = new CUEToolsDB(_toc, proxy);
_CUEToolsDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress); _CUEToolsDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress);
_CUEToolsDB.ContactDB(userAgent, driveName); _CUEToolsDB.ContactDB(userAgent, driveName, meta, fuzzy);
if (!_toc[_toc.TrackCount].IsAudio && DataTrackLength == 0) if (!_toc[_toc.TrackCount].IsAudio && DataTrackLength == 0)
foreach (DBEntry e in _CUEToolsDB.Entries) foreach (DBEntry e in _CUEToolsDB.Entries)
@@ -6318,7 +6334,7 @@ string status = processor.Go();
} }
case "repair": case "repair":
{ {
UseCUEToolsDB(false, "CUETools " + CUEToolsVersion, null); UseCUEToolsDB(false, "CUETools " + CUEToolsVersion, null, false, true);
Action = CUEAction.Verify; Action = CUEAction.Verify;
if (CTDB.DBStatus != null) if (CTDB.DBStatus != null)
return CTDB.DBStatus; return CTDB.DBStatus;

View File

@@ -345,5 +345,30 @@ namespace CUETools.TestParity
Assert.AreEqual<string>("YJPyo4+KY35P+DpljMplMGbMWXmpvhkdDOCKeEo4NDoRPPW7D0cv8hmLb7yZujp0sVg/6AEWKY5QrDKkiYp0Zw==", Assert.AreEqual<string>("YJPyo4+KY35P+DpljMplMGbMWXmpvhkdDOCKeEo4NDoRPPW7D0cv8hmLb7yZujp0sVg/6AEWKY5QrDKkiYp0Zw==",
Convert.ToBase64String(bsyn)); Convert.ToBase64String(bsyn));
} }
/// <summary>
///Verifying rip that has errors
///</summary>
[TestMethod()]
//[Ignore]
public void CDRepairVerifyParitySpeedTest()
{
var generator1 = new TestImageGenerator("0 98011", seed, 32 * 588, 0);
var encode1 = generator1.CreateCDRepairEncode(stride, npar);
var generator2 = new TestImageGenerator("0 98011", seed, 32 * 588, errors/2);
var decode = generator2.CreateCDRepairEncode(stride, npar);
int actualOffset;
bool hasErrors;
Assert.IsTrue(decode.FindOffset(encode1.NPAR, encode1.Parity, 0, encode1.CRC, out actualOffset, out hasErrors));
Assert.IsTrue(hasErrors, "doesn't have errors");
Assert.AreEqual(0, actualOffset, "wrong offset");
for (int t = 0; t < 1000; t++)
decode.VerifyParity(encode1.Parity, actualOffset);
CDRepairFix fix = decode.VerifyParity(encode1.Parity, actualOffset);
Assert.IsTrue(fix.HasErrors, "doesn't have errors");
Assert.IsTrue(fix.CanRecover, "cannot recover");
generator2.Write(fix);
Assert.AreEqual<uint>(encode1.CRC, fix.CRC);
}
} }
} }

View File

@@ -6,6 +6,9 @@ using System.Text;
using System.Collections.Generic; using System.Collections.Generic;
using CUETools.Processor; using CUETools.Processor;
using CUETools.AccurateRip; using CUETools.AccurateRip;
using CUETools.CTDB;
using System.Xml.Serialization;
using System.IO;
namespace CUETools.TestProcessor namespace CUETools.TestProcessor
{ {
@@ -115,5 +118,21 @@ namespace CUETools.TestProcessor
target.Open("Amarok\\Amarok.cue"); target.Open("Amarok\\Amarok.cue");
Assert.AreEqual<string>("00041f6d-00083ece-020e1201", AccurateRipVerify.CalculateAccurateRipId(target.TOC), "Wrong TOC"); Assert.AreEqual<string>("00041f6d-00083ece-020e1201", AccurateRipVerify.CalculateAccurateRipId(target.TOC), "Wrong TOC");
} }
[TestMethod()]
[Ignore]
public void CTDBResponseTest()
{
XmlSerializer serializer = new XmlSerializer(typeof(CTDBResponse));
string respXml = File.ReadAllText("Z:\\ctdb.xml");
CTDBResponse resp;
using (TextReader reader = new StringReader(respXml))
resp = serializer.Deserialize(reader) as CTDBResponse;
var writer = new StringWriter();
serializer.Serialize(writer, resp);
Assert.AreEqual(respXml, writer.ToString());
}
} }
} }

View File

@@ -173,10 +173,10 @@ namespace JDP {
// } // }
//} //}
if (FileBrowserState == FileBrowserStateEnum.Hidden if ((FileBrowserState == FileBrowserStateEnum.Hidden
|| (FileBrowserState == FileBrowserStateEnum.Tree || (FileBrowserState == FileBrowserStateEnum.Tree
&& !(fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder) && !(fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder)))
&& !Directory.Exists(InputPath))) && !Directory.Exists(InputPath))
{ {
StartConvert(); StartConvert();
return; return;
@@ -873,7 +873,7 @@ namespace JDP {
if (useLocalDB) if (useLocalDB)
cueSheet.UseLocalDB(_localDB); cueSheet.UseLocalDB(_localDB);
if (useCUEToolsDB) if (useCUEToolsDB)
cueSheet.UseCUEToolsDB(false, "CUETools " + CUESheet.CUEToolsVersion, null); cueSheet.UseCUEToolsDB(false, "CUETools " + CUESheet.CUEToolsVersion, null, false, true);
if (useAR) if (useAR)
cueSheet.UseAccurateRip(); cueSheet.UseAccurateRip();
@@ -902,7 +902,7 @@ namespace JDP {
{ {
frmChoice dlg = new frmChoice(); frmChoice dlg = new frmChoice();
dlg.CUE = cueSheet; dlg.CUE = cueSheet;
dlg.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked, _profile._config.advanced.CacheMetadata, true); dlg.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked, false, _profile._config.advanced.CacheMetadata, true);
dlgRes = dlg.ShowDialog(this); dlgRes = dlg.ShowDialog(this);
if (dlgRes == DialogResult.Cancel) if (dlgRes == DialogResult.Cancel)
{ {
@@ -1146,7 +1146,7 @@ namespace JDP {
toolStripStatusLabelProcessed.Text = String.Format("{0}@{1}", toolStripProgressBar2.ToolTipText, speedStr); toolStripStatusLabelProcessed.Text = String.Format("{0}@{1}", toolStripProgressBar2.ToolTipText, speedStr);
toolStripStatusLabelProcessed.Visible = true; toolStripStatusLabelProcessed.Visible = true;
} }
toolStripStatusLabel1.Text = e.status; toolStripStatusLabel1.Text = e.status.Replace("&", "&&");
toolStripProgressBar2.Value = Math.Max(0, Math.Min(100, (int)(e.percent * 100))); toolStripProgressBar2.Value = Math.Max(0, Math.Min(100, (int)(e.percent * 100)));
toolStripStatusLabelAR.Enabled = e.cueSheet != null && e.cueSheet.ArVerify != null && e.cueSheet.ArVerify.ARStatus == null; toolStripStatusLabelAR.Enabled = e.cueSheet != null && e.cueSheet.ArVerify != null && e.cueSheet.ArVerify.ARStatus == null;
@@ -2128,7 +2128,7 @@ namespace JDP {
CueSheet.UseLocalDB(_localDB); CueSheet.UseLocalDB(_localDB);
frmChoice dlg = new frmChoice(); frmChoice dlg = new frmChoice();
dlg.CUE = CueSheet; dlg.CUE = CueSheet;
dlg.LookupAlbumInfo(true, true, true, node is FileSystemTreeNodeLocalDBEntry); dlg.LookupAlbumInfo(true, true, true, true, node is FileSystemTreeNodeLocalDBEntry);
var dlgRes = dlg.ShowDialog(this); var dlgRes = dlg.ShowDialog(this);
if (dlgRes == DialogResult.OK && dlg.ChosenRelease != null) if (dlgRes == DialogResult.OK && dlg.ChosenRelease != null)
{ {

View File

@@ -687,45 +687,6 @@
<data name="toolStripInput.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="toolStripInput.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
</data> </data>
<data name="toolStripLabelInput.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 21</value>
</data>
<data name="toolStripLabelInput.Text" xml:space="preserve">
<value>Input:</value>
</data>
<data name="toolStripMenuItemInputBrowserFiles.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserFiles.Text" xml:space="preserve">
<value>Folder browser</value>
</data>
<data name="toolStripMenuItemInputBrowserMulti.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserMulti.Text" xml:space="preserve">
<value>Multiselect Browser</value>
</data>
<data name="toolStripMenuItemInputBrowserDrag.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserDrag.Text" xml:space="preserve">
<value>Drag'n'drop mode</value>
</data>
<data name="toolStripMenuItemInputBrowserHide.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserHide.Text" xml:space="preserve">
<value>Hide browser</value>
</data>
<data name="toolStripSplitButtonInputBrowser.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="toolStripSplitButtonInputBrowser.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 21</value>
</data>
<data name="toolStripSplitButtonInputBrowser.Text" xml:space="preserve">
<value>Open/close input browser</value>
</data>
<data name="toolStripInput.Location" type="System.Drawing.Point, System.Drawing"> <data name="toolStripInput.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value> <value>0, 0</value>
</data> </data>
@@ -2193,6 +2154,45 @@
<data name="&gt;&gt;comboBoxAudioFormat.ZOrder" xml:space="preserve"> <data name="&gt;&gt;comboBoxAudioFormat.ZOrder" xml:space="preserve">
<value>10</value> <value>10</value>
</data> </data>
<data name="toolStripLabelInput.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 21</value>
</data>
<data name="toolStripLabelInput.Text" xml:space="preserve">
<value>Input:</value>
</data>
<data name="toolStripSplitButtonInputBrowser.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="toolStripSplitButtonInputBrowser.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 21</value>
</data>
<data name="toolStripSplitButtonInputBrowser.Text" xml:space="preserve">
<value>Open/close input browser</value>
</data>
<data name="toolStripMenuItemInputBrowserFiles.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserFiles.Text" xml:space="preserve">
<value>Folder browser</value>
</data>
<data name="toolStripMenuItemInputBrowserMulti.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserMulti.Text" xml:space="preserve">
<value>Multiselect Browser</value>
</data>
<data name="toolStripMenuItemInputBrowserDrag.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserDrag.Text" xml:space="preserve">
<value>Drag'n'drop mode</value>
</data>
<data name="toolStripMenuItemInputBrowserHide.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 22</value>
</data>
<data name="toolStripMenuItemInputBrowserHide.Text" xml:space="preserve">
<value>Hide browser</value>
</data>
<data name="toolStripLabelOutput.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripLabelOutput.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 24</value> <value>48, 24</value>
</data> </data>

View File

@@ -35,21 +35,23 @@ namespace JDP
this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox1 = new System.Windows.Forms.TextBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.tableLayoutPanelMeta = new System.Windows.Forms.TableLayoutPanel();
this.listTracks = new System.Windows.Forms.ListView(); this.listTracks = new System.Windows.Forms.ListView();
this.Title = new System.Windows.Forms.ColumnHeader(); this.Title = new System.Windows.Forms.ColumnHeader();
this.TrackNo = new System.Windows.Forms.ColumnHeader(); this.TrackNo = new System.Windows.Forms.ColumnHeader();
this.Start = new System.Windows.Forms.ColumnHeader(); this.Start = new System.Windows.Forms.ColumnHeader();
this.Length = new System.Windows.Forms.ColumnHeader(); this.Length = new System.Windows.Forms.ColumnHeader();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.listMetadata = new System.Windows.Forms.ListView(); this.listMetadata = new System.Windows.Forms.ListView();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); this.columnHeaderMetadataValue = new System.Windows.Forms.ColumnHeader();
this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); this.columnHeaderMetadataName = new System.Windows.Forms.ColumnHeader();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.tableLayoutPanelMeta.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// buttonOk // buttonOk
@@ -89,6 +91,7 @@ namespace JDP
this.imageList1.Images.SetKeyName(3, "cue"); this.imageList1.Images.SetKeyName(3, "cue");
this.imageList1.Images.SetKeyName(4, "tags"); this.imageList1.Images.SetKeyName(4, "tags");
this.imageList1.Images.SetKeyName(5, "local"); this.imageList1.Images.SetKeyName(5, "local");
this.imageList1.Images.SetKeyName(6, "ctdb");
// //
// textBox1 // textBox1
// //
@@ -97,78 +100,16 @@ namespace JDP
this.textBox1.Name = "textBox1"; this.textBox1.Name = "textBox1";
this.textBox1.ReadOnly = true; this.textBox1.ReadOnly = true;
// //
// listTracks
//
this.listTracks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.Title,
this.TrackNo,
this.Start,
this.Length});
resources.ApplyResources(this.listTracks, "listTracks");
this.listTracks.FullRowSelect = true;
this.listTracks.GridLines = true;
this.listTracks.LabelEdit = true;
this.listTracks.Name = "listTracks";
this.listTracks.UseCompatibleStateImageBehavior = false;
this.listTracks.View = System.Windows.Forms.View.Details;
this.listTracks.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.listTracks_AfterLabelEdit);
this.listTracks.DoubleClick += new System.EventHandler(this.listTracks_DoubleClick);
this.listTracks.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.listTracks_PreviewKeyDown);
this.listTracks.BeforeLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.listTracks_BeforeLabelEdit);
this.listTracks.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listTracks_KeyDown);
//
// Title
//
resources.ApplyResources(this.Title, "Title");
//
// TrackNo
//
resources.ApplyResources(this.TrackNo, "TrackNo");
//
// Start
//
resources.ApplyResources(this.Start, "Start");
//
// Length
//
resources.ApplyResources(this.Length, "Length");
//
// tableLayoutPanel1 // tableLayoutPanel1
// //
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.Controls.Add(this.listMetadata, 0, 3); this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 1); this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.listTracks, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.listChoices, 0, 0); this.tableLayoutPanel1.Controls.Add(this.listChoices, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 2); this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanelMeta, 0, 3);
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.Name = "tableLayoutPanel1";
// //
// listMetadata
//
this.listMetadata.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader2,
this.columnHeader3});
resources.ApplyResources(this.listMetadata, "listMetadata");
this.listMetadata.FullRowSelect = true;
this.listMetadata.GridLines = true;
this.listMetadata.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listMetadata.LabelEdit = true;
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.DoubleClick += new System.EventHandler(this.listMetadata_DoubleClick);
this.listMetadata.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listMetadata_KeyDown);
//
// columnHeader2
//
resources.ApplyResources(this.columnHeader2, "columnHeader2");
//
// columnHeader3
//
resources.ApplyResources(this.columnHeader3, "columnHeader3");
//
// tableLayoutPanel2 // tableLayoutPanel2
// //
resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
@@ -187,6 +128,68 @@ namespace JDP
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted); this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
// //
// tableLayoutPanelMeta
//
resources.ApplyResources(this.tableLayoutPanelMeta, "tableLayoutPanelMeta");
this.tableLayoutPanelMeta.Controls.Add(this.listMetadata, 0, 0);
this.tableLayoutPanelMeta.Controls.Add(this.listTracks, 1, 0);
this.tableLayoutPanelMeta.Name = "tableLayoutPanelMeta";
//
// listTracks
//
this.listTracks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.Title,
this.TrackNo,
this.Start,
this.Length});
resources.ApplyResources(this.listTracks, "listTracks");
this.listTracks.FullRowSelect = true;
this.listTracks.GridLines = true;
this.listTracks.LabelEdit = true;
this.listTracks.Name = "listTracks";
this.listTracks.UseCompatibleStateImageBehavior = false;
this.listTracks.View = System.Windows.Forms.View.Details;
this.listTracks.DoubleClick += new System.EventHandler(this.listTracks_DoubleClick);
//
// Title
//
resources.ApplyResources(this.Title, "Title");
//
// TrackNo
//
resources.ApplyResources(this.TrackNo, "TrackNo");
//
// Start
//
resources.ApplyResources(this.Start, "Start");
//
// Length
//
resources.ApplyResources(this.Length, "Length");
//
// listMetadata
//
this.listMetadata.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeaderMetadataValue,
this.columnHeaderMetadataName});
resources.ApplyResources(this.listMetadata, "listMetadata");
this.listMetadata.FullRowSelect = true;
this.listMetadata.GridLines = true;
this.listMetadata.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.listMetadata.LabelEdit = true;
this.listMetadata.Name = "listMetadata";
this.listMetadata.UseCompatibleStateImageBehavior = false;
this.listMetadata.View = System.Windows.Forms.View.Details;
this.listMetadata.DoubleClick += new System.EventHandler(this.listMetadata_DoubleClick);
//
// columnHeaderMetadataValue
//
resources.ApplyResources(this.columnHeaderMetadataValue, "columnHeaderMetadataValue");
//
// columnHeaderMetadataName
//
resources.ApplyResources(this.columnHeaderMetadataName, "columnHeaderMetadataName");
//
// frmChoice // frmChoice
// //
this.AcceptButton = this.buttonOk; this.AcceptButton = this.buttonOk;
@@ -203,6 +206,7 @@ namespace JDP
this.tableLayoutPanel1.PerformLayout(); this.tableLayoutPanel1.PerformLayout();
this.tableLayoutPanel2.ResumeLayout(false); this.tableLayoutPanel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.tableLayoutPanelMeta.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@@ -214,17 +218,18 @@ namespace JDP
private System.Windows.Forms.ImageList imageList1; private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.ListView listChoices; private System.Windows.Forms.ListView listChoices;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMeta;
private System.Windows.Forms.ListView listMetadata;
private System.Windows.Forms.ColumnHeader columnHeaderMetadataValue;
private System.Windows.Forms.ColumnHeader columnHeaderMetadataName;
private System.Windows.Forms.ListView listTracks; private System.Windows.Forms.ListView listTracks;
private System.Windows.Forms.ColumnHeader Title; private System.Windows.Forms.ColumnHeader Title;
private System.Windows.Forms.ColumnHeader TrackNo; private System.Windows.Forms.ColumnHeader TrackNo;
private System.Windows.Forms.ColumnHeader Length;
private System.Windows.Forms.ColumnHeader Start; private System.Windows.Forms.ColumnHeader Start;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.ColumnHeader Length;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.ListView listMetadata;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
private System.Windows.Forms.PictureBox pictureBox1;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
} }
} }

View File

@@ -20,15 +20,16 @@ namespace JDP
public CUESheet CUE; public CUESheet CUE;
private bool freedb, musicbrainz; private bool freedb, musicbrainz, ctdb;
public void LookupAlbumInfo(bool freedb, bool musicbrainz, bool cache, bool cue) public void LookupAlbumInfo(bool freedb, bool musicbrainz, bool ctdb, bool cache, bool cue)
{ {
this.freedb = freedb; this.freedb = freedb;
this.musicbrainz = musicbrainz; this.musicbrainz = musicbrainz;
var releases = CUE.LookupAlbumInfo(false, false, cache, cue); this.ctdb = ctdb;
var releases = CUE.LookupAlbumInfo(false, false, false, cache, cue);
this.Choices = releases; this.Choices = releases;
if (freedb || musicbrainz) if (freedb || musicbrainz || ctdb)
backgroundWorker1.RunWorkerAsync(null); backgroundWorker1.RunWorkerAsync(null);
} }
@@ -92,20 +93,16 @@ namespace JDP
{ {
textBox1.Hide(); textBox1.Hide();
pictureBox1.Hide(); pictureBox1.Hide();
listTracks.Show(); tableLayoutPanelMeta.Show();
listMetadata.Show(); tableLayoutPanel1.SetRowSpan(listChoices, 2);
tableLayoutPanel1.SetRowSpan(listChoices, 3);
tableLayoutPanel1.PerformLayout(); tableLayoutPanel1.PerformLayout();
} }
else else
{ {
textBox1.Show(); textBox1.Show();
pictureBox1.Hide(); pictureBox1.Hide();
listTracks.Hide(); tableLayoutPanelMeta.Hide();
listMetadata.Hide(); tableLayoutPanel1.SetRowSpan(textBox1, 3);
tableLayoutPanel1.SetRowSpan(textBox1, 4);
//tableLayoutPanel1.RowStyles[2].Height = 0;
//tableLayoutPanel1.RowStyles[3].Height = 0;
tableLayoutPanel1.PerformLayout(); tableLayoutPanel1.PerformLayout();
} }
if (listChoices.Items.Count > 0) if (listChoices.Items.Count > 0)
@@ -180,7 +177,8 @@ namespace JDP
catch { } catch { }
textBox1.Hide(); textBox1.Hide();
pictureBox1.Show(); pictureBox1.Show();
tableLayoutPanel1.SetRowSpan(pictureBox1, 4); tableLayoutPanelMeta.Hide();
tableLayoutPanel1.SetRowSpan(pictureBox1, 2);
} }
else if (item != null && item is CUEToolsSourceFile) else if (item != null && item is CUEToolsSourceFile)
{ {
@@ -207,6 +205,10 @@ namespace JDP
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Genre, "Genre" })); 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.DiscNumber, "Disc Number" }));
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.TotalDiscs, "Total Discs" })); listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.TotalDiscs, "Total Discs" }));
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.DiscName, "Disc Name" }));
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Barcode, "Barcode" }));
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.ReleaseDate, "ReleaseDate" }));
listMetadata.Items.Add(new ListViewItem(new string[] { r.metadata.Label, "Label" }));
} }
else else
{ {
@@ -287,6 +289,10 @@ namespace JDP
case 3: r.metadata.Genre = e.Label; break; case 3: r.metadata.Genre = e.Label; break;
case 4: r.metadata.DiscNumber = e.Label; break; case 4: r.metadata.DiscNumber = e.Label; break;
case 5: r.metadata.TotalDiscs = e.Label; break; case 5: r.metadata.TotalDiscs = e.Label; break;
case 6: r.metadata.DiscName = e.Label; break;
case 7: r.metadata.Barcode = e.Label; break;
case 8: r.metadata.ReleaseDate = e.Label; break;
case 9: r.metadata.Label = e.Label; break;
} }
item.Text = r.ToString(); item.Text = r.ToString();
} }
@@ -300,7 +306,7 @@ namespace JDP
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{ {
e.Result = CUE.LookupAlbumInfo(this.freedb, this.musicbrainz, false, false); e.Result = CUE.LookupAlbumInfo(this.freedb, this.musicbrainz, this.ctdb, false, false);
} }
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

View File

@@ -123,10 +123,10 @@
</data> </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing"> <data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
<value>456, 3</value> <value>631, 3</value>
</data> </data>
<data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing"> <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 28</value> <value>154, 29</value>
</data> </data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="buttonOk.TabIndex" type="System.Int32, mscorlib"> <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
@@ -148,7 +148,7 @@
<value>0</value> <value>0</value>
</data> </data>
<data name="columnHeader1.Width" type="System.Int32, mscorlib"> <data name="columnHeader1.Width" type="System.Int32, mscorlib">
<value>520</value> <value>757</value>
</data> </data>
<data name="listChoices.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="listChoices.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
@@ -157,7 +157,7 @@
<value>3, 3</value> <value>3, 3</value>
</data> </data>
<data name="listChoices.Size" type="System.Drawing.Size, System.Drawing"> <data name="listChoices.Size" type="System.Drawing.Size, System.Drawing">
<value>569, 114</value> <value>788, 144</value>
</data> </data>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
@@ -166,115 +166,143 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAy ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACm
GQAAAk1TRnQBSQFMAgEBBgEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA HwAAAk1TRnQBSQFMAgEBBwEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIB4AAx0BKgJDAUIBdwMdASrwAAMdASkCQgFBAXQC/wHwAf8CQgFBAXQDHQEp AwABIAMAAQEBAAEgBgABIB4AAx0BKgNDAXcDHQEqeAABLwEsASoBOwFxAWEBUQGUAZkBeQFaAc4BrAGC
6AADHAEoA0ABcQL/AfAB/wLpAdoD/wHxAf8DQAFxAxwBKCAAAzYBWQNCAXYDQgF2AzABSwQAAzABSwNC AVkB6wGsAYIBWQHrAZkBeQFaAc4BcQFhAVEBlAIAAeIB/wIAAeIB/1QAAx0BKQNCAXQC/wHwAf8DQgF0
AXYDQgF2A0IBdgNCAXYDMAFLBAADMAFLA0IBdgNCAXYDNgFZgAADHAEnA0ABbwL/AfAB/wHrAd0BsQH/ Ax0BKWwAAwoBDQFyAWEBUgGWAbQBhQFXAfoB4QHNAbkB/wHxAeABzgH/AfkB5wHWAf8B+AHmAdQB/wHw
AfcBwQE2Af8B7QHfAbMD/wHyAf8DQAFvAxwBJxwAA0EBcgL5AekB/wLzAeMB/wJeAVsBtQNDAXgCawFn Ad0BzAH/AeEBzQG5Af8CAAHiAf8CAAHiAf8DCgENTAADHAEoA0ABcQL/AfAB/wLpAdoD/wHxAf8DQAFx
AcMC8wHjAf8C8wHjAf8C8wHjAf8C8wHjAf8CawFnAcMDQwF4Al4BWwG1AvMB4wH/AvkB6QH/A0EBcoAA AxwBKCAAAzYBWQNCAXYDQgF2AzABSwQAAzABSwNCAXYDQgF2A0IBdgNCAXYDMAFLBAADMAFLA0IBdgNC
A0ABbgL/AfAB/wLpAdoB/wHnAasBIAH/AecBqwEgAf8B5wGrASAB/wHqAdsBsAP/AfQB/wNAAW4DHAEn AXYDNgFZBAADCgENAYoBcAFXAbgB2QG/AaUB/wH+AfIB5AL/AecBzwH/AfwB2wG7Af8B+QHTAbIB/wH2
GAADQAFvAvQB5gH/AukB2gH/Au8B4AH/AvQB5gH/Au8B4AH/AukB2gH/AukB2gH/AukB2gH/AukB2gH/ AdABrAH/AfQB0QGuAf8B9gHYAbsB/wIAAeIB/wIAAeIB/wGKAXABVwG4AwoBDUQAAxwBJwNAAW8C/wHw
Au8B4AH/AvQB5gH/Au8B4AH/AukB2gH/AvQB5gH/A0ABb4AAAxwBJwM/AW0C/wHxAf8B5wHXAasB/wHX Af8B6wHdAbEB/wH3AcEBNQH/Ae0B3wGzA/8B8gH/A0ABbwMcASccAANBAXIC+QHpAf8C8wHjAf8CWwFZ
AZYBCwH/AdcBlgELAf8B1wGWAQsB/wHoAdgBrgP/AfUB/wM/AW0DHAEnFAADQAFuAvYB6AH/AusB3gH/ AbUDQwF4AmUBYwHDAvMB4wH/AvMB4wH/AvMB4wH/AvMB4wH/AmUBYwHDA0MBeAJbAVkBtQLzAeMB/wL5
AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/AusB3gH/ AekB/wNBAXIEAAFyAWEBUgGWAdkBvwGlAv8B+AHrAv8B6wHRAv8B4QHDAf8B/gHbAboB/wH7AdYBsgH/
AusB3gH/AvYB6AH/A0ABboQAAxsBJgM/AWwC/wHyAf8B5QHUAakB/wHNAYkBAAH/Ac0BiQEAAf8BzQGJ AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/QAADQAFuAv8B8AH/
AQAB/wHoAdcBrwP/AfcB/wM/AWwDGwEmEAADPwFtAvcB7AH/Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/ AukB2gH/AecBqwEfAf8B5wGrAR8B/wHnAasBHwH/AeoB2wGwA/8B9AH/A0ABbgMcAScYAANAAW8C9AHm
Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/Au4B4wH/AvcB7AH/Az8BbYgA Af8C6QHaAf8C7wHgAf8C9AHmAf8C7wHgAf8C6QHaAf8C6QHaAf8C6QHaAf8C6QHaAf8C7wHgAf8C9AHm
AxsBJgM+AWsC/wH0Af8B5wHWAawB/wHRAY4BAwH/AdEBjgEDAf8B0QGOAQMB/wHsAdsBswP/AfgB/wM+ Af8C7wHgAf8C6QHaAf8C9AHmAf8DQAFvAS0BKgEoATgBtwGHAVcB/QL+AfoC/wH5AekC/wHvAdgC/wHn
AWsDGwEmDAADPgFrAvkB7wH/AvEB6AH/AvEB6AH/AvEB6AH/AvEB6AH/AvEB6AH/AwAB/wFOAYUBkwH/ Ac0C/wHhAcIB/wH8AdwBuwH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/AgAB4gH/
AbgCywH/AvEB6AH/AvEB6AH/AvEB6AH/AvEB6AH/AvkB7wH/Az4Ba4wAAxsBJgM+AWsC/wH1Af8B6wHc AgAB4gH/QAADHAEnAz8BbQL/AfEB/wHnAdcBqwH/AdcBlgEKAf8B1wGWAQoB/wHXAZYBCgH/AegB2AGu
AbMB/wHfAaEBFgH/Ad8BoQEWAf8B3wGhARYB/wHxAeIBuwP/AfoB/wM+AWsDGwEmCAADPgFqAvoB8wH/ A/8B9QH/Az8BbQMcAScUAANAAW4C9gHoAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHe
AvUB7gH/AvUB7gH/AvUB7gH/AvUB7gH/AvUB7gH/AXkBsQHAAf8B2QH0Av8BPAGcAasB/wG1AdMB1AH/ Af8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C9gHoAf8DQAFuAXIBYQFSAZYB4gHO
AvUB7gH/AvUB7gH/AvUB7gH/AvoB8wH/Az4BapAAAxsBJgM+AWoC/wH3Af8B8gHkAbsB/wHwAbgBLQH/ AboB/wH3Ad4BxgL/AekB0QL/AfYB4gL/AfIB3QL/AfAB3QH/AfgB6gHZAf8B+AHmAdQB/wH7Ad8BxwH/
AfABuAEtAf8B8AG4AS0B/wL4AfQD/wH7Af8DPgFqAxoBJQQAAz0BaQL8AfcB/wL4AfMB/wL4AfMB/wL4 AfUBzwGrAf8CAAHiAf8CAAHiAf8B+AHdAcMB/wHiAc4BugH/AXIBYQFSAZZEAAMbASYDPwFsAv8B8gH/
AfMB/wL4AfMB/wL4AfMB/wHUAeYB5wH/AUYBtAHDAf8BdgHmAfcB/wE9AZ0BrQH/AbYB1QHXAf8C+AHz AeUB1AGpAf8BzQGJAQAB/wHNAYkBAAH/Ac0BiQEAAf8B6AHXAa8D/wH3Af8DPwFsAxsBJhAAAz8BbQL3
Af8C+AHzAf8C/AH3Af8DPQFplAADGgElAz0BaQL/AfgB/wH3AeoBwwH/Af0ByQE+Af8B+QHsAccB/wL7 AewB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLuAeMB/wLu
AfcB/wL8AfkD/wH8Af8DPQFpAxoBJQM9AWgC/QH6Af8C+wH3Af8C+wH3Af8C+wH3Af8C+wH3Af8C+wH3 AeMB/wLuAeMB/wLuAeMB/wL3AewB/wM/AW0BmgF5AVoB0AHvAeAB0AH/AecBvgGWAf8B5wG8AZQB/wHw
Af8C+wH3Af8BvgHlAegB/wFHAbUBxQH/AXYB5gH3Af8BPgGeAa4B/wG5AdgB2wH/AvsB9wH/Av0B+gH/ AcwBqQH/Af4B7AHaAf8B3QHEAawB/wGpAYEBWgHnAakBgQFaAecB3QHDAaoB/wH4Ad0BxAH/AgAB4gH/
Az0BaJgAAxoBJQM9AWgC/wH6Af8C+AH0Af8C+wH3Af8C6AHeAf8C2AHJAf8C6AHeA/8B/gH/Az0BaAM9 AgAB4gH/AfUB1gG4Af8B8QHfAc8B/wGaAXkBWgHQSAADGwEmAz4BawL/AfQB/wHnAdYBrAH/AdEBjgEC
AWgC/gH9Af8C/QH7Af8C/QH7Af8C/QH7Af8C/QH7Af8C/QH7Af8C/QH7Af8C/QH7Af8BwAHmAesB/wFI Af8B0QGOAQIB/wHRAY4BAgH/AewB2wGzA/8B+AH/Az4BawMbASYMAAM+AWsC+QHvAf8C8QHoAf8C8QHo
AbUBxgH/AXYB5gH3Af8BPgGeAa8B/wG+AdgB3AH/Av4B/QH/Az0BaJwAAxoBJQM9AWgC/wH7Af8C/AH5 Af8C8QHoAf8C8QHoAf8C8QHoAf8DAAH/AU0BhQGTAf8BuALLAf8C8QHoAf8C8QHoAf8C8QHoAf8C8QHo
Af8CywG7Af8EAALLAbwD/wH+Af8DPQFoAz0BZyT/AcEB6AHuAf8BSAG2AccB/wF2AeYB9wH/A5MB/wPV Af8C+QHvAf8DPgFrAawBggFZAewB9QHkAdUB/wHpAb4BlwH/AegBvAGWAf8B5wG8AZQB/wHzAd4BygH/
Af8DPQFnoAADGgElAz0BZwL/AfwB/wLUAcoB/wKvAZ8B/wLUAcsD/wH+Af8DPQFnAzEBTQM8AWYDPAFm AagBgQFZAeYBFgEVARQBGwEWARUBFAEbAagBgQFZAeYB9gHjAdMB/wIAAeIB/wIAAeIB/wHtAckBpAH/
AzwBZgM8AWYDPAFmAzwBZgM8AWYDPAFmAzwBZgM8AWYDTAGMAlYBVAGnA/cB/wJUAVgBuwJEAUUBeqQA AfYB5AHSAf8BrAGCAVkB7EwAAxsBJgM+AWsC/wH1Af8B6wHcAbMB/wHfAaEBFQH/Ad8BoQEVAf8B3wGh
AxoBJAM9AWcC/wH+A/8B/gP/Af4F/wM9AWcwAAMaASQCRAFFAXwCgAL/AkgBagHBqAADGgEkAzwBZgM8 ARUB/wHxAeIBuwP/AfoB/wM+AWsDGwEmCAADPgFqAvoB8wH/AvUB7gH/AvUB7gH/AvUB7gH/AvUB7gH/
AWYDPAFmAzwBZgMxAU00AAMmATkCSwFjAa8DKgFAjAADAgEDAxQBHAMwAUwDRAF5A1ABmgNQAaQDUAGa AvUB7gH/AXgBsQHAAf8B2QH0Av8BOwGcAasB/wG1AdMB1AH/AvUB7gH/AvUB7gH/AvUB7gH/AvoB8wH/
A0QBeQMwAUwDFAEcAwMBBAgAA5YB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEc Az4BagGsAYIBWQHsAfUB5AHVAf8B6QG/AZkB/wHpAcABmQH/AekBwQGaAf8B8wHdAckB/wGoAYEBWQHm
AgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wEcAgAB/wQAAU8BzAL/ ARYBFQEUARsBFgEVARQBGwGoAYEBWQHmAfgB6AHZAf8B8gHSAbIB/wHwAcwBqwH/AfABzAGrAf8B9gHk
ARwCmQH/ARwCmQH/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/ AdMB/wGsAYIBWQHsUAADGwEmAz4BagL/AfcB/wHyAeQBuwH/AfABuAEsAf8B8AG4ASwB/wHwAbgBLAH/
AU8BzAL/AU8BzAL/AU8BzAL/EAADAgEDAxQBHAMwAUwDRAF5A1ABmgNQAaQDUAGaA0QBeQMwAUwDFAEc AvgB9AP/AfsB/wM+AWoDGgElBAADPQFpAvwB9wH/AvgB8wH/AvgB8wH/AvgB8wH/AvgB8wH/AvgB8wH/
AwMBBBAAAwQBBgMkATYDUwGwAWMCXgHlAXMCXwH7AbMCqQH/AXMCZAH7A2AB6wNaAdMDUwGsA0cBggMo AdQB5gHnAf8BRQG0AcMB/wF1AeYB9wH/ATwBnQGtAf8BtgHVAdcB/wL4AfMB/wL4AfMB/wL8AfcB/wM9
ATwDBwEJBAABzAKZAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8D6gH/A+oB/wPqAf8BgAIAAf8D6gH/ AWkBmgF5AVoB0AHwAeEB0QH/AeoBxAGhAf8B6QHBAZsB/wHpAcABlwH/AfEBzgGyAf8B3AHDAaoB/wGp
A+oB/wPqAf8BgAIAAf8BgAIAAf8BTwIAAf8BHAIAAf8BHAKZAf8DAAH/AxIB/wM2Af8DAAH/AwUB/wFP AYEBWgHnAakBgQFaAecB3QHEAawC/wH8AfMC/wH0AeUC/wHuAdoB/wH8AeUB0QH/AfEB4QHRAf8BmgF5
AcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wFPAcwC/wgA AVoB0FQAAxoBJQM9AWkC/wH4Af8B9wHqAcMB/wH9AckBPQH/AfkB7AHHAf8C+wH3Af8C/AH5A/8B/AH/
AwQBBgMkATYDUwGwAWMCXgHlAXMCXwH7AbMCqQH/AXMCZAH7A2AB6wNaAdMDUwGsA0cBggMoATwDBwEJ Az0BaQMaASUDPQFoAv0B+gH/AvsB9wH/AvsB9wH/AvsB9wH/AvsB9wH/AvsB9wH/AvsB9wH/Ab4B5QHo
CAADAgEDAzEBTwNcAeoBzwK0Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPPAf8DXwHzA1gBxgNMAZIDKAE8 Af8BRgG1AcUB/wF1AeYB9wH/AT0BngGuAf8BuQHYAdsB/wL7AfcB/wL9AfoB/wM9AWgBcgFhAVIBlgHi
AwMBBAHMApkB/wGAAgAB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8D8QH/AYACAAH/A/EB/wGA Ac4BugH/AfEB0gG2Af8B6wHBAZsB/wHrAb8BmQL/AeQB0wL/AegB2wH/AfMB2gHHAf8B+AHxAeQC/wH4
AgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8BHAIAAf8DAAH/A8wN/wM2Af8DBQH/AU8BzAL/AU8BzAL/ Ae0C/wH3AekC/wH+AfEC/wH8Ae8C/wH8AfIB/wHiAc4BugH/AXIBYQFSAZZYAAMaASUDPQFoAv8B+gH/
AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/BAADAgEDAzEBTwNcAeoBzwK0 AvgB9AH/AvsB9wH/AugB3gH/AtgByQH/AugB3gP/Af4B/wM9AWgDPQFoAv4B/QH/Av0B+wH/Av0B+wH/
Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPPAf8DXwHzA1gBxgNMAZIDKAE8AwMBBAQAAyYBOANtAfcB9QLH Av0B+wH/Av0B+wH/Av0B+wH/Av0B+wH/Av0B+wH/AcAB5gHrAf8BRwG1AcYB/wF1AeYB9wH/AT0BngGv
Av8C0gL/AtgC/wLdAv8C4gL/AugC/wL0Bf8D9QH/A4IB+wNYAcYDRwGCAxQBHAHMApkB/wGZAQABHAH/ Af8BvgHYAdwB/wL+Af0B/wM9AWgBLQEqASgBOAG3AYcBVwH9AfoB7QHhAf8B7AHHAaMC/wHsAdoF/wH3
AYACAAH/AYACAAX/AYACAAH/AYACAAX/AYACAAX/AYACAAH/AYACAAX/AYACAAH/AYACAAH/ARwCAAH/ Ac0BtgH/AewBvQGXAv8B9AHcA/8B9wL/AfcB6AP/AfMD/wH5Af8C/gH5Af8BtwGHAVcB/QEtASoBKAE4
AwAB/wPMEf8DAAH/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/AU8BzAL/ XAADGgElAz0BaAL/AfsB/wL8AfkB/wLLAbsB/wQAAssBvAP/Af4B/wM9AWgDPQFnJP8BwQHoAe4B/wFH
AU8BzAL/BAADJgE4A20B9wH1AscC/wLSAv8C2AL/At0C/wLiAv8C6AL/AvQF/wP1Af8DggH7A1gBxgNH AbYBxwH/AXUB5gH3Af8DkwH/A9UB/wM9AWcEAAFyAWEBUgGWAdkBvwGlAv8B+gHwBv8B/QHzAf8B8AHB
AYIDFAEcAwcBCQNeAd0B9QLNAv8CzwL/As0C/wLSAv8C2AL/At0C/wLiAv8C+gn/A/UB/wNfAfMDUwGs AaMB/wHuAcYBoAH/Af0B8AHRA/8B/gL/Af0B8AL/Af0B8QX/AdkBvwGlAf8BcgFhAVIBlmQAAxoBJQM9
AzABTAHMApkB/wGZAQABHAH/AYACAAH/AYACAAH/AYACAA3/AYACAA3/AYACAAH/AYACAAH/AYACAAH/ AWcC/wH8Af8C1AHKAf8CrwGfAf8C1AHLA/8B/gH/Az0BZwMxAU0DPAFmAzwBZgM8AWYDPAFmAzwBZgM8
ARwCAAH/ARwCmQH/AwUB/wNgAf8DwAH/A8AB/wPMAf8DAAH/AxIB/wMAAf8DAAH/AwAB/wMAAf8DEgH/ AWYDPAFmAzwBZgM8AWYDPAFmA0sBjAJUAVIBpwP3Af8CVgFYAbsDRAF6BAADCgENAYoBcAFXAbgB2QG/
AU8BzAL/AU8BzAL/AU8BzAL/AwcBCQNeAd0B9QLNAv8CzwL/As0C/wLSAv8C2AL/At0C/wLiAv8C+gn/ AaUB/wH+Af0B/AL/AfEB5AH/AfIBygGuAf8B8gHSAa0B/wH5Ae0ByAP/AfcD/wH9Af8B/gH9AfwB/wHZ
A/UB/wNfAfMDUwGsAzABTAM+AWoBxgKxAv8C2QL/AtQC/wLPAv8CzQL/AdQB2wL/AdcB4gL/AeQB6hH/ Ab8BpQH/AYoBcAFXAbgDCgENaAADGgEkAz0BZwL/Af4D/wH+A/8B/gX/Az0BZzAAAxoBJAJEAUUBfAKA
AdICzAH/A1oB0wNDAXcBzAKZAf8BmQEAARwB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAF/wGA Av8CTwFiAcEIAAMKAQ0BcgFhAVIBlgG0AYUBVwH6AeEBzQG5Af8B8QHiAdQB/wH5AewB3wH/AfsB8wHl
AgAF/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wEcAgAB/wFPAcwC/wEcApkB/wMFAf8DAAH/ Af8B9AHtAeQB/wHiAc4BuwH/AbQBhQFXAfoBcgFhAVIBlgMKAQ1wAAMaASQDPAFmAzwBZgM8AWYDPAFm
AwAF/wMAAf8DBQH/AaQCoAn/A5kB/wMSAf8DEgH/AU8BzAL/AU8BzAL/Az4BagHGArEC/wLZAv8C1AL/ AzEBTTQAAyYBOQJPAVwBrwMqAUAQAAEvASwBKgE7AXEBYQFRAZQBmQF5AVoBzgGsAYIBWQHrAa0BgwFY
As8C/wLNAv8B1AHbAv8B1wHiAv8B5AHqEf8B0gLMAf8DWgHTA0MBdwNWAbYB/wLjAf8BAAEXARgB/wEA Ae8BoAF8AVkB2QFzAWIBUQGXAS8BLAEqATtcAAMCAQMDFAEcAzABTANEAXkDUAGaA1ABpANQAZoDRAF5
ARcBGAH/AQABFwEYAv8B3gHnAf8BAAEXARgC/wHRAfMB/wEAARcBGAL/AfgC/wFXAl0B/wEAARcBGAH/ AzABTAMUARwDAwEECAADlgH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/
AVcCXQH/AcwCmQH/AVwCVQHqA04BlAHMApkB/wGZAQABHAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/ ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/ARsCAAH/BAABTgHMAv8BGwKZ
AYACAAX/AYACAAX/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/ARwCAAH/AU8BzAL/AU8BzAL/ Af8BGwKZAf8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHM
AU8BzAL/AU8BzAL/AwAF/wMAAf8DEhH/A8wB/wMAAf8BTwHMAv8BTwHMAv8DVgG2Af8C4wH/AVcCXQH/ Av8BTgHMAv8BTgHMAv8QAAMCAQMDFAEcAzABTANEAXkDUAGaA1ABpANQAZoDRAF5AzABTAMUARwDAwEE
AQABFwEYAf8BVwJdAv8B3gHnAf8BVwJdAf8BAAEXARgB/wFXAl0C/wH4Av8BAAEXARgB/wEAARcBGAH/ EAADBAEGAyQBNgNTAbABYwJeAeUBcAJfAfsBswKpAf8BcAJiAfsDYAHrA1oB0wNTAawDRwGCAygBPAMH
AQABFwEYAf8BzAKZAf8BXAJVAeoDTgGUA2EB4gH/AucB/wEAARcBGAL/At4C/wLgAv8B7wH8Af8BAAEX AQkEAAHMApkB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wPqAf8D6gH/A+oB/wGAAgAB/wPqAf8D6gH/
ARgC/wHiAfwB/wEAARcBGAH/AfwB8AH5Af8BAAEXARgB/wHMApkB/wEAARcBGAH/AcwCmQH/AW0CbAH3 A+oB/wGAAgAB/wGAAgAB/wFOAgAB/wEbAgAB/wEbApkB/wMAAf8DEQH/AzUB/wMAAf8DBAH/AU4BzAL/
A1EBoQHMApkB/wGZAQABHAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/ AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/AU4BzAL/CAADBAEG
AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/ARwCAAH/AZkCTwH/AZkCTwH/AZkCTwH/ AyQBNgNTAbABYwJeAeUBcAJfAfsBswKpAf8BcAJiAfsDYAHrA1oB0wNTAawDRwGCAygBPAMHAQkIAAMC
AZkCTwH/AwAF/wMAAf8DAAH/AzYB/wPMDf8DAAH/AZkCTwH/AZkCTwH/A2EB4gH/AucB/wEAARcBGAL/ AQMDMQFPA1wB6gHPArQC/wLdAv8C4gL/AugC/wLuAv8C8wH/A88B/wNfAfMDWAHGA0wBkgMoATwDAwEE
At4B/wEAARcBGAL/Ae8B/AH/AQABFwEYAv8B4gH8Af8BAAEXARgB/wH8AfAB+QH/AQABFwEYAf8BzAKZ AcwCmQH/AYACAAH/AYACAAH/AYACAAH/A/EB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8D8QH/AYACAAH/
Af8BzAKZAf8BzAKZAf8BbQJsAfcDUQGhAZ4CjAH/AekCvgH/AQABFwEYAf8BAAEXARgB/wH5AtYC/wHp AYACAAH/A/EB/wGAAgAB/wGAAgAB/wEbAgAB/wMAAf8DzA3/AzUB/wMEAf8BTgHMAv8BTgHMAv8BTgHM
AfMB/wEAARcBGAH/AQABFwEYAf8BAAEXARgB/wH5AegB7AH/AQABFwEYAf8B5gK6Af8B5gK9Af8B5gLA Av8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8EAAMCAQMDMQFPA1wB6gHPArQC/wLd
Af8BpgKUAf8DTgGUNP8D8QH/A+oB/wOAAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8DAAX/AwAB/wM+ Av8C4gL/AugC/wLuAv8C8wH/A88B/wNfAfMDWAHGA0wBkgMoATwDAwEEBAADJgE4A20B9wH1AscC/wLS
Af8DBQH/AwAB/wMAAf8DAAX/AwAB/wGZAk8B/wGZAk8B/wGeAowB/wHpAr4B/wEAARcBGAH/AfMCxQH/ Av8C2AL/At0C/wLiAv8C6AL/AvQF/wP1Af8DgQH7A1gBxgNHAYIDFAEcAcwCmQH/AZkBAAEbAf8BgAIA
AfkC1gL/AekB8wH/AQABFwEYAv8B6QHzAf8BAAEXARgB/wH5AegB7AH/AQABFwEYAf8BAAEXARgB/wHm Af8BgAIABf8BgAIAAf8BgAIABf8BgAIABf8BgAIAAf8BgAIABf8BgAIAAf8BgAIAAf8BGwIAAf8DAAH/
Ar0B/wHmAsAB/wGmApQB/wNOAZQDXQHSAdsCqAH/AQABFwEYAf8B6gK3Af8B8wLNAv8B7gH8Af8BAAEX A8wR/wMAAf8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHMAv8BTgHM
ARgC/wHSAfUB/wEAARcBGAL/AfQB/AH/AQABFwEYAv8C2AH/AQABFwEYAv8C4gH/A2IB9gNDAXcE/wGZ Av8EAAMmATgDbQH3AfUCxwL/AtIC/wLYAv8C3QL/AuIC/wLoAv8C9AX/A/UB/wOBAfsDWAHGA0cBggMU
AQABHAn/AYACAA3/AYACAAH/AYACAA3/AYACAAH/AYACAAH/A4AB/wGZAk8B/wGZAk8B/wGZAk8B/wGZ ARwDBwEJA14B3QH1As0C/wLPAv8CzQL/AtIC/wLYAv8C3QL/AuIC/wL6Cf8D9QH/A18B8wNTAawDMAFM
Ak8B/wMABf8DBQH/AwAB/wMSAf8DPgH/Az4B/wMABf8DAAH/AZkCTwH/AZkCTwH/A10B0gHbAqgB/wEA AcwCmQH/AZkBAAEbAf8BgAIAAf8BgAIAAf8BgAIADf8BgAIADf8BgAIAAf8BgAIAAf8BgAIAAf8BGwIA
ARcBGAH/AeoCtwH/AQABFwEYAv8B7gH8Af8BAAEXARgC/wHSAfUB/wEAARcBGAL/AfQB/AH/AQABFwEY Af8BGwKZAf8DBAH/A18B/wPAAf8DwAH/A8wB/wMAAf8DEQH/AwAB/wMAAf8DAAH/AwAB/wMRAf8BTgHM
Av8C2AL/At0C/wLiAf8DYgH2A0MBdwNWAbEB1QKiAf8BAAEXARgB/wEAARcBGAH/AQABFwEYAv8B9gL/ Av8BTgHMAv8BTgHMAv8DBwEJA14B3QH1As0C/wLPAv8CzQL/AtIC/wLYAv8C3QL/AuIC/wL6Cf8D9QH/
AVcCXQH/AQABFwEYAf8BVwJdAv8B4AHnAf8BVwJdAf8BAAEXARgB/wFXAl0C/wLdAf8DWgHkAzABTAT/ A18B8wNTAawDMAFMAz4BagHGArEC/wLZAv8C1AL/As8C/wLNAv8B1AHbAv8B1wHiAv8B5AHqEf8B0gLM
AZkBAAEcCf8BgAIACf8BgAIAEf8BgAIAAf8D8QH/A+oB/wOAAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJP Af8DWgHTA0MBdwHMApkB/wGZAQABGwH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAX/AYACAAX/
Af8DAAn/A5kB/wMSAf8DAAH/AwUB/wMABf8DAAH/AZkCTwH/AZkCTwH/A1YBsQHVAqIB/wFXAl0B/wEA AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/ARsCAAH/AU4BzAL/ARsCmQH/AwQB/wMAAf8DAAX/
ARcBGAH/AVcCXQL/AfYC/wEAARcBGAL/AdIB9QH/AQABFwEYAv8B4AHnAf8BAAEXARgB/wEAARcBGAH/ AwAB/wMEAf8BpAKgCf8DmQH/AxEB/wMRAf8BTgHMAv8BTgHMAv8DPgFqAcYCsQL/AtkC/wLUAv8CzwL/
AQABFwEYAv8C3QH/A1oB5AMwAUwDMgFQAcMCvxL/AewB8QL/AdsB5wL/AdkB3gL/AtQC/wLPAv8CzQL/ As0C/wHUAdsC/wHXAeIC/wHkAeoR/wHSAswB/wNaAdMDQwF3A1YBtgH/AuMB/wEAARYBFwH/AQABFgEX
AtIB/wHGAq0B/wNTAawDFAEbBP8BmQEAARwJ/wGAAgAJ/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAF/wGA Af8BAAEWARcC/wHeAecB/wEAARYBFwL/AdEB8wH/AQABFgEXAv8B+AL/AVYCXAH/AQABFgEXAf8BVgJc
AgAB/wGAAgAB/wGAAgAB/wEcAgAB/wGZAk8B/wGZAk8B/wGZAk8B/wGZAk8B/wMAAf8DwA3/A8wB/wNI Af8BzAKZAf8BXAJVAeoDTgGUAcwCmQH/AZkBAAEbAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIA
Af8DAAX/AwAB/wGZAk8B/wGZAk8B/wMyAVABwwK/Ev8B7AHxAv8B2wHnAv8B2QHeAv8C1AL/As8C/wLN Bf8BgAIABf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BGwIAAf8BTgHMAv8BTgHMAv8BTgHM
Av8C0gH/AcYCrQH/A1MBrAMUARsEAANaAcAD9Qr/Av4C/wLnAv8C4wL/At4C/wLZAv8C1AL/As8B/wH1 Av8BTgHMAv8DAAX/AwAB/wMREf8DzAH/AwAB/wFOAcwC/wFOAcwC/wNWAbYB/wLjAf8BVgJcAf8BAAEW
AscB/wNfAeMDIwE0AwIBAwT/AZkBAAEcAf8BgAIABf8BgAIACf8BgAIACf8BgAIABf8BgAIAAf8D8QH/ ARcB/wFWAlwC/wHeAecB/wFWAlwB/wEAARYBFwH/AVYCXAL/AfgC/wEAARYBFwH/AQABFgEXAf8BAAEW
A+oB/wEcAgAB/wGZAk8B/wGZAk8B/wGZAk8B/wGZAk8B/wMSAf8DNgH/A8AZ/wMAAf8BmQJPAf8BmQJP ARcB/wHMApkB/wFcAlUB6gNOAZQDYQHiAf8C5wH/AQABFgEXAv8C3gL/AuAC/wHvAfwB/wEAARYBFwL/
Af8EAANaAcAD9Qr/Av4C/wLnAv8C4wL/At4C/wLZAv8C1AL/As8B/wH1AscB/wNfAeMDIwE0AwIBAwQA AeIB/AH/AQABFgEXAf8B/AHwAfkB/wEAARYBFwH/AcwCmQH/AQABFgEXAf8BzAKZAf8BbQJsAfcDUQGh
AxcBIANiAe8D9Qb/AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/A20B9wMwAU0DBAEGBAAE/wGZ AcwCmQH/AZkBAAEbAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIA
AhwJ/wGAAgAB/wGAAgAJ/wGAAgAB/wGAAgAN/wGAAgAB/wGAAgAB/wOGAf8BmQJPAf8BmQJPAf8BmQJP Af8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BGwIAAf8BmQJOAf8BmQJOAf8BmQJOAf8BmQJO
Af8BmQJPAf8BmQJPAf8DEgH/AwAB/wMSAf8DmRH/AwAB/wGZAk8B/wGZAk8B/wQAAxcBIANiAe8D9Qb/ Af8DAAX/AwAB/wMAAf8DNQH/A8wN/wMAAf8BmQJOAf8BmQJOAf8DYQHiAf8C5wH/AQABFgEXAv8C3gH/
AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/A20B9wMwAU0DBAEGDAADFwEgA1oBwAPGAv8C9wL/ AQABFgEXAv8B7wH8Af8BAAEWARcC/wHiAfwB/wEAARYBFwH/AfwB8AH5Af8BAAEWARcB/wHMApkB/wHM
AvIC/wLsAv8C5wL/AuMB/wHGArEB/wNeAdADJAE2AwIBAwgABP8BmQIcLf8D8QH/A+oB/wOGAf8BmQJP ApkB/wHMApkB/wFtAmwB9wNRAaEBngKMAf8B6QK+Af8BAAEWARcB/wEAARYBFwH/AfkC1gL/AekB8wH/
Af8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8DEgH/AwAB/wMFAf8DYAH/A8wF/wMA AQABFgEXAf8BAAEWARcB/wEAARYBFwH/AfkB6AHsAf8BAAEWARcB/wHmAroB/wHmAr0B/wHmAsAB/wGm
Af8BmQJPAf8BmQJPAf8IAAMXASADWgHAA8YC/wL3Av8C8gL/AuwC/wLnAv8C4wH/AcYCsQH/A14B0AMk ApQB/wNOAZQ0/wPxAf8D6gH/A4AB/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wMABf8DAAH/Az0B/wME
ATYDAgEDGAADMgFQA1EBogNdAdIBjAKJAf8DYAHUA1QBpgM3AVoDBQEHEAAI/wHMApkt/wPxAf8DwAH/ Af8DAAH/AwAB/wMABf8DAAH/AZkCTgH/AZkCTgH/AZ4CjAH/AekCvgH/AQABFgEXAf8B8wLFAf8B+QLW
BAABmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8BmQJPAf8DBQH/ Av8B6QHzAf8BAAEWARcC/wHpAfMB/wEAARYBFwH/AfkB6AHsAf8BAAEWARcB/wEAARYBFwH/AeYCvQH/
AwAB/wM2Af8DEgH/AZkCTwH/FAADMgFQA1EBogNdAdIBjAKJAf8DYAHUA1QBpgM3AVoDBQEHEAABQgFN AeYCwAH/AaYClAH/A04BlANdAdIB2wKoAf8BAAEWARcB/wHqArcB/wHzAs0C/wHuAfwB/wEAARYBFwL/
AT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAeMD/wQAAcED/wQAAYAB/wEIARAFAAF/ AdIB9QH/AQABFgEXAv8B9AH8Af8BAAEWARcC/wLYAf8BAAEWARcC/wLiAf8DYgH2A0MBdwT/AZkBAAEb
BwABPwcAAR8GAAGAAQ8GAAHAAQcGAAHgAQMGAAHwAQEGAAH4BwAB/AcAAf4BCAYAAf8HAAH/AYAB/wHw Cf8BgAIADf8BgAIAAf8BgAIADf8BgAIAAf8BgAIAAf8DgAH/AZkCTgH/AZkCTgH/AZkCTgH/AZkCTgH/
BAAB/wHAAf8B+AQAAeABAwIAAYABAQHgAQMBwAEBBAABwAEBAYAFAAGAAQABgAUAAYBBAAGABQABgAEA AwAF/wMEAf8DAAH/AxEB/wM9Af8DPQH/AwAF/wMAAf8BmQJOAf8BmQJOAf8DXQHSAdsCqAH/AQABFgEX
AYABAQQAAYABAQHAAQMEAAHAAQMB8AEPAgABgAEBAfABDws= Af8B6gK3Af8BAAEWARcC/wHuAfwB/wEAARYBFwL/AdIB9QH/AQABFgEXAv8B9AH8Af8BAAEWARcC/wLY
Av8C3QL/AuIB/wNiAfYDQwF3A1YBsQHVAqIB/wEAARYBFwH/AQABFgEXAf8BAAEWARcC/wH2Av8BVgJc
Af8BAAEWARcB/wFWAlwC/wHgAecB/wFWAlwB/wEAARYBFwH/AVYCXAL/At0B/wNaAeQDMAFMBP8BmQEA
ARsJ/wGAAgAJ/wGAAgAR/wGAAgAB/wPxAf8D6gH/A4AB/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wMA
Cf8DmQH/AxEB/wMAAf8DBAH/AwAF/wMAAf8BmQJOAf8BmQJOAf8DVgGxAdUCogH/AVYCXAH/AQABFgEX
Af8BVgJcAv8B9gL/AQABFgEXAv8B0gH1Af8BAAEWARcC/wHgAecB/wEAARYBFwH/AQABFgEXAf8BAAEW
ARcC/wLdAf8DWgHkAzABTAMyAVABwwK/Ev8B7AHxAv8B2wHnAv8B2QHeAv8C1AL/As8C/wLNAv8C0gH/
AcYCrQH/A1MBrAMUARsE/wGZAQABGwn/AYACAAn/AYACAAH/AYACAAH/AYACAAH/AYACAAX/AYACAAH/
AYACAAH/AYACAAH/ARsCAAH/AZkCTgH/AZkCTgH/AZkCTgH/AZkCTgH/AwAB/wPADf8DzAH/A0cB/wMA
Bf8DAAH/AZkCTgH/AZkCTgH/AzIBUAHDAr8S/wHsAfEC/wHbAecC/wHZAd4C/wLUAv8CzwL/As0C/wLS
Af8BxgKtAf8DUwGsAxQBGwQAA1oBwAP1Cv8C/gL/AucC/wLjAv8C3gL/AtkC/wLUAv8CzwH/AfUCxwH/
A18B4wMjATQDAgEDBP8BmQEAARsB/wGAAgAF/wGAAgAJ/wGAAgAJ/wGAAgAF/wGAAgAB/wPxAf8D6gH/
ARsCAAH/AZkCTgH/AZkCTgH/AZkCTgH/AZkCTgH/AxEB/wM1Af8DwBn/AwAB/wGZAk4B/wGZAk4B/wQA
A1oBwAP1Cv8C/gL/AucC/wLjAv8C3gL/AtkC/wLUAv8CzwH/AfUCxwH/A18B4wMjATQDAgEDBAADFwEg
A2IB7wP1Bv8C+AL/AuwC/wLnAv8C4wL/At4C/wLZAf8B9QLNAf8DbQH3AzABTQMEAQYEAAT/AZkCGwn/
AYACAAH/AYACAAn/AYACAAH/AYACAA3/AYACAAH/AYACAAH/A4YB/wGZAk4B/wGZAk4B/wGZAk4B/wGZ
Ak4B/wGZAk4B/wMRAf8DAAH/AxEB/wOZEf8DAAH/AZkCTgH/AZkCTgH/BAADFwEgA2IB7wP1Bv8C+AL/
AuwC/wLnAv8C4wL/At4C/wLZAf8B9QLNAf8DbQH3AzABTQMEAQYMAAMXASADWgHAA8YC/wL3Av8C8gL/
AuwC/wLnAv8C4wH/AcYCsQH/A14B0AMkATYDAgEDCAAE/wGZAhst/wPxAf8D6gH/A4YB/wGZAk4B/wGZ
Ak4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wMRAf8DAAH/AwQB/wNfAf8DzAX/AwAB/wGZ
Ak4B/wGZAk4B/wgAAxcBIANaAcADxgL/AvcC/wLyAv8C7AL/AucC/wLjAf8BxgKxAf8DXgHQAyQBNgMC
AQMYAAMyAVADUQGiA10B0gGMAokB/wNgAdQDVAGmAzcBWgMFAQcQAAj/AcwCmS3/A/EB/wPAAf8EAAGZ
Ak4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wGZAk4B/wMEAf8DAAH/
AzUB/wMRAf8BmQJOAf8UAAMyAVADUQGiA10B0gGMAokB/wNgAdQDVAGmAzcBWgMFAQcQAAFCAU0BPgcA
AT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/AQAB4wP/AfABBwIAAcED/wHAAQMCAAGAAf8BCAEQ
AYABAQMAAX8CAAGABAABPwcAAR8GAAGAAQ8GAAHAAQcGAAHgAQMGAAHwAQEGAAH4BwAB/AcAAf4BCAIA
AYABAQIAAf8DAAGAAQECAAH/AYAB/wHwAcABAwIAAf8BwAH/AfgB8AEPAgAB4AEDAgABgAEBAeABAwHA
AQEEAAHAAQEBgAUAAYABAAGABQABgEEAAYAFAAGAAQABgAEBBAABgAEBAcABAwQAAcABAwHwAQ8CAAGA
AQEB8AEPCw==
</value> </value>
</data> </data>
<data name="listChoices.TabIndex" type="System.Int32, mscorlib"> <data name="listChoices.TabIndex" type="System.Int32, mscorlib">
@@ -290,7 +318,7 @@
<value>tableLayoutPanel1</value> <value>tableLayoutPanel1</value>
</data> </data>
<data name="&gt;&gt;listChoices.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listChoices.ZOrder" xml:space="preserve">
<value>4</value> <value>2</value>
</data> </data>
<data name="textBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="textBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
@@ -299,7 +327,7 @@
<value>Courier New, 8pt</value> <value>Courier New, 8pt</value>
</data> </data>
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing"> <data name="textBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 123</value> <value>3, 153</value>
</data> </data>
<data name="textBox1.Multiline" type="System.Boolean, mscorlib"> <data name="textBox1.Multiline" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@@ -308,7 +336,7 @@
<value>Vertical</value> <value>Vertical</value>
</data> </data>
<data name="textBox1.Size" type="System.Drawing.Size, System.Drawing"> <data name="textBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>569, 3</value> <value>788, 7</value>
</data> </data>
<data name="textBox1.TabIndex" type="System.Int32, mscorlib"> <data name="textBox1.TabIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
@@ -323,35 +351,116 @@
<value>tableLayoutPanel1</value> <value>tableLayoutPanel1</value>
</data> </data>
<data name="&gt;&gt;textBox1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;textBox1.ZOrder" xml:space="preserve">
<value>2</value> <value>1</value>
</data> </data>
<data name="listTracks.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
</data> </data>
<data name="listTracks.Location" type="System.Drawing.Point, System.Drawing"> <data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 261</value> <value>3, 422</value>
</data> </data>
<data name="listTracks.Size" type="System.Drawing.Size, System.Drawing"> <data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>569, 156</value> <value>1</value>
</data> </data>
<data name="listTracks.TabIndex" type="System.Int32, mscorlib"> <data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>3</value> <value>788, 35</value>
</data> </data>
<data name="listTracks.Visible" type="System.Boolean, mscorlib"> <data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>False</value> <value>30</value>
</data> </data>
<data name="&gt;&gt;listTracks.Name" xml:space="preserve"> <data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>listTracks</value> <value>tableLayoutPanel2</value>
</data> </data>
<data name="&gt;&gt;listTracks.Type" xml:space="preserve"> <data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;listTracks.Parent" xml:space="preserve"> <data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value> <value>tableLayoutPanel1</value>
</data> </data>
<data name="&gt;&gt;listTracks.ZOrder" xml:space="preserve"> <data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="buttonOk" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,37,59399,Percent,22,93233,Percent,19,17293,Percent,20,11278" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="pictureBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 166</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>788, 7</value>
</data>
<data name="pictureBox1.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>31</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>3</value> <value>3</value>
</data> </data>
<data name="tableLayoutPanelMeta.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="columnHeaderMetadataValue.DisplayIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="columnHeaderMetadataValue.Text" xml:space="preserve">
<value>Value</value>
</data>
<data name="columnHeaderMetadataValue.Width" type="System.Int32, mscorlib">
<value>240</value>
</data>
<data name="columnHeaderMetadataName.DisplayIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="columnHeaderMetadataName.Text" xml:space="preserve">
<value>Field</value>
</data>
<data name="columnHeaderMetadataName.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="listMetadata.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="listMetadata.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="listMetadata.Size" type="System.Drawing.Size, System.Drawing">
<value>388, 231</value>
</data>
<data name="listMetadata.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;listMetadata.Name" xml:space="preserve">
<value>listMetadata</value>
</data>
<data name="&gt;&gt;listMetadata.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listMetadata.Parent" xml:space="preserve">
<value>tableLayoutPanelMeta</value>
</data>
<data name="&gt;&gt;listMetadata.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="Title.DisplayIndex" type="System.Int32, mscorlib"> <data name="Title.DisplayIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
</data> </data>
@@ -359,7 +468,7 @@
<value>Title</value> <value>Title</value>
</data> </data>
<data name="Title.Width" type="System.Int32, mscorlib"> <data name="Title.Width" type="System.Int32, mscorlib">
<value>360</value> <value>210</value>
</data> </data>
<data name="TrackNo.DisplayIndex" type="System.Int32, mscorlib"> <data name="TrackNo.DisplayIndex" type="System.Int32, mscorlib">
<value>0</value> <value>0</value>
@@ -382,47 +491,59 @@
<data name="Length.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms"> <data name="Length.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Right</value> <value>Right</value>
</data> </data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib"> <data name="listTracks.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>1</value> <value>Fill</value>
</data> </data>
<data name="&gt;&gt;listMetadata.Name" xml:space="preserve"> <data name="listTracks.Location" type="System.Drawing.Point, System.Drawing">
<value>listMetadata</value> <value>397, 3</value>
</data> </data>
<data name="&gt;&gt;listMetadata.Type" xml:space="preserve"> <data name="listTracks.Size" type="System.Drawing.Size, System.Drawing">
<value>388, 231</value>
</data>
<data name="listTracks.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;listTracks.Name" xml:space="preserve">
<value>listTracks</value>
</data>
<data name="&gt;&gt;listTracks.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;listMetadata.Parent" xml:space="preserve"> <data name="&gt;&gt;listTracks.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value> <value>tableLayoutPanelMeta</value>
</data> </data>
<data name="&gt;&gt;listMetadata.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listTracks.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>1</value> <value>1</value>
</data> </data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms"> <data name="tableLayoutPanelMeta.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="buttonOk" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,37,59399,Percent,22,93233,Percent,19,17293,Percent,20,11278" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value> <value>Fill</value>
</data> </data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve"> <data name="tableLayoutPanelMeta.Location" type="System.Drawing.Point, System.Drawing">
<value>pictureBox1</value> <value>3, 179</value>
</data> </data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve"> <data name="tableLayoutPanelMeta.RowCount" type="System.Int32, mscorlib">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>1</value>
</data> </data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve"> <data name="tableLayoutPanelMeta.Size" type="System.Drawing.Size, System.Drawing">
<value>788, 237</value>
</data>
<data name="tableLayoutPanelMeta.TabIndex" type="System.Int32, mscorlib">
<value>32</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMeta.Name" xml:space="preserve">
<value>tableLayoutPanelMeta</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMeta.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMeta.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value> <value>tableLayoutPanel1</value>
</data> </data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;tableLayoutPanelMeta.ZOrder" xml:space="preserve">
<value>5</value> <value>4</value>
</data>
<data name="tableLayoutPanelMeta.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="listMetadata" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="listTracks" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data> </data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> <data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value> <value>Fill</value>
@@ -431,10 +552,10 @@
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib"> <data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>6</value> <value>5</value>
</data> </data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing"> <data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>575, 460</value> <value>794, 460</value>
</data> </data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib"> <data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>29</value> <value>29</value>
@@ -452,112 +573,7 @@
<value>0</value> <value>0</value>
</data> </data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms"> <data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="listMetadata" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="tableLayoutPanel2" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textBox1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="listTracks" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="listChoices" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="pictureBox1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Absolute,120,Percent,5,Percent,5,Absolute,120,Percent,90,Absolute,40" /&gt;&lt;/TableLayoutSettings&gt;</value> <value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="tableLayoutPanel2" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textBox1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="listChoices" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="pictureBox1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="tableLayoutPanelMeta" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Absolute,150,Percent,5,Percent,5,Percent,90,Absolute,40" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="listMetadata.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="listMetadata.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 141</value>
</data>
<data name="listMetadata.Size" type="System.Drawing.Size, System.Drawing">
<value>569, 114</value>
</data>
<data name="listMetadata.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="listMetadata.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;listMetadata.Name" xml:space="preserve">
<value>listMetadata</value>
</data>
<data name="&gt;&gt;listMetadata.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listMetadata.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;listMetadata.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="columnHeader2.DisplayIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="columnHeader2.Text" xml:space="preserve">
<value>Value</value>
</data>
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
<value>400</value>
</data>
<data name="columnHeader3.DisplayIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="columnHeader3.Text" xml:space="preserve">
<value>Name</value>
</data>
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 423</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>569, 34</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>30</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="buttonOk" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,37,59399,Percent,22,93233,Percent,19,17293,Percent,20,11278" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="pictureBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 132</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>569, 3</value>
</data>
<data name="pictureBox1.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>31</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>5</value>
</data> </data>
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>127, 17</value> <value>127, 17</value>
@@ -572,7 +588,7 @@
<value>6, 13</value> <value>6, 13</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>575, 460</value> <value>794, 460</value>
</data> </data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>591, 496</value> <value>591, 496</value>
@@ -595,6 +611,12 @@
<data name="&gt;&gt;imageList1.Type" xml:space="preserve"> <data name="&gt;&gt;imageList1.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;backgroundWorker1.Name" xml:space="preserve">
<value>backgroundWorker1</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Title.Name" xml:space="preserve"> <data name="&gt;&gt;Title.Name" xml:space="preserve">
<value>Title</value> <value>Title</value>
</data> </data>
@@ -619,24 +641,18 @@
<data name="&gt;&gt;Length.Type" xml:space="preserve"> <data name="&gt;&gt;Length.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;columnHeader2.Name" xml:space="preserve"> <data name="&gt;&gt;columnHeaderMetadataValue.Name" xml:space="preserve">
<value>columnHeader2</value> <value>columnHeaderMetadataValue</value>
</data> </data>
<data name="&gt;&gt;columnHeader2.Type" xml:space="preserve"> <data name="&gt;&gt;columnHeaderMetadataValue.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;columnHeader3.Name" xml:space="preserve"> <data name="&gt;&gt;columnHeaderMetadataName.Name" xml:space="preserve">
<value>columnHeader3</value> <value>columnHeaderMetadataName</value>
</data> </data>
<data name="&gt;&gt;columnHeader3.Type" xml:space="preserve"> <data name="&gt;&gt;columnHeaderMetadataName.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;backgroundWorker1.Name" xml:space="preserve">
<value>backgroundWorker1</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>frmChoice</value> <value>frmChoice</value>
</data> </data>