コード例 #1
0
        public override bool Equals(object obj)
        {
            var otherSong = obj as Song;

            return(otherSong != null && FileUriPath.Equals(otherSong.FileUriPath, StringComparison.OrdinalIgnoreCase));
        }
コード例 #2
0
        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;
        }