Example #1
0
        public void WhenLoadReferencesAreLoaded()
        {
            // Arrange
            var adaptersMock      = Mock.Create <IReferenceAdapters>();
            var albumAdapterMock  = Mock.Create <IDataAdapter <Album> >();
            var artistAdapterMock = Mock.Create <IDataAdapter <Artist> >();
            var titleAdapterMock  = Mock.Create <IDataAdapter <Title> >();
            var genreAdapterMock  = Mock.Create <IDataAdapter <Genre> >();
            var yearAdapterMock   = Mock.Create <IDataAdapter <Year> >();

            Mock.Arrange(() => adaptersMock.AlbumAdapter).Returns(albumAdapterMock);
            Mock.Arrange(() => adaptersMock.ArtistAdapter).Returns(artistAdapterMock);
            Mock.Arrange(() => adaptersMock.TitleAdapter).Returns(titleAdapterMock);
            Mock.Arrange(() => adaptersMock.GenreAdapter).Returns(genreAdapterMock);
            Mock.Arrange(() => adaptersMock.YearAdapter).Returns(yearAdapterMock);
            var target = new StorableTaggedFile();

            // Act
            target.LoadReferences(adaptersMock);

            // Assert(s)...
            Mock.Assert(() => albumAdapterMock.GetFirst(Arg.IsAny <Expression <Func <Album, bool> > >()));
            Mock.Assert(() => artistAdapterMock.GetFirst(Arg.IsAny <Expression <Func <Artist, bool> > >()));
            Mock.Assert(() => titleAdapterMock.GetFirst(Arg.IsAny <Expression <Func <Title, bool> > >()));
            Mock.Assert(() => genreAdapterMock.GetFirst(Arg.IsAny <Expression <Func <Genre, bool> > >()));
            Mock.Assert(() => yearAdapterMock.GetFirst(Arg.IsAny <Expression <Func <Year, bool> > >()));
        }
Example #2
0
 /// <summary>
 /// Adds the file.
 /// </summary>
 /// <param name="file">The file.</param>
 public void AddFile(StorableTaggedFile file)
 {
     file.LoadReferences(referenceAdapters);
     lock (files)
         files.Add(file);
     publicTransport.ApplicationEventBus.Publish(new PlaylistUpdatedEvent());
 }
Example #3
0
        /// <summary>
        /// Plays this instance.
        /// </summary>
        /// <param name="file"></param>
        public virtual void Play(StorableTaggedFile file)
        {
            file.Guard("file");
            var oldCurrent = CurrentTrack;
            var newChannel = new TrackContainer(player, file);

            try
            {
                newChannel.Preload();
            }
            catch (Exception e)
            {
                newChannel.Dispose();
                LogException(e, MethodBase.GetCurrentMethod());
                LogWarning("File Was: {0}", file.Filename);
                return;
            }
            SwapChannels(newChannel);

            if (null != oldCurrent)
            {
                PushContainer(oldCurrent);
            }

            var index = playlistService.Files.IndexOf(file);

            if (index < 0)
            {
                return;
            }
            playlistService.SetPlaylistIndex(file);
            ReBuffer();
        }
Example #4
0
        /// <summary>
        /// Creates the channel.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns></returns>
        public ITrack CreateChannel(StorableTaggedFile file)
        {
            var fileName = file.Filename;
            var sound    = CreateSoundFromFile(fileName);

            return(new FMODTrack(sound, fmodSystem, fileName));
        }
Example #5
0
 /// <summary>
 /// Stores the specified value.
 /// </summary>
 /// <param name="value">The value.</param>
 public void Store(StorableTaggedFile value)
 {
     //StorableTaggedFile file;
     //if ((file = value) == null)
     //    file = StorableTaggedFile.Copy(value);
     fileStorer.Save(value);
 }
Example #6
0
        /// <summary>
        /// Creates the channel.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns></returns>
        public ITrack CreateChannel(StorableTaggedFile file)
        {
            var fileName = file.Filename;
            var stream   = CreateInput(fileName);

            return(new NAudioTrack(this, mixerStream, stream, fileName));
        }
