/// <summary> /// Lookup an Amazon Album, for which the ASIN is known. /// Should find one exact match. /// </summary> /// <param name = "albumID"></param> /// <returns></returns> public AmazonAlbum AmazonAlbumLookup(string albumID) { AmazonAlbum album = new AmazonAlbum(); SignedRequestHelper helper = new SignedRequestHelper(Options.MainSettings.AmazonSite); string requestString = helper.Sign(string.Format(itemLookup, albumID)); string responseXml = Util.GetWebPage(requestString); if (responseXml == null) { return(album); } XmlDocument xml = new XmlDocument(); xml.LoadXml(responseXml); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable); nsMgr.AddNamespace("ns", "http://webservices.amazon.com/AWSECommerceService/2009-03-31"); XmlNodeList nodes = xml.SelectNodes("/ns:ItemLookupResponse/ns:Items/ns:Item", nsMgr); if (nodes.Count > 0) { album = FillAlbum(nodes[0]); } return(album); }
/// <summary> /// Lookup an Amazon Album, for which the ASIN is known. /// Should find one exact match. /// </summary> /// <param name = "albumID"></param> /// <returns></returns> public AmazonAlbum AmazonAlbumLookup(string albumID) { AmazonAlbum album = new AmazonAlbum(); SignedRequestHelper helper = new SignedRequestHelper(Options.MainSettings.AmazonSite); string requestString = helper.Sign(string.Format(itemLookup, albumID)); string responseXml = Util.GetWebPage(requestString); if (responseXml == null) return album; XmlDocument xml = new XmlDocument(); xml.LoadXml(responseXml); // Retrieve default Namespace of the document and add it to the NameSpacemanager string defaultNameSpace = xml.DocumentElement.GetNamespaceOfPrefix(""); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable); nsMgr.AddNamespace("ns", defaultNameSpace); XmlNodeList nodes = xml.SelectNodes("/ns:ItemLookupResponse/ns:Items/ns:Item", nsMgr); if (nodes.Count > 0) { album = FillAlbum(nodes[0]); } return album; }
/// <summary> /// Lookup an Amazon Album, for which the ASIN is known. /// Should find one exact match. /// </summary> /// <param name = "albumID"></param> /// <returns></returns> public AmazonAlbum AmazonAlbumLookup(string albumID) { AmazonAlbum album = new AmazonAlbum(); SignedRequestHelper helper = new SignedRequestHelper(Options.MainSettings.AmazonSite); string requestString = helper.Sign(string.Format(itemLookup, albumID)); string responseXml = Util.GetWebPage(requestString); if (responseXml == null) { return(album); } XmlDocument xml = new XmlDocument(); xml.LoadXml(responseXml); // Retrieve default Namespace of the document and add it to the NameSpacemanager string defaultNameSpace = xml.DocumentElement.GetNamespaceOfPrefix(""); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable); nsMgr.AddNamespace("ns", defaultNameSpace); XmlNodeList nodes = xml.SelectNodes("/ns:ItemLookupResponse/ns:Items/ns:Item", nsMgr); if (nodes.Count > 0) { album = FillAlbum(nodes[0]); } return(album); }
/// <summary> /// Search on Amazon for an albums of a specific artist /// </summary> /// <param name = "artist"></param> /// <param name = "albumTitle"></param> /// <returns></returns> public List <AmazonAlbum> AmazonAlbumSearch(string artist, string albumTitle) { log.Debug("Amazon: Searching Amazon Webservices"); List <AmazonAlbum> albums = new List <AmazonAlbum>(); SignedRequestHelper helper = new SignedRequestHelper(Options.MainSettings.AmazonSite); string requestString = helper.Sign(string.Format(itemSearch, HttpUtility.UrlEncode(artist), HttpUtility.UrlEncode(albumTitle))); string responseXml = Util.GetWebPage(requestString); if (responseXml == null) { log.Debug("Amazon: Amazon Webservices did not return any data"); return(albums); } XmlDocument xml = new XmlDocument(); xml.LoadXml(responseXml); // Retrieve default Namespace of the document and add it to the NameSpacemanager string defaultNameSpace = xml.DocumentElement.GetNamespaceOfPrefix(""); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable); nsMgr.AddNamespace("ns", defaultNameSpace); XmlNodeList nodes = xml.SelectNodes("/ns:ItemSearchResponse/ns:Items/ns:Item", nsMgr); if (nodes.Count > 0) { foreach (XmlNode node in nodes) { AmazonAlbum newAlbum = FillAlbum(node); // Check if we already got an album with the same title. // This happens, if the same album has been released by different distributors, labels // we will skip the album in this case bool found = false; foreach (AmazonAlbum album in albums) { if (album.Title == newAlbum.Title) { found = true; break; } } if (!found) { if (newAlbum.LargeImageUrl != null || newAlbum.MediumImageUrl != null || newAlbum.SmallImageUrl != null) { albums.Add(newAlbum); } } } } return(albums); }
/// <summary> /// Lookup an Amazon Album, for which the ASIN is known. /// Should find one exact match. /// </summary> /// <param name = "albumID"></param> /// <returns></returns> public AmazonAlbum AmazonAlbumLookup(string albumID) { AmazonAlbum album = new AmazonAlbum(); SignedRequestHelper helper = new SignedRequestHelper(Options.MainSettings.AmazonSite); string requestString = helper.Sign(string.Format(itemLookup, albumID)); string responseXml = Util.GetWebPage(requestString); if (responseXml == null) return album; XmlDocument xml = new XmlDocument(); xml.LoadXml(responseXml); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable); nsMgr.AddNamespace("ns", "http://webservices.amazon.com/AWSECommerceService/2009-03-31"); XmlNodeList nodes = xml.SelectNodes("/ns:ItemLookupResponse/ns:Items/ns:Item", nsMgr); if (nodes.Count > 0) { album = FillAlbum(nodes[0]); } return album; }
private AmazonAlbum FillAlbum(XmlNode node) { AmazonAlbum album = new AmazonAlbum(); foreach (XmlNode childNode in node) { if (childNode.Name == "ASIN") album.Asin = childNode.InnerText; if (childNode.Name == "SmallImage") { album.SmallImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "MediumImage") { album.MediumImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "LargeImage") { album.LargeImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "ItemAttributes") { foreach (XmlNode attributeNode in childNode) { if (attributeNode.Name == "Artist") album.Artist = attributeNode.InnerText; if (attributeNode.Name == "Title") album.Title = attributeNode.InnerText; if (attributeNode.Name == "ReleaseDate") album.Year = attributeNode.InnerText; if (attributeNode.Name == "Binding") album.Binding = attributeNode.InnerText; if (attributeNode.Name == "Label") album.Label = attributeNode.InnerText; } } if (childNode.Name == "Tracks") { // The node starts with a "<Disc Number Node" , we want all subnodes of it List<List<AmazonAlbumTrack>> discs = new List<List<AmazonAlbumTrack>>(); List<AmazonAlbumTrack> tracks = new List<AmazonAlbumTrack>(); foreach (XmlNode discNode in childNode.ChildNodes) { foreach (XmlNode trackNode in discNode) { AmazonAlbumTrack track = new AmazonAlbumTrack(); track.Number = Convert.ToInt32(trackNode.Attributes["Number"].Value); track.Title = trackNode.InnerText; tracks.Add(track); } discs.Add(tracks); } album.Discs = discs; } } return album; }
public void ShowAlbumDetails(AmazonAlbum album) { dlgAlbumDetails = new AlbumDetails(); // Prepare the Details Dialog dlgAlbumDetails.Artist = album.Artist; dlgAlbumDetails.Album = album.Title; dlgAlbumDetails.Year = album.Year; try { using (MemoryStream ms = new MemoryStream(album.AlbumImage.Data)) { Image img = Image.FromStream(ms); if (img != null) { dlgAlbumDetails.Cover.Image = img; } } } catch {} // Add Tracks of the selected album foreach (List<AmazonAlbumTrack> disc in album.Discs) { foreach (AmazonAlbumTrack track in disc) { ListViewItem lvItem = new ListViewItem(track.Number.ToString()); lvItem.SubItems.Add(track.Title); dlgAlbumDetails.AlbumTracks.Items.Add(lvItem); } } // Add selected Files from Grid foreach (DataGridViewRow row in _tracksGrid.Rows) { if (!row.Selected) continue; TrackData track = Options.Songlist[row.Index]; ListViewItem lvItem = new ListViewItem((row.Index + 1).ToString()); lvItem.SubItems.Add(track.FileName); lvItem.Tag = row.Index; dlgAlbumDetails.DiscTracks.Items.Add(lvItem); } // if we have less files selected, than in the album, fill the rest with"unassigned" if (dlgAlbumDetails.DiscTracks.Items.Count < dlgAlbumDetails.AlbumTracks.Items.Count) { for (int i = dlgAlbumDetails.DiscTracks.Items.Count - 1; i < dlgAlbumDetails.AlbumTracks.Items.Count - 1; i++) { ListViewItem unassignedItem = new ListViewItem((i + 2).ToString()); unassignedItem.SubItems.Add(ServiceScope.Get<ILocalisation>().ToString("Lookup", "Unassigned")); unassignedItem.Tag = -1; unassignedItem.Checked = false; dlgAlbumDetails.DiscTracks.Items.Add(unassignedItem); } } int albumTrackPos = 0; foreach (ListViewItem lvAlbumItem in dlgAlbumDetails.AlbumTracks.Items) { int discTrackPos = 0; foreach (ListViewItem lvDiscItem in dlgAlbumDetails.DiscTracks.Items) { if (Util.LongestCommonSubstring(lvAlbumItem.SubItems[1].Text, lvDiscItem.SubItems[1].Text) > 0.75) { lvDiscItem.Checked = true; dlgAlbumDetails.DiscTracks.Items.RemoveAt(discTrackPos); dlgAlbumDetails.DiscTracks.Items.Insert(albumTrackPos, lvDiscItem); break; } discTrackPos++; } albumTrackPos++; } dlgAlbumDetails.Renumber(); if (main.ShowModalDialog(dlgAlbumDetails) == DialogResult.OK) { int i = -1; foreach (ListViewItem lvItem in dlgAlbumDetails.DiscTracks.Items) { i++; int index = (int)lvItem.Tag; if (index == -1 || lvItem.Checked == false) continue; TrackData track = Options.Songlist[index]; track.Artist = dlgAlbumDetails.Artist; track.Album = dlgAlbumDetails.Album; string strYear = dlgAlbumDetails.Year; if (strYear.Length > 4) strYear = strYear.Substring(0, 4); int year = 0; try { year = Convert.ToInt32(strYear); } catch (Exception) {} if (year > 0 && track.Year == 0) track.Year = year; // Add the picture ByteVector vector = album.AlbumImage; if (vector != null) { MPTagThat.Core.Common.Picture pic = new MPTagThat.Core.Common.Picture(); pic.MimeType = "image/jpg"; pic.Description = ""; pic.Type = PictureType.FrontCover; pic.Data = vector.Data; track.Pictures.Add(pic); } ListViewItem trackItem = dlgAlbumDetails.AlbumTracks.Items[i]; track.Track = trackItem.SubItems[0].Text; track.Title = trackItem.SubItems[1].Text; main.TracksGridView.SetBackgroundColorChanged(index); track.Changed = true; Options.Songlist[index] = track; main.TracksGridView.Changed = true; } } dlgAlbumDetails.Dispose(); }
private AmazonAlbum FillAlbum(XmlNode node) { AmazonAlbum album = new AmazonAlbum(); foreach (XmlNode childNode in node) { if (childNode.Name == "ASIN") { album.Asin = childNode.InnerText; } if (childNode.Name == "SmallImage") { album.SmallImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "MediumImage") { album.MediumImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "LargeImage") { album.LargeImageUrl = GetNode(childNode, "URL"); album.CoverWidth = GetNode(childNode, "Width"); album.CoverHeight = GetNode(childNode, "Height"); } if (childNode.Name == "ItemAttributes") { foreach (XmlNode attributeNode in childNode) { if (attributeNode.Name == "Artist") { album.Artist = attributeNode.InnerText; } if (attributeNode.Name == "Title") { album.Title = attributeNode.InnerText; } if (attributeNode.Name == "ReleaseDate") { album.Year = attributeNode.InnerText; } if (attributeNode.Name == "Binding") { album.Binding = attributeNode.InnerText; } if (attributeNode.Name == "Label") { album.Label = attributeNode.InnerText; } } } if (childNode.Name == "Tracks") { // The node starts with a "<Disc Number Node" , we want all subnodes of it List <List <AmazonAlbumTrack> > discs = new List <List <AmazonAlbumTrack> >(); List <AmazonAlbumTrack> tracks = new List <AmazonAlbumTrack>(); foreach (XmlNode discNode in childNode.ChildNodes) { foreach (XmlNode trackNode in discNode) { AmazonAlbumTrack track = new AmazonAlbumTrack(); track.Number = Convert.ToInt32(trackNode.Attributes["Number"].Value); track.Title = trackNode.InnerText; tracks.Add(track); } discs.Add(tracks); } album.Discs = discs; } } return(album); }
private void DoSearchAlbum() { Cursor = Cursors.WaitCursor; tbArtist.Enabled = false; tbAlbum.Enabled = false; btSearch.Enabled = false; btUpdate.Enabled = false; using (AmazonAlbumInfo amazonInfo = new AmazonAlbumInfo()) { _albums = amazonInfo.AmazonAlbumSearch(_artist, _album); } if (_albums.Count > 0) { btUpdate.Enabled = true; groupBoxAmazonMultipleAlbums.Text = ServiceScope.Get<ILocalisation>().ToString("AmazonAlbumSearch", "GroupBoxResults"); if (_albums.Count == 1) { _amazonAlbum = _albums[0]; btUpdate.PerformClick(); // Close the Dialog } else { FillResults(); } } else { groupBoxAmazonMultipleAlbums.Text = ServiceScope.Get<ILocalisation>().ToString("AmazonAlbumSearch", "NotFound"); ServiceScope.Get<ILogger>().GetLogger.Debug("No Cover Art found"); btUpdate.Enabled = false; } tbArtist.Enabled = true; tbAlbum.Enabled = true; btSearch.Enabled = true; Cursor = Cursors.Default; }
/// <summary> /// Update Button has been clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btUpdate_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; if (lvSearchResults.SelectedIndices.Count > 0) { _amazonAlbum = _albums[lvSearchResults.SelectedIndices[0]]; } else if (_albums.Count > 0) { _amazonAlbum = _albums[0]; } Close(); }
private void AddImageToList(AmazonAlbum album) { if (album.AlbumImage == null) return; using (MemoryStream ms = new MemoryStream(album.AlbumImage.Data)) { Image img = Image.FromStream(ms); if (img != null) { imagelist.Images.Add(img); } } }