Beispiel #1
0
        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))
            });
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #8
0
 public SampleMusicFile(MusicMetadata metadata, string fileName) : base(x => Task.FromResult(metadata), fileName)
 {
 }
Beispiel #9
0
 public MockMusicFile(MusicMetadata metadata, string fileName) : base(x => Task.FromResult(metadata), fileName)
 {
     GetMetadataAsync().GetAwaiter().GetResult();  // Ensure that the metadata is loaded.
 }