public async Task <MusicMetadata> CreateMusicMetadata(MusicProperties properties, CancellationToken cancellationToken) { var propertiesToRetrieve = new List <string>(); AddPropertiesToRetrieve(propertiesToRetrieve); var customProperties = await properties.RetrievePropertiesAsync(propertiesToRetrieve).AsTask(cancellationToken).ConfigureAwait(false); TimeSpan duration = ReadDuration(properties, customProperties); uint bitrate = ReadBitrate(properties, customProperties); if (!IsSupported || (duration == TimeSpan.Zero && bitrate == 0)) { return(MusicMetadata.CreateUnsupported(duration, bitrate)); } return(new MusicMetadata(duration, bitrate) { Title = ReadTitle(properties, customProperties), Artists = ToSaveArray(ReadArtists(properties, customProperties)), Rating = ReadRating(properties, customProperties), Album = ReadAlbum(properties, customProperties), TrackNumber = ReadTrackNumber(properties, customProperties), Year = ReadYear(properties, customProperties), Genre = ToSaveArray(ReadGenre(properties, customProperties)), AlbumArtist = ReadAlbumArtist(properties, customProperties), Publisher = ReadPublisher(properties, customProperties), Subtitle = ReadSubtitle(properties, customProperties), Composers = ToSaveArray(ReadComposers(properties, customProperties)), Conductors = ToSaveArray(ReadConductors(properties, customProperties)) }); }
public void ApplyValuesFromTest() { var metadata1 = new MusicMetadata(TimeSpan.FromSeconds(1), 64000); var metadata2 = new MusicMetadata(TimeSpan.FromSeconds(1), 64000); Assert.IsTrue(metadata1.IsSupported); Assert.IsTrue(metadata2.IsSupported); metadata2.Artists = new[] { "Artist1", "Artist2" }; metadata2.Title = "Title"; metadata2.Rating = 80; metadata2.Album = "Album"; metadata2.TrackNumber = 3; metadata2.Year = 2000; metadata2.Genre = new[] { "Genre1", "Genre2" }; metadata2.AlbumArtist = "AlbumArtist"; metadata2.Publisher = "Publisher"; metadata2.Subtitle = "Subtitle"; metadata2.Composers = new[] { "Composer1", "Composer2" }; metadata2.Conductors = new[] { "Conductor1", "Conductor2" }; metadata1.ApplyValuesFrom(metadata2); TestHelper.AssertHaveEqualPropertyValues(metadata2, metadata1, p => p.Name != nameof(MusicMetadata.Parent)); }
public void TotalDurationWithMetadataLoading() { var manager = new PlaylistManager(); Assert.AreEqual(TimeSpan.Zero, manager.TotalDuration); var firstFile = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(10), 0), ""); manager.AddAndReplaceItems(new[] { new PlaylistItem(firstFile) }); var secondMetadata = new MusicMetadata(TimeSpan.FromSeconds(20), 0); var secondFile = new MusicFile(async x => { await Task.Delay(10); return(secondMetadata); }, ""); manager.AddItems(new[] { new PlaylistItem(secondFile) }); Assert.IsTrue(manager.IsTotalDurationEstimated); Assert.AreEqual(TimeSpan.FromSeconds(20), manager.TotalDuration); AssertHelper.PropertyChangedEvent(manager, x => x.TotalDuration, () => secondFile.GetMetadataAsync().GetResult()); Assert.IsFalse(manager.IsTotalDurationEstimated); Assert.AreEqual(TimeSpan.FromSeconds(30), manager.TotalDuration); var thirdFile = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(30), 0), ""); AssertHelper.PropertyChangedEvent(manager, x => x.TotalDuration, () => manager.AddItems(new[] { new PlaylistItem(thirdFile) })); Assert.AreEqual(TimeSpan.FromSeconds(60), manager.TotalDuration); }
public async Task ImplicitLoadMetadata() { var metadata = new MusicMetadata(TimeSpan.Zero, 0); var musicFile = new MusicFile(async fileNme => { await Task.Yield(); return(metadata); }, "testfile.mp3"); Assert.AreEqual("testfile.mp3", musicFile.FileName); Assert.IsFalse(musicFile.SharedMusicFiles.Any()); Assert.IsFalse(musicFile.IsMetadataLoaded); Assert.IsNull(musicFile.Metadata); await Task.Delay(5); Assert.AreEqual(metadata, musicFile.Metadata); Assert.AreEqual(metadata, musicFile.GetMetadataAsync().Result); Assert.IsTrue(musicFile.IsMetadataLoaded); Assert.AreEqual(musicFile, musicFile.Metadata.Parent); Assert.IsFalse(musicFile.Metadata.HasChanges); musicFile.Metadata.Rating = 33; Assert.IsTrue(musicFile.Metadata.HasChanges); }
public void UnsupportedMetadataTest() { var metadata = MusicMetadata.CreateUnsupported(TimeSpan.FromMinutes(3), 1024); Assert.IsFalse(metadata.IsSupported); Assert.AreEqual(TimeSpan.FromMinutes(3), metadata.Duration); Assert.AreEqual(1024, metadata.Bitrate); }
private static MusicFile CreateMockMusicFile(string fileName, string title, params string[] artists) { var metadata = new MusicMetadata(TimeSpan.FromSeconds(3), 128000) { Title = title, Artists = artists }; return(new MockMusicFile(metadata, fileName)); }
public void ConvertTest() { var musicFile = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(20), 0), ""); var unsupportedFile = new MockMusicFile(MusicMetadata.CreateUnsupported(TimeSpan.FromSeconds(20), 0), ""); var converter = new MusicPropertiesEnabledConverter(); Assert.AreEqual(true, converter.Convert(new object[] { musicFile, true }, null, null, null)); Assert.AreEqual(false, converter.Convert(new object[] { unsupportedFile, true }, null, null, null)); AssertHelper.ExpectedException <NotSupportedException>(() => converter.ConvertBack(null, null, null, null)); }
public SampleMusicFile(MusicMetadata metadata, string fileName) : base(x => Task.FromResult(metadata), fileName) { }
public MockMusicFile(MusicMetadata metadata, string fileName) : base(x => Task.FromResult(metadata), fileName) { GetMetadataAsync().GetAwaiter().GetResult(); // Ensure that the metadata is loaded. }