Example #7
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="TrackContainer" /> class.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="file">The file.</param>
        public TrackContainer(IAudioPlayer player, StorableTaggedFile file)
        {
            player.Guard("player");
            file.Guard("file");

            this.player = player;
            File        = file;
        }
Example #8
0
 private void OnFileDoubleClicked(StorableTaggedFile obj)
 {
     if (null == obj)
     {
         return;
     }
     publicTransport.CommandBus.Publish(new AddFilesCommand(new[] { obj }));
     publicTransport.CommandBus.Publish(new PlayFileCommand(obj));
 }
        public void WhenFileExistsItIsUpdated()
        {
            // Arrange
            IDataAdapter <Album>  albumAdapterMock;
            IDataAdapter <Genre>  genreAdapterMock;
            IDataAdapter <Artist> artistAdapterMock;
            IDataAdapter <Title>  titleAdapterMock;
            IDataAdapter <Year>   yearAdapterMock;
            var adaptersMock = TestHelper.CreateReferenceAdaptersMock(
                out albumAdapterMock,
                out artistAdapterMock,
                out titleAdapterMock,
                out genreAdapterMock,
                out yearAdapterMock);
            var          fileAdapterMock = Mock.Create <IDataAdapter <StorableTaggedFile> >();
            const string fileName        = "Filename";
            var          existingId      = StorableTaggedFile.GenerateLowerCaseId(fileName, StorableTaggedFile.FilenameNamespace);
            var          existingFile    = new StorableTaggedFile {
                Filename = fileName
            };

            Mock.Arrange(() => fileAdapterMock.GetFirstById(existingId)).Returns(existingFile);
            var file = new StorableTaggedFile
            {
                Album = new Album {
                    Name = "Album"
                },
                Artist = new Artist {
                    Name = "Artist"
                },
                Comment  = "Blah",
                Filename = fileName,
                Genre    = new Genre {
                    Name = "Genre"
                },
                Title = new Title {
                    Name = "Title"
                },
                TrackNo = 50000,
                Year    = new Year {
                    Name = "Year"
                },
                Id = existingId,
            };
            var target = new Builder <TaggedFilePersister>().With(adaptersMock).With(fileAdapterMock).Build();

            target.Save(file);

            Assert.AreEqual(file.AlbumId, existingFile.AlbumId);
            Assert.AreEqual(file.ArtistId, existingFile.ArtistId);
            Assert.AreEqual(file.Comment, existingFile.Comment);
            Assert.AreEqual(file.Filename, existingFile.Filename);
            Assert.AreEqual(file.GenreId, existingFile.GenreId);
            Assert.AreEqual(file.TitleId, existingFile.TitleId);
            Assert.AreEqual(file.TrackNo, existingFile.TrackNo);
            Assert.AreEqual(file.YearId, existingFile.YearId);
        }
Example #10
0
        public void WhenLazyLoadReferencesLazyFileReturned()
        {
            // Arrange
            var adaptersMock = Mock.Create <IReferenceAdapters>();
            var target       = new StorableTaggedFile();

            // Act
            var result = target.LazyLoadReferences(adaptersMock);

            // Assert
            Assert.IsInstanceOf <LazyLoadedTaggedFile>(result);
        }
Example #11
0
        public void WhenArtistTitleNullLoadMeReturned()
        {
            // Arrange
            var          target   = new StorableTaggedFile();
            const string expected = "LOADME!";

            // Act
            var result = target.ToString();

            // Assert
            Assert.AreEqual(expected, result);
        }
Example #12
0
 public ITrack CreateChannel(StorableTaggedFile file)
 {
     try
     {
         var player = GetPlayer(file.StorageType);
         return(player.CreateChannel(file));
     }
     catch (KeyNotFoundException e)
     {
         throw new FormatException(
                   string.Format("Could not find player for the file type {0}", file.StorageType), e);
     }
 }
        public void WhenStorePersisterUsed()
        {
            // Arrange
            var persister = Mock.Create <IDataPersister <StorableTaggedFile> >();
            var target    = new Builder <LibraryManagerService>().With(persister).Build();
            var expected  = new StorableTaggedFile();

            // Act
            target.Store(expected);

            // Assert
            Mock.Assert(() => persister.Save(expected));
        }
