コード例 #1
0
        /// <summary>
        ///   Tag the the Selected files from Internet
        /// </summary>
        private void IdentifyFilesThread(object sender, DoWorkEventArgs e)
        {
            log.Trace(">>>");
              //Make calls to Tracksgrid Threadsafe
              if (tracksGrid.InvokeRequired)
              {
            ThreadSafeGridDelegate1 d = IdentifyFilesThread;
            tracksGrid.Invoke(d, new[] { sender, e });
            return;
              }

              int count = 0;
              int trackCount = tracksGrid.SelectedRows.Count;
              SetProgressBar(trackCount);

              MusicBrainzAlbum musicBrainzAlbum = new MusicBrainzAlbum();

              foreach (DataGridViewRow row in tracksGrid.Rows)
              {
            ClearStatusColumn(row.Index);

            if (!row.Selected)
            {
              continue;
            }

            count++;
            try
            {
              Application.DoEvents();
              _main.progressBar1.Value += 1;
              if (_progressCancelled)
              {
            ResetProgressBar();
            return;
              }
              TrackData track = Options.Songlist[row.Index];

              using (MusicBrainzTrackInfo trackinfo = new MusicBrainzTrackInfo())
              {
            Util.SendProgress(string.Format("Identifying file {0}", track.FileName));
            log.Debug("Identify: Processing file: {0}", track.FullFileName);
            List<MusicBrainzTrack> musicBrainzTracks = trackinfo.GetMusicBrainzTrack(track.FullFileName);

            if (musicBrainzTracks == null)
            {
              log.Debug("Identify: Couldn't identify file");
              continue;
            }

            if (musicBrainzTracks.Count > 0)
            {
              MusicBrainzTrack musicBrainzTrack = null;
              if (musicBrainzTracks.Count == 1)
                musicBrainzTrack = musicBrainzTracks[0];
              else
              {
                // Skip the Album selection, if the album been selected already for a previous track
                bool albumFound = false;
                foreach (MusicBrainzTrack mbtrack in musicBrainzTracks)
                {
                  if (mbtrack.AlbumID == musicBrainzAlbum.Id)
                  {
                    albumFound = true;
                    musicBrainzTrack = mbtrack;
                    break;
                  }
                }

                if (!albumFound)
                {
                  MusicBrainzAlbumResults dlgAlbumResults = new MusicBrainzAlbumResults(musicBrainzTracks);
                  dlgAlbumResults.Owner = _main;
                  if (_main.ShowModalDialog(dlgAlbumResults) == DialogResult.OK)
                  {
                    if (dlgAlbumResults.SelectedListItem > -1)
                      musicBrainzTrack = musicBrainzTracks[dlgAlbumResults.SelectedListItem];
                    else
                      musicBrainzTrack = musicBrainzTracks[0];
                  }
                  dlgAlbumResults.Dispose();
                }
              }

              // We didn't get a track
              if (musicBrainzTrack == null)
              {
                log.Debug("Identify: No information returned from Musicbrainz");
                continue;
              }

              // Are we still at the same album?
              // if not, get the album, so that we have the release date
              if (musicBrainzAlbum.Id != musicBrainzTrack.AlbumID)
              {
                using (MusicBrainzAlbumInfo albumInfo = new MusicBrainzAlbumInfo())
                {
                  Application.DoEvents();
                  if (_progressCancelled)
                  {
                    ResetProgressBar();
                    return;
                  }
                  musicBrainzAlbum = albumInfo.GetMusicBrainzAlbumById(musicBrainzTrack.AlbumID.ToString());
                }
              }

              track.Title = musicBrainzTrack.Title;
              track.Artist = musicBrainzTrack.Artist;
              track.Album = musicBrainzTrack.Album;
              track.Track = musicBrainzTrack.Number.ToString();

              if (musicBrainzAlbum.Year != null && musicBrainzAlbum.Year.Length >= 4)
                track.Year = Convert.ToInt32(musicBrainzAlbum.Year.Substring(0, 4));

              // Do we have a valid Amazon Album?
              if (musicBrainzAlbum.Amazon != 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)
                {
                  ByteVector vector = musicBrainzAlbum.Amazon.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);
                  }
                }
              }

              SetBackgroundColorChanged(row.Index);
              track.Changed = true;
              Options.Songlist[row.Index] = track;
              _itemsChanged = true;
            }
              }
            }
            catch (Exception ex)
            {
              Options.Songlist[row.Index].Status = 2;
              AddErrorMessage(row, ex.Message);
            }
              }

              Util.SendProgress("");
              tracksGrid.Refresh();
              tracksGrid.Parent.Refresh();
              _main.TagEditForm.FillForm();

              ResetProgressBar();

              log.Trace("<<<");
        }
