/// <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;
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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;
        }
示例#7
0
        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);
            }
              }
        }