/// <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);
                }
            }
        }
        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;
        }
Beispiel #4
0
        public void SearchForAlbumInformation()
        {
            // Loop through the selected rows and see, if we got an Artist and/or Album set
            // Need at least an album
            foreach (DataGridViewRow row in _tracksGrid.Rows)
            {
                if (!row.Selected)
                {
                    continue;
                }

                TrackData track = main.TracksGridView.TrackList[row.Index];
                if (_selectedArtist == "")
                {
                    _selectedArtist = track.Artist;
                }

                if (_selectedAlbum == "")
                {
                    _selectedAlbum = track.Album;
                }

                // If we found both values, we can leave
                if (_selectedAlbum != "" && _selectedArtist != "")
                {
                    break;
                }
            }

            _askForAlbum = (_selectedAlbum == "");

            while (true)
            {
                // If no Album was specified, we need to show the select dialog
                if (_askForAlbum)
                {
                    if (!RequestArtistAlbum())
                    {
                        break;
                    }
                }

                AmazonAlbum album = GetAlbumInformation();

                // It may happen that an album doesn't return Track Information
                // Inform the uer to make a new selection
                if (album == null || album.Discs.Count == 0)
                {
                    if (_askForAlbum)
                    {
                        MessageBox.Show(ServiceScope.Get <ILocalisation>().ToString("Lookup", "NoAlbumFound"),
                                        ServiceScope.Get <ILocalisation>().ToString("message", "Error"), MessageBoxButtons.OK);
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }

                ShowAlbumDetails(album);

                // Now that we've come so far, we don't need to reshow that artist / album selection panel
                break;
            }
        }
Beispiel #5
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  = main.TracksGridView.TrackList[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 = main.TracksGridView.TrackList[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        = pic.ImageFromData(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;
                    main.TracksGridView.Changed = true;
                    main.TracksGridView.SetStatusColumnChange(main.TracksGridView.View.Rows[index]);
                }
            }
            dlgAlbumDetails.Dispose();
        }
Beispiel #6
0
        public AmazonAlbum GetAlbumInformation()
        {
            main.Cursor = Cursors.WaitCursor;
            List <AmazonAlbum> albums = new List <AmazonAlbum>();

            using (AmazonAlbumInfo amazonInfo = new AmazonAlbumInfo())
            {
                albums = amazonInfo.AmazonAlbumSearch(_selectedArtist, _selectedAlbum);
            }

            // Show the Album Selection dialog, if we got more than one album
            AmazonAlbum amazonAlbum = null;

            _askForAlbum = true;
            if (albums.Count > 0)
            {
                _askForAlbum = false;
                if (albums.Count == 1)
                {
                    amazonAlbum = albums[0];
                    // If we didn't get any disc info, consider the album as not found
                    if (amazonAlbum.Discs.Count == 0)
                    {
                        _askForAlbum = true;
                    }
                }
                else
                {
                    dlgSearchResult = new AlbumSearchResult();
                    foreach (AmazonAlbum foundAlbum in albums)
                    {
                        // Skip Albums with no Discs returned
                        if (foundAlbum.Discs.Count == 0)
                        {
                            continue;
                        }

                        // count the number of tracks, as we may have multiple discs
                        int trackCount = 0;
                        foreach (List <AmazonAlbumTrack> tracks in foundAlbum.Discs)
                        {
                            trackCount += tracks.Count;
                        }

                        ListViewItem lvItem = new ListViewItem(foundAlbum.Artist);
                        lvItem.SubItems.Add(foundAlbum.Title);
                        lvItem.SubItems.Add(trackCount.ToString());
                        lvItem.SubItems.Add(foundAlbum.Year);
                        lvItem.SubItems.Add(foundAlbum.Label);
                        dlgSearchResult.ResultView.Items.Add(lvItem);
                    }
                    main.Cursor = Cursors.Default;

                    // When the Listview contains no items, none of the found albums has track information
                    if (dlgSearchResult.ResultView.Items.Count == 0)
                    {
                        _askForAlbum = true;
                    }
                    else
                    {
                        if (main.ShowModalDialog(dlgSearchResult) == DialogResult.OK)
                        {
                            if (dlgSearchResult.ResultView.SelectedIndices.Count > 0)
                            {
                                amazonAlbum = albums[dlgSearchResult.ResultView.SelectedIndices[0]];
                            }
                            else
                            {
                                amazonAlbum = albums[0];
                            }
                        }
                        else
                        {
                            // Don't ask for album again, since the user cancelled
                            _askForAlbum = false;
                            dlgSearchResult.Dispose();
                            return(amazonAlbum);
                        }
                    }
                    dlgSearchResult.Dispose();
                }
            }
            main.Cursor = Cursors.Default;
            return(amazonAlbum);
        }
        public MusicBrainzAlbum GetMusicBrainzAlbumById(string albumID)
        {
            MusicBrainzAlbum album = new MusicBrainzAlbum();

            string requestString = musicBrainzUrl + string.Format(requestByID, albumID);
            string responseXml   = Util.GetWebPage(requestString);

            if (responseXml == null)
            {
                return(null);
            }

            XmlDocument xml = new XmlDocument();

            xml.LoadXml(responseXml);
            XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);

            nsMgr.AddNamespace("m", "http://musicbrainz.org/ns/mmd-1.0#");

            XmlNodeList nodes = xml.SelectNodes("/m:metadata/m:release", nsMgr);

            if (nodes.Count > 0)
            {
                album.Id = new Guid(nodes[0].Attributes["id"].InnerXml);
                foreach (XmlNode childNode in nodes[0])
                {
                    if (childNode.Name == "title")
                    {
                        album.Title = childNode.InnerText;
                    }

                    if (childNode.Name == "asin")
                    {
                        album.Asin = childNode.InnerText;
                    }

                    if (childNode.Name == "artist")
                    {
                        foreach (XmlNode artistNode in childNode)
                        {
                            if (artistNode.Name == "name")
                            {
                                album.Artist = artistNode.InnerText;
                                break;
                            }
                        }
                    }

                    if (childNode.Name == "release-event-list")
                    {
                        foreach (XmlNode releaseNode in childNode)
                        {
                            if (releaseNode.Name == "event")
                            {
                                album.Year = releaseNode.Attributes["date"].InnerXml;
                            }
                        }
                    }

                    if (childNode.Name == "track-list")
                    {
                        foreach (XmlNode trackNode in childNode.ChildNodes)
                        {
                            MusicBrainzTrack track = new MusicBrainzTrack();
                            track.Id      = new Guid(trackNode.Attributes["id"].InnerXml);
                            track.AlbumID = album.Id;
                            track.Album   = album.Title;
                            track.Artist  = album.Artist;
                            foreach (XmlNode trackDetail in trackNode.ChildNodes)
                            {
                                if (trackDetail.Name == "title")
                                {
                                    track.Title = trackDetail.InnerText;
                                }

                                if (trackDetail.Name == "duration")
                                {
                                    track.Duration = Convert.ToInt32(trackDetail.InnerText);
                                }
                            }
                            album.Tracks.Add(track);
                        }
                    }
                }

                if (album.Asin != null)
                {
                    // Now do a lookup on Amazon for the Image Url
                    using (AmazonAlbumInfo amazonInfo = new AmazonAlbumInfo())
                    {
                        AmazonAlbum amazonAlbum = amazonInfo.AmazonAlbumLookup(album.Asin);
                        album.Amazon = amazonAlbum;
                    }
                }
            }

            return(album);
        }