diff --git a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
index d961e5f..4841539 100644
--- a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
+++ b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
@@ -76,6 +76,13 @@
FormMetadata.cs
+
+ Component
+
+
+ ImagePreview.cs
+
+
@@ -98,6 +105,9 @@
FormMetadata.cs
+
+ ImagePreview.cs
+
Options.cs
@@ -150,6 +160,9 @@
true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 276, 17
+
+
+ 161, 17
+
+
+ 17, 17
+
+
+ 390, 17
+
+
+ False
+
+
\ No newline at end of file
diff --git a/CUETools.CTDB.EACPlugin/InternetImage.cs b/CUETools.CTDB.EACPlugin/InternetImage.cs
new file mode 100644
index 0000000..2f73229
--- /dev/null
+++ b/CUETools.CTDB.EACPlugin/InternetImage.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.IO;
+
+namespace CUETools.CTDB.EACPlugin
+{
+ public class InternetImage
+ {
+ protected string m_URL = null;
+ protected Bitmap m_bitmap = null;
+ protected byte[] m_data = null;
+
+ public string URL
+ {
+ get
+ {
+ return m_URL;
+ }
+ set
+ {
+ m_URL = value;
+ }
+ }
+
+
+ public byte[] Data
+ {
+ get
+ {
+ return m_data;
+ }
+ set
+ {
+ m_data = value;
+ }
+ }
+
+
+ public Bitmap Image
+ {
+ get
+ {
+ return m_bitmap;
+ }
+ set
+ {
+ m_bitmap = value;
+ }
+ }
+ }
+}
diff --git a/CUETools.CTDB.EACPlugin/Metadata.cs b/CUETools.CTDB.EACPlugin/Metadata.cs
index c6c75da..253b800 100644
--- a/CUETools.CTDB.EACPlugin/Metadata.cs
+++ b/CUETools.CTDB.EACPlugin/Metadata.cs
@@ -15,177 +15,192 @@ using System.Drawing.Imaging;
namespace MetadataPlugIn
{
- [Guid("8271734A-126F-44e9-AC9C-836449B39E51"),
+ [Guid("8271734A-126F-44e9-AC9C-836449B39E51"),
ClassInterface(ClassInterfaceType.None),
- ComSourceInterfaces(typeof(IMetadataRetriever)),
+ ComSourceInterfaces(typeof(IMetadataRetriever)),
]
- public class MetadataRetriever : IMetadataRetriever
- {
- public bool GetCDInformation(CCDMetadata data, bool cdinfo, bool cover, bool lyrics)
- {
- if (!cdinfo)
- return false;
+ public class MetadataRetriever : IMetadataRetriever
+ {
+ public bool GetCDInformation(CCDMetadata data, bool cdinfo, bool cover, bool lyrics)
+ {
+ if (!cdinfo && !cover)
+ 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 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.4");
- form.ShowDialog();
- var meta = form.Meta;
- if (meta == null)
- return false;
+ var ctdb = new CUEToolsDB(TOC, null);
+ var form = new CUETools.CTDB.EACPlugin.FormMetadata(ctdb, "EAC" + data.HostVersion + " CTDB 2.1.4", cdinfo, cover);
+ form.ShowDialog();
+ var meta = form.Meta;
+ if (meta == null)
+ return false;
- int year, disccount, discnumber;
- string extra = meta.extra ?? "";
- if (!string.IsNullOrEmpty(meta.discname))
- extra += "Disc name: " + meta.discname + "\r\n";
- if (!string.IsNullOrEmpty(meta.infourl))
- extra += "Info URL: " + meta.infourl + "\r\n";
- if (!string.IsNullOrEmpty(meta.barcode))
- extra += "Barcode: " + meta.barcode + "\r\n";
- if (!string.IsNullOrEmpty(meta.releasedate))
- extra += "Release date: " + meta.releasedate + "\r\n";
- if (!string.IsNullOrEmpty(meta.country))
- extra += "Release country: " + meta.country + "\r\n";
- if (meta.label != null)
- foreach (var label in meta.label)
- {
- if (!string.IsNullOrEmpty(label.name))
- extra += "Release label: " + label.name + "\r\n";
- if (!string.IsNullOrEmpty(label.catno))
- extra += "Release catalog#: " + label.catno + "\r\n";
- }
- data.Year = meta.year != null && int.TryParse(meta.year, out year) ? year : -1;
- data.TotalNumberOfCDs = meta.disccount != null && int.TryParse(meta.disccount, out disccount) ? disccount : 1;
- data.CDNumber = meta.discnumber != null && int.TryParse(meta.discnumber, out discnumber) ? discnumber : 1;
- data.FirstTrackNumber = 1;
- data.AlbumTitle = meta.album ?? "";
- data.AlbumArtist = meta.artist ?? "";
- data.MP3V2Type = meta.genre ?? "";
- data.CDDBMusicType = GetFreeDBMusicType(meta);
- data.MP3Type = GetMP3MusicType(data.CDDBMusicType);
- data.ExtendedDiscInformation = extra;
- data.Revision = -1; // TODO: meta.id? rock/ffffffff/16?
- if (meta.track != null)
- for (int track = 0; track < data.NumberOfTracks; track++)
- {
- if (track < meta.track.Length)
- {
- data.SetTrackTitle(track, meta.track[track].name ?? "");
- data.SetTrackArtist(track, meta.track[track].artist ?? meta.artist ?? "");
- data.SetExtendedTrackInformation(track, meta.track[track].extra ?? "");
- }
- else
- {
- data.SetTrackTitle(track, "");
- data.SetTrackArtist(track, meta.artist ?? "");
- data.SetExtendedTrackInformation(track, "");
- }
- data.SetTrackComposer(track, "");
- }
- return true;
- }
+ if (cdinfo)
+ {
+ int year, disccount, discnumber;
+ string extra = meta.extra ?? "";
+ if (!string.IsNullOrEmpty(meta.discname))
+ extra += "Disc name: " + meta.discname + "\r\n";
+ if (!string.IsNullOrEmpty(meta.infourl))
+ extra += "Info URL: " + meta.infourl + "\r\n";
+ if (!string.IsNullOrEmpty(meta.barcode))
+ extra += "Barcode: " + meta.barcode + "\r\n";
+ if (!string.IsNullOrEmpty(meta.releasedate))
+ extra += "Release date: " + meta.releasedate + "\r\n";
+ if (!string.IsNullOrEmpty(meta.country))
+ extra += "Release country: " + meta.country + "\r\n";
+ if (meta.label != null)
+ foreach (var label in meta.label)
+ {
+ if (!string.IsNullOrEmpty(label.name))
+ extra += "Release label: " + label.name + "\r\n";
+ if (!string.IsNullOrEmpty(label.catno))
+ extra += "Release catalog#: " + label.catno + "\r\n";
+ }
+ data.Year = meta.year != null && int.TryParse(meta.year, out year) ? year : -1;
+ data.TotalNumberOfCDs = meta.disccount != null && int.TryParse(meta.disccount, out disccount) ? disccount : 1;
+ data.CDNumber = meta.discnumber != null && int.TryParse(meta.discnumber, out discnumber) ? discnumber : 1;
+ data.FirstTrackNumber = 1;
+ data.AlbumTitle = meta.album ?? "";
+ data.AlbumArtist = meta.artist ?? "";
+ data.MP3V2Type = meta.genre ?? "";
+ data.CDDBMusicType = GetFreeDBMusicType(meta);
+ data.MP3Type = GetMP3MusicType(data.CDDBMusicType);
+ data.ExtendedDiscInformation = extra;
+ data.Revision = -1; // TODO: meta.id? rock/ffffffff/16?
+ if (meta.track != null)
+ for (int track = 0; track < data.NumberOfTracks; track++)
+ {
+ if (track < meta.track.Length)
+ {
+ data.SetTrackTitle(track, meta.track[track].name ?? "");
+ data.SetTrackArtist(track, meta.track[track].artist ?? meta.artist ?? "");
+ data.SetExtendedTrackInformation(track, meta.track[track].extra ?? "");
+ }
+ else
+ {
+ data.SetTrackTitle(track, "");
+ data.SetTrackArtist(track, meta.artist ?? "");
+ data.SetExtendedTrackInformation(track, "");
+ }
+ data.SetTrackComposer(track, "");
+ }
+ }
- public int GetMP3MusicType(int freedbtype)
- {
- int[] list = { 17, 29, 34, 95, 53, 77, 90, 113, 117, 129, 95 };
- return (freedbtype <= 0 || freedbtype >= list.Length) ? -1 : list[freedbtype];
- }
+ if (cover)
+ {
+ data.CoverImage = null;
+ data.CoverImageURL = "";
+ if (form.Image != null)
+ {
+ data.CoverImage = form.Image.Data;
+ data.CoverImageURL = form.Image.URL;
+ }
+ }
- public int GetFreeDBMusicType(CTDBResponseMeta meta)
- {
- int pos = meta.id.IndexOf('/');
- if (meta.source != "freedb" || pos < 0)
- return -1;
- string freedbtype = meta.id.Substring(0, pos);
- switch (freedbtype.ToUpper())
- {
- case "BLUES":
- return 0;
- case "CLASSICAL":
- return 1;
- case "COUNTRY":
- return 2;
- case "DATA":
- return 3;
- case "FOLK":
- return 4;
- case "JAZZ":
- return 5;
- case "NEWAGE":
- return 6;
- case "REGGAE":
- return 7;
- case "ROCK":
- return 8;
- case "SOUNDTRACK":
- return 9;
- case "MISC":
- return 10;
- default:
- return -1;
- }
- }
+ return true;
+ }
- public string GetPluginGuid()
- {
- return ((GuidAttribute)Attribute.GetCustomAttribute(GetType(), typeof(GuidAttribute))).Value;
- }
+ public int GetMP3MusicType(int freedbtype)
+ {
+ int[] list = { 17, 29, 34, 95, 53, 77, 90, 113, 117, 129, 95 };
+ return (freedbtype <= 0 || freedbtype >= list.Length) ? -1 : list[freedbtype];
+ }
- public Array GetPluginLogo()
- {
- MemoryStream ms = new MemoryStream();
- Resources.ctdb64.Save(ms, ImageFormat.Png);
- return ms.ToArray();
- }
+ public int GetFreeDBMusicType(CTDBResponseMeta meta)
+ {
+ int pos = meta.id.IndexOf('/');
+ if (meta.source != "freedb" || pos < 0)
+ return -1;
+ string freedbtype = meta.id.Substring(0, pos);
+ switch (freedbtype.ToUpper())
+ {
+ case "BLUES":
+ return 0;
+ case "CLASSICAL":
+ return 1;
+ case "COUNTRY":
+ return 2;
+ case "DATA":
+ return 3;
+ case "FOLK":
+ return 4;
+ case "JAZZ":
+ return 5;
+ case "NEWAGE":
+ return 6;
+ case "REGGAE":
+ return 7;
+ case "ROCK":
+ return 8;
+ case "SOUNDTRACK":
+ return 9;
+ case "MISC":
+ return 10;
+ default:
+ return -1;
+ }
+ }
- public string GetPluginName()
- {
- return "CUETools DB Metadata Plugin V2.1.4";
- }
+ public string GetPluginGuid()
+ {
+ return ((GuidAttribute)Attribute.GetCustomAttribute(GetType(), typeof(GuidAttribute))).Value;
+ }
- public void ShowOptions()
- {
- AudioDataPlugIn.Options opt = new AudioDataPlugIn.Options();
- opt.ShowDialog();
- }
+ public Array GetPluginLogo()
+ {
+ MemoryStream ms = new MemoryStream();
+ Resources.ctdb64.Save(ms, ImageFormat.Png);
+ return ms.ToArray();
+ }
- public bool SubmitCDInformation(IMetadataLookup data)
- {
- throw new NotSupportedException();
- }
+ public string GetPluginName()
+ {
+ return "CUETools DB Metadata Plugin V2.1.4";
+ }
- public bool SupportsCoverRetrieval()
- {
- return false;
- }
+ public void ShowOptions()
+ {
+ AudioDataPlugIn.Options opt = new AudioDataPlugIn.Options();
+ opt.ShowDialog();
+ }
- public bool SupportsLyricsRetrieval()
- {
- return false;
- }
+ public bool SubmitCDInformation(IMetadataLookup data)
+ {
+ throw new NotSupportedException();
+ }
- public bool SupportsMetadataRetrieval()
- {
- return true;
- }
+ public bool SupportsCoverRetrieval()
+ {
+ return true;
+ }
- public bool SupportsMetadataSubmission()
- {
- return false;
- }
- }
+ public bool SupportsLyricsRetrieval()
+ {
+ return false;
+ }
+
+ public bool SupportsMetadataRetrieval()
+ {
+ return true;
+ }
+
+ public bool SupportsMetadataSubmission()
+ {
+ return false;
+ }
+ }
}
diff --git a/CUETools.CTDB.EACPlugin/Plugin.cs b/CUETools.CTDB.EACPlugin/Plugin.cs
index a5e7e40..0eccd58 100644
--- a/CUETools.CTDB.EACPlugin/Plugin.cs
+++ b/CUETools.CTDB.EACPlugin/Plugin.cs
@@ -302,4 +302,26 @@ namespace AudioDataPlugIn
return sw.ToString();
}
}
+
+ //private NativeWindow GetWindowFromHost(int hwnd)
+ //{
+ // IntPtr handle = new IntPtr(hwnd);
+ // NativeWindow nativeWindow = new NativeWindow();
+ // nativeWindow.AssignHandle(handle);
+ // return window;
+ //}
+ //NativeWindow parentWindow = GetWindowFromHwnd(hwnd);
+ //try
+ //{
+ // launchTarget.ShowDialog(parentWindow);
+ //}
+ //finally
+ //{
+ // parentWindow.ReleaseHandle();
+ //}
+ //internal class WindowWrapper : System.Windows.Forms.IWin32Window
+ //{
+ // public IntPtr Handle { get; private set; }
+ // public WindowWrapper(IntPtr hwnd) { Handle = hwnd; }
+ //}
}
diff --git a/CUETools.CTDB.EACPlugin/Properties/Resources.Designer.cs b/CUETools.CTDB.EACPlugin/Properties/Resources.Designer.cs
index 59bdb00..540c0f4 100644
--- a/CUETools.CTDB.EACPlugin/Properties/Resources.Designer.cs
+++ b/CUETools.CTDB.EACPlugin/Properties/Resources.Designer.cs
@@ -73,5 +73,12 @@ namespace CUETools.CTDB.EACPlugin.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
+
+ internal static System.Drawing.Bitmap document_save_12 {
+ get {
+ object obj = ResourceManager.GetObject("document_save_12", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
}
}
diff --git a/CUETools.CTDB.EACPlugin/Properties/Resources.resx b/CUETools.CTDB.EACPlugin/Properties/Resources.resx
index 6469b64..4801895 100644
--- a/CUETools.CTDB.EACPlugin/Properties/Resources.resx
+++ b/CUETools.CTDB.EACPlugin/Properties/Resources.resx
@@ -117,11 +117,15 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
..\Resources\favicon.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\ctdb64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\document-save_12.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/CUETools.CTDB.EACPlugin/Resources/document-save_12.png b/CUETools.CTDB.EACPlugin/Resources/document-save_12.png
new file mode 100644
index 0000000..b5e29de
Binary files /dev/null and b/CUETools.CTDB.EACPlugin/Resources/document-save_12.png differ
diff --git a/CUETools.CTDB/CTDBResponse.cs b/CUETools.CTDB/CTDBResponse.cs
index 64dd785..9757430 100644
--- a/CUETools.CTDB/CTDBResponse.cs
+++ b/CUETools.CTDB/CTDBResponse.cs
@@ -10,6 +10,6 @@ namespace CUETools.CTDB
[XmlElement]
public CTDBResponseEntry[] entry;
[XmlElement]
- public CTDBResponseMeta[] musicbrainz;
+ public CTDBResponseMeta[] metadata;
}
}
diff --git a/CUETools.CTDB/CTDBResponseMeta.cs b/CUETools.CTDB/CTDBResponseMeta.cs
index a998db1..ff80707 100644
--- a/CUETools.CTDB/CTDBResponseMeta.cs
+++ b/CUETools.CTDB/CTDBResponseMeta.cs
@@ -31,12 +31,12 @@ namespace CUETools.CTDB
[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 CTDBResponseMetaImage[] coverart;
+ [XmlElement]
public CTDBResponseMetaTrack[] track;
[XmlElement]
public CTDBResponseMetaLabel[] label;
diff --git a/CUETools.CTDB/CTDBResponseMetaImage.cs b/CUETools.CTDB/CTDBResponseMetaImage.cs
new file mode 100644
index 0000000..277f60a
--- /dev/null
+++ b/CUETools.CTDB/CTDBResponseMetaImage.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Xml.Serialization;
+
+namespace CUETools.CTDB
+{
+ [Serializable]
+ public class CTDBResponseMetaImage
+ {
+ [XmlAttribute]
+ public string uri { get; set; }
+ [XmlAttribute]
+ public string uri150 { get; set; }
+ [XmlAttribute]
+ public int height { get; set; }
+ [XmlAttribute]
+ public int width { get; set; }
+ [XmlAttribute]
+ public bool primary { get; set; }
+ }
+}
diff --git a/CUETools.CTDB/CUETools.CTDB.csproj b/CUETools.CTDB/CUETools.CTDB.csproj
index fea9498..5cd33eb 100644
--- a/CUETools.CTDB/CUETools.CTDB.csproj
+++ b/CUETools.CTDB/CUETools.CTDB.csproj
@@ -59,6 +59,7 @@
+
diff --git a/CUETools.CTDB/CUEToolsDB.cs b/CUETools.CTDB/CUEToolsDB.cs
index 62b5d01..1b5ad8d 100644
--- a/CUETools.CTDB/CUEToolsDB.cs
+++ b/CUETools.CTDB/CUEToolsDB.cs
@@ -65,8 +65,9 @@ namespace CUETools.CTDB
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase
+ "/lookup2.php"
- + "?ctdb=" + (ctdb ? "2" : "0")
- + "&fuzzy=" + (fuzzy ? 1 : 0)
+ + "?version=2"
+ + "&ctdb=" + (ctdb ? 1 : 0)
+ + "&fuzzy=" + (fuzzy ? 1 : 0)
+ "&metadata=" + (metadataSearch == CTDBMetadataSearch.None ? "none" : metadataSearch == CTDBMetadataSearch.Fast ? "fast" : metadataSearch == CTDBMetadataSearch.Default ? "default" : "extensive")
+ "&toc=" + toc.ToString());
req.Method = "GET";
@@ -102,8 +103,8 @@ namespace CUETools.CTDB
var entry = new DBEntry(ctdbRespEntry);
entries.Add(entry);
}
- if (ctdbResp.musicbrainz != null && ctdbResp.musicbrainz.Length != 0)
- metadata.AddRange(ctdbResp.musicbrainz);
+ if (ctdbResp.metadata != null && ctdbResp.metadata.Length != 0)
+ metadata.AddRange(ctdbResp.metadata);
}
if (entries.Count == 0)
this.QueryResponseStatus = HttpStatusCode.NotFound;