Example #14
0
        protected virtual void SetActive(StorableTaggedFile file, double offset)
        {
            var container = GetContainer(file);

            if (null == container)
            {
                return;
            }
            CurrentTrack = container;
            container.Seek(offset);
            NotifyNewTrack(container);
            SendProgress();
        }
Example #15
0
 private void SetPlayingFile(StorableTaggedFile file)
 {
     if (null != playingFile)
     {
         playingFile.IsPlaying = false;
     }
     SelectedFile = Files.Find(x => x.File == file);
     playingFile  = SelectedFile;
     if (null == playingFile)
     {
         return;
     }
     playingFile.IsPlaying = true;
 }
Example #16
0
 /// <summary>
 /// Sets the index of the playlist.
 /// </summary>
 /// <param name="from">From.</param>
 public void SetPlaylistIndex(StorableTaggedFile from)
 {
     lock (files)
     {
         if (null == from)
         {
             currentIndex = -1;
         }
         else
         {
             currentIndex = files.IndexOf(from) + 1;
         }
     }
 }
Example #17
0
        private TrackContainer GetContainer(StorableTaggedFile file)
        {
            var channel = new TrackContainer(player, file);

            try
            {
                channel.Preload();
            }
            catch
            {
                return(null);
            }
            return(channel);
        }
Example #18
0
        public void WhenSaveReferencesSaved()
        {
            // Arrange
            IDataAdapter <Album>  albumAdapterMock;
            IDataAdapter <Genre>  genreAdapterMock;
            IDataAdapter <Artist> artistAdapterMock;
            IDataAdapter <Title>  titleAdapterMock;
            IDataAdapter <Year>   yearAdapterMock;
            var adaptersMock = TestHelper.CreateReferenceAdaptersMock(
                out albumAdapterMock,
                out artistAdapterMock,
                out titleAdapterMock,
                out genreAdapterMock,
                out yearAdapterMock);
            var fileAdapterMock = Mock.Create <IDataAdapter <StorableTaggedFile> >();
            var file            = new StorableTaggedFile
            {
                Album    = new Album(),
                Artist   = new Artist(),
                Comment  = "Blah",
                Filename = "Blah2",
                Genre    = new Genre(),
                Title    = new Title(),
                TrackNo  = 50000,
                Year     = new Year(),
            };

            var target = new Builder <TaggedFilePersister>().With(adaptersMock).With(fileAdapterMock).Build();

            // Act
            target.Save(file);

            // Assert
            // ReSharper disable ImplicitlyCapturedClosure
            Mock.Assert(() => albumAdapterMock.Save(file.Album));
            Mock.Assert(() => genreAdapterMock.Save(file.Genre));
            Mock.Assert(() => artistAdapterMock.Save(file.Artist));
            Mock.Assert(() => titleAdapterMock.Save(file.Title));
            Mock.Assert(() => yearAdapterMock.Save(file.Year));
            Mock.Assert(() => fileAdapterMock.Save(file));
            // ReSharper restore ImplicitlyCapturedClosure
        }
        public void WhenInitializedIdsCopied()
        {
            var original = new StorableTaggedFile
            {
                AlbumId  = Guid.NewGuid(),
                GenreId  = Guid.NewGuid(),
                ArtistId = Guid.NewGuid(),
                TitleId  = Guid.NewGuid(),
                YearId   = Guid.NewGuid(),
                Id       = Guid.NewGuid(),
            };
            var target = new Builder <LazyLoadedTaggedFile>().With(original).Build();

            Assert.AreEqual(original.AlbumId, target.AlbumId);
            Assert.AreEqual(original.GenreId, target.GenreId);
            Assert.AreEqual(original.ArtistId, target.ArtistId);
            Assert.AreEqual(original.TitleId, target.TitleId);
            Assert.AreEqual(original.YearId, target.YearId);
            Assert.AreEqual(original.Id, target.Id);
        }
