/// <summary> /// Called when a play list operation is requested. /// </summary> /// <param name="e">The e.</param> private void OnPlayListOperation(PlayListOperationAggregatedEvent e) { TrackViewModel trackToPlay; switch (e.Operation) { case PlayListOperation.ClearAndPlay: ClearItems(); // test lines below before uncommenting //_playbackService.ClearPlayQueue(); //_playbackService.InsertTracksToQueue(e.Items.Select(o => o.TrackInfo), 0); if (e.Items.Count() > 0) { _logService.Trace(string.Format("PlayQueueViewModel.OnPlayListOperation : Appending {0} tracks", e.Items.Count())); AppendItems(e.Items, matchingGeneratedGuids => { trackToPlay = e.Items.First(); _logService.Trace(string.Format("Play queue cleared : Starting playback of track {0}", trackToPlay.TrackInfo.Title)); OnPlay(matchingGeneratedGuids[trackToPlay.TrackInfo]); }); } break; case PlayListOperation.InsertAfterCurrent: break; case PlayListOperation.Append: _logService.Trace(string.Format("PlayQueueViewModel.OnPlayListOperation : Appending {0} tracks", e.Items.Count())); if (e.Items.Count() > 0) { AppendItems(e.Items, matchingGeneratedGuids => { _logService.Trace(string.Format("Items appended : Current playback service status : {0}", _playbackService.Status)); if (_playbackService.Status != PlayState.Playing) { trackToPlay = e.Items.First(); _logService.Trace(string.Format("PlaybackStatus stopped - Starting playback of track {0}", trackToPlay.TrackInfo.Title)); OnPlay(matchingGeneratedGuids[trackToPlay.TrackInfo]); } }); } break; default: throw new ArgumentOutOfRangeException(); } }