コード例 #2
0
        /// <summary>
        /// Lookup the file in Music Brainz with the Fingerprint
        /// </summary>
        /// <param name="track"></param>
        /// <param name="rowIndex"></param>
        /// <returns></returns>
        public override bool Execute(ref TrackData track, int rowIndex)
        {
            using (MusicBrainzTrackInfo trackinfo = new MusicBrainzTrackInfo())
              {
            Util.SendProgress(string.Format("Identifying file {0}", track.FileName));
            Log.Debug("Identify: Processing file: {0}", track.FullFileName);
            List<MusicBrainzTrack> musicBrainzTracks = trackinfo.GetMusicBrainzTrack(track.FullFileName);

            if (musicBrainzTracks == null)
            {
              Log.Debug("Identify: Couldn't identify file");
              return false;
            }

            if (musicBrainzTracks.Count > 0)
            {
              MusicBrainzTrack musicBrainzTrack = null;
              if (musicBrainzTracks.Count == 1 && musicBrainzTracks[0].Releases.Count == 1)
              {
            musicBrainzTrack = musicBrainzTracks[0];
            // Have we got already this album
            if (musicBrainzTrack.AlbumId == null || musicBrainzTrack.AlbumId != _musicBrainzAlbum.Id)
            {
              using (var albumInfo = new MusicBrainzAlbumInfo())
              {
                _musicBrainzAlbum = albumInfo.GetMusicBrainzAlbumById(musicBrainzTrack.Releases[0].AlbumId);
              }
            }
            musicBrainzTrack.AlbumId = _musicBrainzAlbum.Id;
              }
              else
              {
            // Skip the Album selection, if the album been selected already for a previous track
            bool albumFound = false;
            foreach (var mbtrack in musicBrainzTracks)
            {
              foreach (var mbRelease in mbtrack.Releases)
              {
                if (mbRelease.AlbumId == _musicBrainzAlbum.Id)
                {
                  albumFound = true;
                  musicBrainzTrack = mbtrack;
                  musicBrainzTrack.AlbumId = mbRelease.AlbumId;
                  break;
                }
              }
            }

            if (!albumFound)
            {
              var dlgAlbumResults = new MusicBrainzAlbumResults(musicBrainzTracks);
              dlgAlbumResults.Owner = TracksGrid.MainForm;
              dlgAlbumResults.StartPosition = FormStartPosition.CenterParent;
              if (dlgAlbumResults.ShowDialog() == DialogResult.OK)
              {
                var itemTag = dlgAlbumResults.SelectedListItem as Dictionary<string, MusicBrainzTrack>;
                if (itemTag != null)
                  foreach (var albumId in itemTag.Keys)
                  {
                    itemTag.TryGetValue(albumId, out musicBrainzTrack);
                    if (musicBrainzTrack != null) musicBrainzTrack.AlbumId = albumId;
                  }
              }
              dlgAlbumResults.Dispose();
            }
              }

              // We didn't get a track
              if (musicBrainzTrack == null)
              {
            Log.Debug("Identify: No information returned from Musicbrainz");
            return false;
              }

              // Are we still at the same album?
              // if not, get the album, so that we have the release date
              if (_musicBrainzAlbum.Id != musicBrainzTrack.AlbumId)
              {
            using (var albumInfo = new MusicBrainzAlbumInfo())
            {
              Application.DoEvents();
              if (ProgressCancelled)
              {
                return false;
              }
              _musicBrainzAlbum = albumInfo.GetMusicBrainzAlbumById(musicBrainzTrack.AlbumId);
            }
              }

              track.Title = musicBrainzTrack.Title;
              track.Artist = musicBrainzTrack.Artist;
              track.Album = _musicBrainzAlbum.Title;
              track.AlbumArtist = _musicBrainzAlbum.Artist;

              // Get the Disic and Track# from the Album
              foreach (var mbTrack in _musicBrainzAlbum.Tracks)
              {
            if (mbTrack.Id == musicBrainzTrack.Id)
            {
              track.TrackNumber = Convert.ToUInt32(mbTrack.Number);
              track.TrackCount = Convert.ToUInt32(mbTrack.TrackCount);
              track.DiscNumber = Convert.ToUInt32(mbTrack.DiscId);
              track.DiscCount = Convert.ToUInt32(_musicBrainzAlbum.DiscCount);
              break;
            }
              }

              if (_musicBrainzAlbum.Year != null && _musicBrainzAlbum.Year.Length >= 4)
            track.Year = Convert.ToInt32(_musicBrainzAlbum.Year.Substring(0, 4));

              // Do we have a valid Amazon Album?
              if (_musicBrainzAlbum.Amazon != 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)
            {
              var vector = _musicBrainzAlbum.Amazon.AlbumImage;
              if (vector != null)
              {
                var pic = new Core.Common.Picture();
                pic.MimeType = "image/jpg";
                pic.Description = "";
                pic.Type = PictureType.FrontCover;
                pic.Data = vector.Data;
                track.Pictures.Add(pic);
              }
            }
              }

              return true;
            }
              }
              return false;
        }