/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (PlayState.Playing != player.PlayerState) { player.Track = _playList[currentTrackNumber]; } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: if (PlayState.Playing == player.PlayerState) { player.Pause(); } break; case UserAction.FastForward: // Fast Forward only works with non-MSS clients. // If the Source is null, we are streaming an MSS. if (track.Source != null) { player.FastForward(); } break; case UserAction.Rewind: // Rewind only works with non-MSS clients. // If the Source is null, we are streaming an MSS. if (track.Source != null) { player.Rewind(); } break; case UserAction.Seek: // Seek only works with non-MSS clients. // If the Source is null, we are streaming an MSS. if (track.Source != null) { player.Position = (TimeSpan)param; } break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: player.Track = GetPreviousTrack(); break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { try { switch (action) { case UserAction.Play: player.Play(); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: try { player.Position = (TimeSpan)param; } catch (InvalidOperationException) { // thrown occasionally. what to do? } break; case UserAction.SkipNext: var maybeNext = GetNextTrack(); if (maybeNext != null) { player.Track = maybeNext; // no need to play as playback is started when the track is "ready" //player.Play(); } break; case UserAction.SkipPrevious: var maybePrevious = GetPreviousTrack(); if (maybePrevious != null) { player.Track = maybePrevious; //player.Play(); } break; } } catch (Exception) { // Might throw SystemException on some rare occasions? // TODO: reproduce, handle exception var tmp = 0; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState == PlayState.Paused) { PopulatePlaylist(false); } else { PopulatePlaylist(true); } if (currentPlaylist != null && currentPlaylist.Count > 0) { player.Track = currentPlaylist[currentTrackNumber]; } break; case UserAction.Stop: currentPlaylist = null; currentTrackNumber = 0; player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: if (currentPlaylist != null && currentPlaylist.Count > 0) { player.Track = GetNextTrack(); } break; case UserAction.SkipPrevious: if (currentPlaylist != null && currentPlaylist.Count > 0) { player.Track = GetPreviousTrack(); } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected async override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: { AudioTrack newTrack = await GetNextStation(player.Track.Artist); if (track != null) { player.Track = newTrack; } break; } case UserAction.SkipPrevious: { AudioTrack newTrack = await GetPreviousStation(player.Track.Artist); if (track != null) { player.Track = newTrack; } break; } } NotifyComplete(); }
/// <summary> /// 在用户使用应用程序/系统提供的用户界面请求操作时调用 /// </summary> /// <param name="player">BackgroundAudioPlayer</param> /// <param name="track">用户操作期间播放的曲目</param> /// <param name="action">用户请求的操作</param> /// <param name="param">与请求的操作相关联的数据。 /// 在当前版本中,此参数仅适合与 Seek 操作一起使用, /// 以指明请求的乐曲的位置</param> /// <remarks> /// 用户操作不自动对系统状态进行任何更改;如果用户操作受支持, /// 以便执行用户操作(如果这些操作受支持)。 /// /// 只在代理请求完成之后调用 NotifyComplete() 一次,包括异步回调。 /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { if (player.PlayerState != PlayState.Paused) { player.Track = track; } else { player.Play(); } // player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.FastForward: player.FastForward(); break; case UserAction.Pause: player.Pause(); break; case UserAction.Play: if (player.PlayerState == PlayState.Paused) { player.Play(); } else { Play(player); } break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: PlayNext(player); break; case UserAction.SkipPrevious: PlayPrev(player); break; case UserAction.Stop: player.Stop(); break; default: break; } NotifyComplete(); }
/// <summary> /// 在用户使用应用程序/系统提供的用户界面请求操作时调用 /// </summary> /// <param name="player">BackgroundAudioPlayer</param> /// <param name="track">用户操作期间播放的曲目</param> /// <param name="action">用户请求的操作</param> /// <param name="param">与请求的操作相关联的数据。 /// 在当前版本中,此参数仅适合与 Seek 操作一起使用, /// 以指明请求的乐曲的位置</param> /// <remarks> /// 用户操作不自动对系统状态进行任何更改;如果用户操作受支持, /// 以便执行用户操作(如果这些操作受支持)。 /// /// 只在代理请求完成之后调用 NotifyComplete() 一次,包括异步回调。 /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } NotifyComplete(); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: GetNextAudioTrack getnextaudiotrack = new NetGetNextAudioTrack(null); getnextaudiotrack.HaveNextTrack += (s, e) => { BackgroundAudioPlayer.Instance.Track = e.Track; //应该不用加Play() NotifyComplete(); }; getnextaudiotrack.ChangeNextTrack(); break; case UserAction.SkipPrevious: break; } }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { System.Diagnostics.Debug.WriteLine("AGENT RECEIVED USER ACTION: " + action.ToString()); switch (action) { case UserAction.Play: PlayTrack(player); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: Play(player); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: try { player.Position = (TimeSpan)param; } catch (InvalidOperationException) { // thrown occasionally. what to do? player.Position = TimeSpan.FromSeconds(0); } break; case UserAction.SkipNext: PlayNext(player); break; case UserAction.SkipPrevious: PlayPrevious(player); break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: PlayTrack(player); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; // case UserAction.SkipNext: // PlayNextTrack(player); // break; //case UserAction.SkipPrevious: // PlayPreviousTrack(player); //break; } NotifyComplete(); }
/// <summary> /// Вызывается при запросе пользователем действия с помощью пользовательского интерфейса приложения или системы /// </summary> /// <param name="player">BackgroundAudioPlayer</param> /// <param name="track">Дорожка, воспроизводимая во время действия пользователя</param> /// <param name="action">Действие, запрошенное пользователем</param> /// <param name="param">Данные, связанные с запрошенным действием. /// В текущей версии этот параметр используется только с действием поиска /// для обозначения запрошенного положения в звуковой дорожке</param> /// <remarks> /// Действия пользователя не изменяют автоматически состояние системы; за выполнение действий /// пользователя, если они поддерживаются, отвечает агент. /// /// Вызовите NotifyComplete() только один раз после завершения запроса агента, включая асинхронные обратные вызовы. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { List <string> atrack = DeserializeFromIsolatedStorage <List <string> >("podcast.link"); //AudioTrack pcast = new Uri track_url = new Uri(atrack[0], UriKind.Absolute); if (player.Track == null) { AudioTrack podcast = new AudioTrack(track_url, atrack[1], atrack[2], atrack[3], null); player.Track = podcast; } else if (player.Track.Source != track_url) { AudioTrack podcast = new AudioTrack(track_url, atrack[1], atrack[2], atrack[3], null); player.Track = podcast; } player.Play(); break; } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: PlayTrack(player); break; case UserAction.Stop: PlayTrack(player); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: if (player.CanPause) { player.Pause(); } break; case UserAction.FastForward: if (player.CanSeek) { player.FastForward(); } break; case UserAction.Rewind: if (player.CanSeek) { player.Rewind(); } break; case UserAction.Seek: if (player.CanSeek) { player.Position = (TimeSpan)param; } break; case UserAction.SkipNext: Func <List <GuidToTrackMapping>, AudioTrack, GuidToTrackMapping> defineNextTrackPredicate = (mappings, currentTrack) => { var index = mappings.IndexOf(mappings.Single(o => o.Guid == new Guid(currentTrack.Tag))); index++; if (index >= mappings.Count) { // no random, no repeat ! return(null); } return(new GuidToTrackMapping { Guid = mappings[index].Guid, Track = mappings[index].Track }); }; player.Track = GetNextTrack(track, defineNextTrackPredicate); break; case UserAction.SkipPrevious: Func <List <GuidToTrackMapping>, AudioTrack, GuidToTrackMapping> definePreviousTrackPredicate = (mappings, currentTrack) => { var index = mappings.IndexOf(mappings.Single(o => o.Guid == new Guid(currentTrack.Tag))); index--; if (index < 0) { // no random, no repeat ! return(null); } return(new GuidToTrackMapping { Guid = mappings[index].Guid, Track = mappings[index].Track }); }; AudioTrack previousTrack = GetPreviousTrack(track, definePreviousTrackPredicate); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player != null && player.PlayerState != PlayState.Playing) { player.Volume = 1; player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: SetNextTrack(player); break; case UserAction.SkipPrevious: SetPreviousTrack(player); break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override async void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { await ConfigureThePlayer(); switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { _logger.Info("OnUserAction.Play"); player.Play(); } break; case UserAction.Stop: _logger.Info("OnUserAction.Stop"); player.Stop(); break; case UserAction.Pause: _logger.Info("OnUserAction.Pause"); player.Pause(); break; case UserAction.FastForward: _logger.Info("OnUserAction.FastForward"); player.FastForward(); break; case UserAction.Rewind: _logger.Info("OnUserAction.Rewind"); player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: _logger.Info("OnUserAction.SkipNext"); var nextTrack = await GetNextTrack(); if (nextTrack != null) { player.Track = nextTrack; } await InformOfPlayingTrack(); break; case UserAction.SkipPrevious: _logger.Info("OnUserAction.SkipPrevious"); var previousTrack = await GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } await InformOfPlayingTrack(); break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { this.Log("OnUserAction called, action: " + action); switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param"> /// The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track /// </param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { Debug.WriteLine("AudioPlayer.OnUserAction() track.Source {0} track.Tag {1} action {2}", null == track ? "<no track>" : null == track.Source ? "<none>" : track.Source.ToString(), null == track ? "<no track>" : track.Tag ?? "<none>", action); try { switch (action) { case UserAction.Play: UpdateTrack(player); if (PlayState.Playing != player.PlayerState && null != player.Track) player.Play(); break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: if (PlayState.Playing == player.PlayerState) player.Pause(); break; case UserAction.FastForward: if (null != track && null != track.Source) player.FastForward(); break; case UserAction.Rewind: if (null != track && null != track.Source) player.Rewind(); break; case UserAction.Seek: if (null != track) player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); if (PlayState.Playing != player.PlayerState && null != player.Track) player.Play(); break; case UserAction.SkipPrevious: var previousTrack = GetPreviousTrack(); if (previousTrack != null) player.Track = previousTrack; if (PlayState.Playing != player.PlayerState && null != player.Track) player.Play(); break; } } catch (Exception ex) { Debug.WriteLine("AudioPlayer.OnUserAction() failed: " + ex.ExtendedMessage()); // Is there anything we can do about this? try { player.Close(); } catch (Exception ex2) { Debug.WriteLine("AudioPlayer.OnUserAction() close failed: " + ex2.ExtendedMessage()); } } finally { NotifyComplete(); } }
protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: PlayTrack(player); break; case UserAction.Pause: try { if (player.CanPause) { player.Pause(); } } catch (UnauthorizedAccessException ex) { // what the f**k?? } break; case UserAction.SkipPrevious: PlayPreviousTrack(player); break; case UserAction.SkipNext: PlayNextTrack(player); break; case UserAction.Stop: player.Stop(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using system-provided UI and the application has requesed /// notifications of the action /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.FastForward: player.FastForward(); break; case UserAction.Pause: player.Pause(); break; case UserAction.Play: if (player.PlayerState == PlayState.Paused) { player.Play(); } else { Play(player); } break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: PlayNext(player); break; case UserAction.SkipPrevious: PlayPrev(player); break; case UserAction.Stop: player.Stop(); break; default: break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: //if (player.PlayerState != PlayState.Playing) //{ // to get audio track //player.Track = this.audioTrack; //player.Play(); //} if (player.Track == null) { currentTrack = 0; player.Track = playlist[currentTrack]; } else { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: //player.Track = GetNextTrack(); if (currentTrack < playlist.Count - 1) { currentTrack += 1; player.Track = playlist[currentTrack]; } else { player.Track = null; } break; case UserAction.SkipPrevious: //AudioTrack previousTrack = GetPreviousTrack(); //if (previousTrack != null) //{ //player.Track = previousTrack; //} break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState == PlayState.Paused) PopulatePlaylist(false); else PopulatePlaylist(true); if (currentPlaylist != null && currentPlaylist.Count > 0) { player.Track = currentPlaylist[currentTrackNumber]; } break; case UserAction.Stop: currentPlaylist = null; currentTrackNumber = 0; player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: if (currentPlaylist != null && currentPlaylist.Count > 0) player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: if (currentPlaylist != null && currentPlaylist.Count > 0) player.Track = GetPreviousTrack(); break; } NotifyComplete(); }
protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { bool flag = true; try { string str1 = "AudioPlaybackAgent.OnUserAction " + action + " track name=" + track.Title ?? ""; string str2 = !(track.Source != null) ? str1 + ", Source=null" : str1 + ", Source=" + track.Source.ToString(); bool startedNewCycle; switch (action) { case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.Play: if (player.PlayerState != PlayState.Playing) { flag = false; AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false); break; } break; case UserAction.SkipNext: AudioTrack nextTrack = this.GetNextTrack(player, out startedNewCycle, null); player.Track = nextTrack; flag = false; AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false); break; case UserAction.SkipPrevious: AudioTrack previousTrack = this.GetPreviousTrack(player, out startedNewCycle, null); player.Track = previousTrack; flag = false; AudioTrackHelper.PlayCurrentTrack(player, (Action <bool>)(res => this.NotifyComplete()), false); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; } if (!flag) { return; } this.NotifyComplete(); } catch { if (!flag) { return; } this.NotifyComplete(); } }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: var audioInfo = (from audio in db.AudioPlaylist select audio).FirstOrDefault(); string audioUrl = audioInfo.AudioUrl; string audioTitle = audioInfo.AudioTitle; string audioArtist = audioInfo.AudioArtist; string audioId = audioInfo.Aid; player.Track = new AudioTrack(new Uri(audioUrl), audioTitle, audioArtist, null, null, audioId, EnabledPlayerControls.All); if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected async override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: { AudioTrack newTrack = await GetNextStation(player.Track.Artist); if (track != null) player.Track = newTrack; break; } case UserAction.SkipPrevious: { AudioTrack newTrack = await GetPreviousStation(player.Track.Artist); if (track != null) player.Track = newTrack; break; } } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param"> /// The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track /// </param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { Debug.WriteLine("OnUserAction() action " + action); switch (action) { case UserAction.Play: var task = Task.Run((Func<Task>)RunDownload); if (player.PlayerState != PlayState.Playing) player.Play(); task.ContinueWith(t => NotifyComplete()); return; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: var previousTrack = GetPreviousTrack(); if (previousTrack != null) player.Track = previousTrack; break; } NotifyComplete(); }
/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (player.PlayerState != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: player.Stop(); break; case UserAction.Pause: player.Pause(); break; case UserAction.FastForward: player.FastForward(); break; case UserAction.Rewind: player.Rewind(); break; case UserAction.Seek: player.Position = (TimeSpan)param; break; case UserAction.SkipNext: try { player.Track = GetNextTrack(); } catch (LastTrackException ex) { player.Track = ex.Track; player.Stop(); } break; case UserAction.SkipPrevious: if (player.Position > TimeSpan.FromSeconds(7)) { player.Position = new TimeSpan(0); } else { AudioTrack previousTrack = GetPreviousTrack(); if (previousTrack != null) { player.Track = previousTrack; } } break; } NotifyComplete(); }