private void SearchFinishedMethod() { if (main.InvokeRequired) { ThreadSafeDelegate d = SearchFinishedMethod; main.Invoke(d); return; } main.Cursor = Cursors.Default; if (_dlgSearchResult.ResultView.Items.Count == 0) { ServiceScope.Get<ILogger>().GetLogger.Debug("No AlbumInformation found"); if (RequestArtistAlbum()) { var albumSearch = new AlbumSearch(this, _selectedArtist, _selectedAlbum); albumSearch.AlbumSites = Options.MainSettings.AlbumInfoSites; albumSearch.Run(); return; } } else if (_dlgSearchResult.ResultView.Items.Count == 1) { // We might have ended up, with just only one Album _album = _albums[0]; ShowAlbumDetails(_album); } else { if (main.ShowModalDialog(_dlgSearchResult) == DialogResult.OK) { if (_dlgSearchResult.ResultView.SelectedIndices.Count > 0) { _album = (Album) _dlgSearchResult.ResultView.SelectedItems[0].Tag; } else { _album = _albums[0]; } ShowAlbumDetails(_album); } else { // Don't ask for album again, since the user cancelled _askForAlbum = false; _dlgSearchResult.Dispose(); } } _dlgSearchResult.Dispose(); }
public void ShowAlbumDetails(Album 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); _dlgAlbumDetails.Cover.Image = img; } } catch {} // Add Tracks of the selected album foreach (List<AlbumTrack> disc in album.Discs) { foreach (AlbumTrack 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 void AddImageToList(Album album) { if (album.AlbumImage == null) return; try { using (MemoryStream ms = new MemoryStream(album.AlbumImage.Data)) { Image img = Image.FromStream(ms); _imagelist.Images.Add(img); } } catch (ArgumentException) {} }
/// <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) { _album = _albums[lvSearchResults.SelectedIndices[0]]; } else if (_albums.Count > 0) { _album = _albums[0]; } Close(); }
public override bool Execute(ref TrackData track, int rowIndex) { Util.SendProgress(string.Format("Search coverart for {0}", track.FileName)); Log.Debug("CoverArt: Retrieving coverart for: {0} - {1}", track.Artist, track.Album); // Should we take an existing folder.jpg instead of searching the web if (Options.MainSettings.EmbedFolderThumb && !Options.MainSettings.OnlySaveFolderThumb) { if (_folderThumb == null || Path.GetDirectoryName(track.FullFileName) != _savedFolder) { _savedFolder = Path.GetDirectoryName(track.FullFileName); _folderThumb = Util.GetFolderThumb(_savedFolder); } if (_folderThumb != null) { // Only write a picture if we don't have a picture OR Overwrite Pictures is set if (track.Pictures.Count == 0 || Options.MainSettings.OverwriteExistingCovers) { if (Options.MainSettings.ChangeCoverSize && Core.Common.Picture.ImageFromData(_folderThumb.Data).Width > Options.MainSettings.MaxCoverWidth) { _folderThumb.Resize(Options.MainSettings.MaxCoverWidth); } Log.Debug("CoverArt: Using existing folder.jpg"); // First Clear all the existingPictures track.Pictures.Clear(); track.Pictures.Add(_folderThumb); TracksGrid.MainForm.SetGalleryItem(); } return true; } } // If we don't have an Album don't do any query if (track.Album == "") return true; string coverSearchString = track.Artist + track.Album; if (_isMultipleArtistAlbum) { coverSearchString = track.Album; } bool foundInCash = _savedCoverCash.ContainsKey(coverSearchString); if (foundInCash) { _album = _savedCoverCash[coverSearchString]; } else { _album = null; } // Only retrieve the Cover Art, if we don't have it yet) if (!foundInCash || _album == null) { CoverSearch dlgAlbumResults = new CoverSearch(); dlgAlbumResults.Artist = _isMultipleArtistAlbum ? "" : track.Artist; dlgAlbumResults.Album = track.Album; dlgAlbumResults.FileDetails = track.FullFileName; dlgAlbumResults.Owner = TracksGrid.MainForm; dlgAlbumResults.StartPosition = FormStartPosition.CenterParent; _album = null; DialogResult dlgResult = dlgAlbumResults.ShowDialog(); if (dlgResult == DialogResult.OK) { if (dlgAlbumResults.SelectedAlbum != null) { _album = dlgAlbumResults.SelectedAlbum; } } else if (dlgResult == DialogResult.Abort) { Log.Debug("CoverArt: Search for all albums cancelled"); ProgressCancelled = true; return false; } else { Log.Debug("CoverArt: Album Selection cancelled"); return false; } dlgAlbumResults.Dispose(); } // Now update the Cover Art if (_album != null) { if (!_savedCoverCash.ContainsKey(coverSearchString)) { _savedCoverCash.Add(coverSearchString, _album); } // Only write a picture if we don't have a picture OR Overwrite Pictures is set); if ((track.Pictures.Count == 0 || Options.MainSettings.OverwriteExistingCovers) && !Options.MainSettings.OnlySaveFolderThumb) { track.Pictures.Clear(); ByteVector vector = _album.AlbumImage; if (vector != null) { var pic = new Core.Common.Picture(); pic.MimeType = "image/jpg"; pic.Description = "Front Cover"; pic.Type = PictureType.FrontCover; pic.Data = vector.Data; if (Options.MainSettings.ChangeCoverSize && Core.Common.Picture.ImageFromData(pic.Data).Width > Options.MainSettings.MaxCoverWidth) { pic.Resize(Options.MainSettings.MaxCoverWidth); } track.Pictures.Add(pic); } // And also set the Year from the Release Date delivered by Amazon // only if not present in Track if (_album.Year != null) { string strYear = _album.Year; if (strYear.Length > 4) strYear = strYear.Substring(0, 4); int year = 0; try { year = Convert.ToInt32(strYear); } catch (Exception) { // ignored } if (year > 0 && track.Year == 0) track.Year = year; } TracksGrid.MainForm.SetGalleryItem(); } } // If the user has selected to store only the folder thumb, without touching the file if (_album != null && Options.MainSettings.OnlySaveFolderThumb) { ByteVector vector = _album.AlbumImage; if (vector != null) { string fileName = Path.Combine(Path.GetDirectoryName(track.FullFileName), "folder.jpg"); try { Core.Common.Picture pic = new Core.Common.Picture(); if (Options.MainSettings.ChangeCoverSize && Core.Common.Picture.ImageFromData(pic.Data).Width > Options.MainSettings.MaxCoverWidth) { pic.Resize(Options.MainSettings.MaxCoverWidth); } Image img = Core.Common.Picture.ImageFromData(vector.Data); // Need to make a copy, otherwise we have a GDI+ Error Bitmap bmp = new Bitmap(img); bmp.Save(fileName, ImageFormat.Jpeg); FileInfo fi = new FileInfo(fileName); TracksGrid.NonMusicFiles.RemoveAll(f => f.Name == fi.Name); TracksGrid.NonMusicFiles.Add(fi); TracksGrid.MainForm.MiscInfoPanel.AddNonMusicFiles(TracksGrid.NonMusicFiles); } catch (Exception ex) { Log.Error("Exception Saving picture: {0} {1}", fileName, ex.Message); } return false; } } return true; }