/// <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; }
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; } }
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(); }
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); }