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