Example #20
0
        /// <summary>
        /// Creates the channel.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns></returns>
        public ITrack CreateChannel(StorableTaggedFile file)
        {
            var fileName      = file.Filename;
            var channelHandle = Bassh.BASS_StreamCreateFile(fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE);

            Bassh.BASS_ChannelUpdate(channelHandle, 0);
            Bassh.BASS_ChannelSetAttribute(channelHandle, BASSAttribute.BASS_ATTRIB_SRC, 2);
            Debug.WriteLine(Bassh.BASS_ChannelGetInfo(channelHandle));
            if (0 == channelHandle)
            {
                throw new InvalidOperationException("Unable to create stream");
            }
            if (BassMix.BASS_Mixer_StreamAddChannel(mixerHandle, channelHandle,
                                                    BASSFlag.BASS_MIXER_PAUSE | BASSFlag.BASS_MIXER_BUFFER | BASSFlag.BASS_MIXER_NORAMPIN))
            {
                return(new BassTrack(channelHandle, mixerHandle, fileName));
            }
            Trace.WriteLine(Bassh.BASS_ErrorGetCode());
            throw new InvalidOperationException("Unable to add channel to mixer.");
        }
        public void WhenOtherFieldsRequestedReferenceAdaptersUsed()
        {
            IDataAdapter <Album>  albumAdapterMock;
            IDataAdapter <Genre>  genreAdapterMock;
            IDataAdapter <Artist> artistAdapterMock;
            IDataAdapter <Title>  titleAdapterMock;
            IDataAdapter <Year>   yearAdapterMock;
            var adaptersMock = TestHelper.CreateReferenceAdaptersMock(
                out albumAdapterMock,
                out artistAdapterMock,
                out titleAdapterMock,
                out genreAdapterMock,
                out yearAdapterMock);
            var original = new StorableTaggedFile
            {
                AlbumId  = Guid.NewGuid(),
                GenreId  = Guid.NewGuid(),
                ArtistId = Guid.NewGuid(),
                TitleId  = Guid.NewGuid(),
                YearId   = Guid.NewGuid(),
                Id       = Guid.NewGuid(),
            };
            var target = new Builder <LazyLoadedTaggedFile>().With(original).With(adaptersMock).Build();

#pragma warning disable 219
            // ReSharper disable RedundantAssignment
            // ReSharper disable ImplicitlyCapturedClosure
            object stuff = target.Album;
            Mock.Assert(() => albumAdapterMock.GetFirstById(original.AlbumId));
            stuff = target.Genre;
            Mock.Assert(() => genreAdapterMock.GetFirstById(original.GenreId));
            stuff = target.Artist;
            Mock.Assert(() => artistAdapterMock.GetFirstById(original.ArtistId));
            stuff = target.Title;
            Mock.Assert(() => titleAdapterMock.GetFirstById(original.TitleId));
            stuff = target.Year;
            Mock.Assert(() => yearAdapterMock.GetFirstById(original.YearId));
            // ReSharper restore ImplicitlyCapturedClosure
            // ReSharper restore RedundantAssignment
#pragma warning restore 219
        }
Example #22
0
        public void ToStringReturnsArtistTitle()
        {
            // Arrange
            const string expectedArtist = "Artist";
            const string expectedTitle  = "Title";
            const string expectedString = expectedArtist + " - " + expectedTitle;
            var          target         = new StorableTaggedFile
            {
                Artist = new Artist {
                    Name = expectedArtist
                },
                Title = new Title {
                    Name = expectedTitle
                }
            };

            // Act
            var result = target.ToString();

            // Assert
            Assert.AreEqual(expectedString, result);
        }
Example #23
0
 /// <summary>
 /// Searches the view on play file.
 /// </summary>
 /// <param name="storableTaggedFile">The storable tagged file.</param>
 private void SearchViewOnPlayFile(StorableTaggedFile storableTaggedFile)
 {
     publicTransport.CommandBus.Publish(new PlayFileCommand(storableTaggedFile));
 }
