Exemplo n.º 1
0
        public void SaveTrackChanges(Track trackChanged, Artist originalArtist, Disc originalDisc, bool updateTrackDetails, bool updateArtistDetails, bool updateDiscDetails, bool updateAlbumDetails)
        {
            _libraryOrganiserService.UpdateLibrary(trackChanged, originalArtist, originalDisc);

            var tracksAffected = GetTracksAffected(trackChanged, updateArtistDetails, updateDiscDetails, updateAlbumDetails);

            var trackId3Data  = new Lazy <TrackId3Data>(() => GetId3Data(trackChanged));
            var artistId3Data = new Lazy <ArtistId3Data>(() => GetId3Data(trackChanged.Artist));
            var albumId3Data  = new Lazy <AlbumId3Data>(() => GetId3Data(trackChanged.Disc.Album));
            var discId3Data   = new Lazy <DiscId3Data>(() => GetId3Data(trackChanged.Disc));

            foreach (var track in tracksAffected)
            {
                var id3Data = new Id3Data
                {
                    Track   = updateTrackDetails && track == trackChanged ? trackId3Data.Value : null,
                    Artist  = updateArtistDetails && track.Artist == trackChanged.Artist ? artistId3Data.Value : null,
                    Album   = updateAlbumDetails && track.Disc.Album == trackChanged.Disc.Album ? albumId3Data.Value : null,
                    Disc    = updateDiscDetails && track.Disc == trackChanged.Disc ? discId3Data.Value : null,
                    Comment = (updateTrackDetails || updateArtistDetails) && track.Artist == trackChanged.Artist ? GetId3Comment(track) : null
                };

                _taggingService.SaveId3Data(track.File.FullPath, id3Data);

                var fileInfo = new FileInfo(track.File.FullPath);
                track.File.DateModified = fileInfo.LastWriteTime;
            }
        }
Exemplo n.º 2
0
        public void SaveId3Data(string filepath, Id3Data data)
        {
            using (TagLib.File f = TagLib.File.Create(filepath))
            {
                TagLib.Id3v2.Tag.DefaultVersion      = 3;
                TagLib.Id3v2.Tag.ForceDefaultVersion = true;

                if (data.Track != null)
                {
                    f.Tag.Title  = data.Track.Title;
                    f.Tag.Lyrics = data.Track.Lyrics;
                    f.Tag.Track  = Convert.ToUInt16(data.Track.TrackNo);
                }

                if (data.Artist != null)
                {
                    f.Tag.Performers     = null;
                    f.Tag.PerformersSort = null;
                    f.Tag.Performers     = new[] { data.Artist.Name };
                    f.Tag.PerformersSort = new[] { data.Artist.SortName };
                    f.Tag.Genres         = null;
                    f.Tag.Genres         = new[] { data.Artist.Genre };
                    f.Tag.Grouping       = data.Artist.Grouping;
                }

                if (data.Album != null)
                {
                    f.Tag.Album     = data.Album.Title;
                    f.Tag.AlbumSort = data.Album.SortTitle;

                    f.Tag.AlbumArtists     = null;
                    f.Tag.AlbumArtistsSort = null;
                    f.Tag.AlbumArtists     = new[] { data.Album.Artist };
                    f.Tag.AlbumArtistsSort = new[] { data.Album.ArtistSort };

                    f.Tag.Year = Convert.ToUInt16(data.Album.Year);

                    f.Tag.MusicBrainzReleaseType = data.Album.ReleaseType;

                    f.Tag.DiscCount = Convert.ToUInt16(data.Album.DiscCount);

                    f.Tag.Pictures = null;
                    if (data.Album.Artwork != null)
                    {
                        f.Tag.Pictures = new IPicture[] { CreatePicture(data.Album.Artwork) };
                    }
                }

                if (data.Disc != null)
                {
                    f.Tag.TrackCount = Convert.ToUInt16(data.Disc.TrackCount);
                    f.Tag.Disc       = Convert.ToUInt16(data.Disc.DiscNo);
                }

                if (data.Comment != null)
                {
                    f.Tag.Comment = data.Comment;
                }

                f.Save();
            }
        }