Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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)
            {}
        }
Ejemplo n.º 4
0
 /// <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();
 }
Ejemplo n.º 5
0
        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;
        }