public void LoadPlaylistFromList() { A.CallTo(() => _mediaPlayer.Finished).Returns(true); var count = _audioPlaylist.LoadPlaylistFromList(new List <ITrack> { _track }); _audioPlaylist.WaitForPlaybackToFinish(); var countCorrect = count == 1; Assert.True(countCorrect, "Audio playlist returned incorrect count after loading from track list"); A.CallTo(() => _mediaPlayer.LoadFile(A <string> .Ignored, A <MediaPlayerMetadata> .Ignored)).MustHaveHappened(); }
public AudioPlaylistTests() { _musicLibrary = A.Fake <IMusicLibrary>(); _mediaPlayer = A.Fake <IMediaPlayer>(); A.CallTo(() => _mediaPlayer.LoadFile(A <string> .Ignored, A <MediaPlayerMetadata> .Ignored)).Invokes((o) => _mediaPlayer.Playing = true); _audioPlaylist = new AudioPlaylist(_musicLibrary, _mediaPlayer); _track = A.Fake <ITrack>(); A.CallTo(() => _track.Song).Returns(new Song { FileName = TrackFileName }); _audioPlaylist.Tracks.Add(_track); }
/// <summary> /// Preform an iteration of the play all tracks loop. /// </summary> /// <param name="random">Random number generator to be used if shuffle is on.</param> private void PlayAllTracksIteration(Random random) { if (!_forward && !_back) { // Load current track into media player. var currentTrack = Tracks[GetCurrentTrackIndex()]; var mediaPlayMetadata = new MediaPlayerMetadata { AlbumName = currentTrack.Album?.Name, ArtistName = currentTrack.Artist?.Name, TrackName = currentTrack.Song.Title }; _mediaPlayer.LoadFile(currentTrack.Song.FileName, mediaPlayMetadata); // Wait until media player thread has started playback. while (!_mediaPlayer.Playing) { Thread.Sleep(10); } if (GetCurrentTrackIndex() != _lastTrack) { _previousTracks.Push(GetCurrentTrackIndex()); } _lastTrack = GetCurrentTrackIndex(); } // While next and back are not pressed and the user is not finished with the song. while (!_forward && !_back && !_mediaPlayer.Finished) { Thread.Sleep(10); } // Move forward if forward motion has been indicated and shuffle is off. if (_forward && !Shuffle) { SetCurrentTrackIndex(GetCurrentTrackIndex() + 1); _forward = false; } else if (_back && !Shuffle) // Move back one song if indicated and shuffle is off. { SetCurrentTrackIndex(GetCurrentTrackIndex() - 1); _back = false; } else if (Shuffle && (!_back || _previousTracks.Count < 2)) // Pick random track for playback. { int nextTrack = random.Next(Tracks.Count); while (nextTrack == GetCurrentTrackIndex()) { nextTrack = random.Next(Tracks.Count); } SetCurrentTrackIndex(nextTrack); _forward = false; _back = false; } else if (Shuffle && _back) // Play last played track. { int nextTrack = _previousTracks.Pop(); nextTrack = _previousTracks.Pop(); SetCurrentTrackIndex(nextTrack); _back = false; } else if (!Repeat) // Go forward if no actions have been indicated and repeat is off. { SetCurrentTrackIndex(GetCurrentTrackIndex() + 1); } // Keep rolling over to start of playlist if repeat all is on. if (RepeatAll) { if (GetCurrentTrackIndex() >= Tracks.Count) { // Roll on to start of playlist. SetCurrentTrackIndex(0); } else if (GetCurrentTrackIndex() < 0) // Roll off to end of playlist. { SetCurrentTrackIndex(Tracks.Count - 1); } } }