public override bool Equals(object obj) { var otherSong = obj as Song; return(otherSong != null && FileUriPath.Equals(otherSong.FileUriPath, StringComparison.OrdinalIgnoreCase)); }
public Song(StorageFile file, string token) { const string unknown = "Unknown"; FileUriPath = file.Path; Token = token; StorageType = SongStorageType.Local; using (var stream = file.OpenStreamForReadAsync().GetAwaiter().GetResult()) { var tag = TagLib.File.Create(new StreamFileAbstraction(file.Name, stream, stream)).Tag; Title = tag.Title ?? unknown; AlbumTitle = tag.Album ?? unknown; ArtistName = tag.Performers.Length > 0 ? tag.Performers.Aggregate((c, n) => $"{c}; {n}").TrimEnd("; ") : unknown; GenreTitle = tag.FirstGenre ?? unknown; TrackNumber = tag.Track; Year = tag.Year; var musicProperties = file.Properties.GetMusicPropertiesAsync().GetAwaiter().GetResult(); Duration = musicProperties.Duration; var cover = tag.Pictures.FirstOrDefault(); if (SaveCover(cover?.Data.Data)) { CoverFilePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, CoverFolder, FileUriPath.ComputeMD5()); } } Title = Title == unknown ? file.DisplayName : Title; }