Example #24
0
 /// <summary>
 /// Searches the view on play file.
 /// </summary>
 /// <param name="storableTaggedFile">The storable tagged file.</param>
 private void SearchViewOnPlayFile(StorableTaggedFile storableTaggedFile)
 {
     playerService.Play(storableTaggedFile);
 }
Example #25
0
 /// <summary>
 /// Removes the file.
 /// </summary>
 /// <param name="file">The file.</param>
 public void RemoveFile(StorableTaggedFile file)
 {
     lock (files)
         files.Remove(file);
     publicTransport.ApplicationEventBus.Publish(new PlaylistUpdatedEvent());
 }
Example #26
0
 public FileItem(StorableTaggedFile file)
 {
     this.file = file;
 }
Example #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TrackChangedEvent" /> class.
 /// </summary>
 /// <param name="file">The file.</param>
 /// <param name="songLength">Length of the song.</param>
 public TrackChangedEvent(StorableTaggedFile file, TimeSpan songLength)
 {
     File       = file;
     SongLength = songLength;
 }
Example #28
0
        public void WhenSaveReferencesQueried()
        {
            // Arrange
            IDataAdapter <Album>  albumAdapterMock;
            IDataAdapter <Genre>  genreAdapterMock;
            IDataAdapter <Artist> artistAdapterMock;
            IDataAdapter <Title>  titleAdapterMock;
            IDataAdapter <Year>   yearAdapterMock;
            var adaptersMock = TestHelper.CreateReferenceAdaptersMock(
                out albumAdapterMock,
                out artistAdapterMock,
                out titleAdapterMock,
                out genreAdapterMock,
                out yearAdapterMock);
            var fileAdapterMock   = Mock.Create <IDataAdapter <StorableTaggedFile> >();
            var configManagerMock = Mock.Create <IConfigurationManager>();

            Mock.Arrange(() => configManagerMock.GetValue(Arg.IsAny <string>(), Arg.IsAny <int>(), Arg.IsAny <string>()))
            .Returns(Mock.Create <IConfigurableValue <int> >());
            var file = new StorableTaggedFile
            {
                Album = new Album {
                    Name = "Album"
                },
                Artist = new Artist {
                    Name = "Artist"
                },
                Comment  = "Blah",
                Filename = "Blah2",
                Genre    = new Genre {
                    Name = "Genre"
                },
                Title = new Title {
                    Name = "Title"
                },
                TrackNo = 50000,
                Year    = new Year {
                    Name = "Year"
                },
            };
            var target = new Builder <TaggedFilePersister>().With(adaptersMock).With(fileAdapterMock).With(configManagerMock).Build();

            // Act
            target.Save(file);

            // Assert
            // ReSharper disable ImplicitlyCapturedClosure
            Mock.Assert(
                () =>
                albumAdapterMock.GetFirstById(StorableTaggedFile.GenerateLowerCaseId(file.Album.Name, StorableTaggedFile.AlbumNamespace)));
            Mock.Assert(
                () =>
                genreAdapterMock.GetFirstById(StorableTaggedFile.GenerateLowerCaseId(file.Genre.Name, StorableTaggedFile.GenreNamespace)));
            Mock.Assert(
                () =>
                artistAdapterMock.GetFirstById(StorableTaggedFile.GenerateLowerCaseId(file.Artist.Name, StorableTaggedFile.ArtistNamespace)));
            Mock.Assert(
                () =>
                titleAdapterMock.GetFirstById(StorableTaggedFile.GenerateLowerCaseId(file.Title.Name, StorableTaggedFile.TitleNamespace)));
            Mock.Assert(
                () =>
                yearAdapterMock.GetFirstById(StorableTaggedFile.GenerateLowerCaseId(file.Year.Name, StorableTaggedFile.YearNamespace)));
            // ReSharper restore ImplicitlyCapturedClosure
        }
Example #29
0
 public ITrack CreateChannel(StorableTaggedFile file)
 {
     return(null);
 }
Example #30
0
 private void ChangeTrack(StorableTaggedFile newTrack)
 {
     NowPlaying = newTrack;
 }