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;