protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
        {
            switch (action)
            {
                case UserAction.Play:
                    if (PlayState.Playing != player.PlayerState)
                    {
                        player.Play();
                    }
                    break;

                case UserAction.Stop:
                    player.Stop();
                    break;

                case UserAction.Pause:
                    if (PlayState.Playing == player.PlayerState)
                    {
                        player.Pause();
                    }
                    break;
                case UserAction.Rewind:
                  player.Position = player.Position.Subtract(new TimeSpan(0,0,10));
                    break;

                case UserAction.FastForward:
                  player.Position = player.Position.Add(new TimeSpan(0,0,10));
                    break;
            }

            NotifyComplete();
        }
Beispiel #2
0
        /// <summary>
        /// Called when the playstate changes, except for the Error state (see OnError)
        /// </summary>
        /// <param name="player">The BackgroundAudioPlayer</param>
        /// <param name="track">The track playing at the time the playstate changed</param>
        /// <param name="playState">The new playstate of the player</param>
        /// <remarks>
        /// Play State changes cannot be cancelled. They are raised even if the application
        /// caused the state change itself, assuming the application has opted-in to the callback
        /// </remarks>
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            switch (playState)
            {
                case PlayState.TrackReady:
                    // The track to play is set in the PlayTrack method.
                    player.Volume = 1;
                    player.Play();
                    break;

                case PlayState.TrackEnded:
                    try
                    {
                        player.Stop();
                    }
                    catch (Exception e)
                    {
                        //Console.WriteLine(e);
                    }
                    break;
            }
            NotifyComplete();
        }
Beispiel #3
0
        /// <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();
        }
        /// <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:
                    loadfile();
                    PlayTrack(player);
                    break;

                case UserAction.Pause:
                    player.Pause();
                    break;
                case UserAction.Stop:
                    player.Stop();
                    break;
                case UserAction.SkipPrevious:
                    PlayPreviousTrack(player);
                    break;

                case UserAction.SkipNext:
                    PlayNextTrack(player);
                    break;
                case UserAction.Seek:
                    
                    player.Position = (TimeSpan)param;
                    break;
            }

            NotifyComplete();
        }
Beispiel #6
0
        /// <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:
                    try
                    {
                        if (player.PlayerState != PlayState.Playing)
                        {
                            Debug.WriteLine("User.Action: Play");
                            player.Play();
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        Debug.WriteLine("Exception: " + e.Message);
                    }
                    catch (SystemException syse)
                    {
                        Debug.WriteLine("Exception: " + syse.Message);
                    }
                    break;
                case UserAction.Stop:
                    try
                    {
                        if (player.PlayerState != PlayState.Stopped) {
                            updatePlayposForCurrentEpisode(player);
                            player.Stop();
                            Debug.WriteLine("User.Action: Stop");
                        }
                    }
                    catch (Exception e)
                    {
                       Debug.WriteLine("Exception: " + e.Message);
                    }
                    break;

                case UserAction.Pause:
                    Debug.WriteLine("User.Action: Pause");
                    try
                    {
                        if (player.PlayerState == PlayState.Playing)
                        {
                            updatePlayposForCurrentEpisode(player);
                            player.Pause();
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        Debug.WriteLine("Exception: " + e.Message);
                    }
                    break;

                case UserAction.Seek:
                    try
                    {
                        if (player.PlayerState == PlayState.Playing)
                        {
                            player.Position = (TimeSpan)param;
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        Debug.WriteLine("Exception: " + e.Message);
                    }
                    break;

                case UserAction.SkipNext:
                    Debug.WriteLine("Skip next.");
                    updatePlayposForCurrentEpisode(player);
                    AudioTrack nextTrack = getNextPlaylistTrack();

                    if (nextTrack == null)
                    {
                        player.Position = (player.Position.TotalSeconds + 30 < player.Track.Duration.TotalSeconds) ? TimeSpan.FromSeconds(player.Position.TotalSeconds + 30) :
                                                                                                                     TimeSpan.FromSeconds(player.Track.Duration.TotalSeconds);
                    }
                    else
                    {
                        player.Track = nextTrack;
                        player.Play();
                    }
                    break;

                case UserAction.FastForward:
                    try
                    {
                        Debug.WriteLine("Player fast forward. New position: " + player.Position);
                        player.Position = (player.Position.TotalSeconds + 30 < player.Track.Duration.TotalSeconds) ? TimeSpan.FromSeconds(player.Position.TotalSeconds + 30) :
                                                                                                                     TimeSpan.FromSeconds(player.Track.Duration.TotalSeconds);

                    }
                    catch (Exception)
                    {
                        Debug.WriteLine("Error seeking. Probably seeked passed the end.");
                    }
                    break;

                case UserAction.SkipPrevious:
                case UserAction.Rewind:
                    try
                    {
                        player.Position = (player.Position.TotalSeconds - 30 >= 0) ? TimeSpan.FromSeconds(player.Position.TotalSeconds - 30) :
                                                                                     TimeSpan.FromSeconds(0);
                        Debug.WriteLine("Player fast forward. New position: " + player.Position);
                    } catch(Exception) {
                        Debug.WriteLine("Error seeking. Probably seeked passed the start.");
                    }
                    break;
            }

            NotifyComplete();
        }
Beispiel #7
0
        /// <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:
                try
                {
                    if (player.PlayerState != PlayState.Playing)
                    {
                        Debug.WriteLine("User.Action: Play");
                        player.Play();
                    }
                }
                catch (InvalidOperationException e)
                {
                    Debug.WriteLine("Exception: " + e.Message);
                }
                catch (SystemException syse)
                {
                    Debug.WriteLine("Exception: " + syse.Message);
                }
                break;

            case UserAction.Stop:
                try
                {
                    if (player.PlayerState != PlayState.Stopped)
                    {
                        updatePlayposForCurrentEpisode(player);
                        player.Stop();
                        Debug.WriteLine("User.Action: Stop");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine("Exception: " + e.Message);
                }
                break;

            case UserAction.Pause:
                Debug.WriteLine("User.Action: Pause");
                try
                {
                    if (player.PlayerState == PlayState.Playing)
                    {
                        updatePlayposForCurrentEpisode(player);
                        player.Pause();
                    }
                }
                catch (InvalidOperationException e)
                {
                    Debug.WriteLine("Exception: " + e.Message);
                }
                break;

            case UserAction.Seek:
                try
                {
                    if (player.PlayerState == PlayState.Playing)
                    {
                        player.Position = (TimeSpan)param;
                    }
                }
                catch (InvalidOperationException e)
                {
                    Debug.WriteLine("Exception: " + e.Message);
                }
                break;

            case UserAction.SkipNext:
                Debug.WriteLine("Skip next.");
                updatePlayposForCurrentEpisode(player);
                AudioTrack nextTrack = getNextPlaylistTrack();

                if (nextTrack == null)
                {
                    player.Position = (player.Position.TotalSeconds + 30 < player.Track.Duration.TotalSeconds) ? TimeSpan.FromSeconds(player.Position.TotalSeconds + 30) :
                                      TimeSpan.FromSeconds(player.Track.Duration.TotalSeconds);
                }
                else
                {
                    player.Track = nextTrack;
                    player.Play();
                }
                break;

            case UserAction.FastForward:
                try
                {
                    Debug.WriteLine("Player fast forward. New position: " + player.Position);
                    player.Position = (player.Position.TotalSeconds + 30 < player.Track.Duration.TotalSeconds) ? TimeSpan.FromSeconds(player.Position.TotalSeconds + 30) :
                                      TimeSpan.FromSeconds(player.Track.Duration.TotalSeconds);
                }
                catch (Exception)
                {
                    Debug.WriteLine("Error seeking. Probably seeked passed the end.");
                }
                break;

            case UserAction.SkipPrevious:
            case UserAction.Rewind:
                try
                {
                    player.Position = (player.Position.TotalSeconds - 30 >= 0) ? TimeSpan.FromSeconds(player.Position.TotalSeconds - 30) :
                                      TimeSpan.FromSeconds(0);
                    Debug.WriteLine("Player fast forward. New position: " + player.Position);
                } catch (Exception) {
                    Debug.WriteLine("Error seeking. Probably seeked passed the start.");
                }
                break;
            }

            NotifyComplete();
        }
Beispiel #8
0
        /// <summary>
        /// Called when the playstate changes, except for the Error state (see OnError)
        /// </summary>
        /// <param name="player">The BackgroundAudioPlayer</param>
        /// <param name="track">The track playing at the time the playstate changed</param>
        /// <param name="playState">The new playstate of the player</param>
        /// <remarks>
        /// Play State changes cannot be cancelled. They are raised even if the application
        /// caused the state change itself, assuming the application has opted-in to the callback.
        /// 
        /// Notable playstate events: 
        /// (a) TrackEnded: invoked when the player has no current track. The agent can set the next track.
        /// (b) TrackReady: an audio track has been set and it is now ready for playack.
        /// 
        /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks.
        /// </remarks>
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            switch (playState)
            {
                case PlayState.TrackEnded:
                    player.Stop();
                    break;
                case PlayState.TrackReady:
                    player.Play();
                    break;
                case PlayState.Shutdown:
                    // TODO: Handle the shutdown state here (e.g. save state)
                    break;
                case PlayState.Unknown:
                    break;
                case PlayState.Stopped:
                    break;
                case PlayState.Paused:
                    player.Pause();
                    break;
                case PlayState.Playing:
                    break;
                case PlayState.BufferingStarted:
                    break;
                case PlayState.BufferingStopped:
                    break;
                case PlayState.Rewinding:
                    break;
                case PlayState.FastForwarding:
                    break;
            }

            NotifyComplete();
        }
Beispiel #9
0
        /// <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;
                default:
                    break;
            }

            NotifyComplete();
        }
Beispiel #10
0
        /// <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 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();
        }
Beispiel #12
0
        /// <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();
        }
Beispiel #13
0
        /// <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.Play:
                    playTrack(player);
                    break;

                case UserAction.Stop:
                    player.Stop();
                    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();
        }
Beispiel #15
0
        /// <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("UserAction player state: "+player.PlayerState);
            switch (action)
            {
                case UserAction.Play:

                    PlayTrack(player);
                    break;

                case UserAction.Stop:
                    player.Stop();
                    break;

            }
            System.Diagnostics.Debug.WriteLine("Before NOtify. ");
            NotifyComplete();
        }
Beispiel #16
0
        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();
        }
Beispiel #17
0
        /// <summary>
        /// Called when the playstate changes, except for the Error state (see OnError)
        /// </summary>
        /// <param name="player">The BackgroundAudioPlayer</param>
        /// <param name="track">The track playing at the time the playstate changed</param>
        /// <param name="playState">The new playstate of the player</param>
        /// <remarks>
        /// Play State changes cannot be cancelled. They are raised even if the application
        /// caused the state change itself, assuming the application has opted-in to the callback.
        ///
        /// Notable playstate events:
        /// (a) TrackEnded: invoked when the player has no current track. The agent can set the next track.
        /// (b) TrackReady: an audio track has been set and it is now ready for playack.
        ///
        /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks.
        /// </remarks>
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            switch (playState)
            {
            case PlayState.TrackEnded:
                PlaylistItem currentPlaylistItem = getCurrentlyPlayingTrack();
                if (currentPlaylistItem != null)
                {
                    currentPlaylistItem.SavedPlayPosTick = currentPlaylistItem.TotalPlayTicks;     // We hit TrackEnded event so we can save the playpos to the end.
                    // But really, this is a bug in WP8 since the player doesn't know the playpos at this point anymore.
                    updateToDBPlaylistItem(currentPlaylistItem);
                }

                // Start playing next track if we have one.
                AudioTrack nextTrack = getNextPlaylistTrack();
                if (nextTrack != null)
                {
                    player.Track = nextTrack;
                    player.Play();
                }
                else
                {
                    player.Stop();
                }
                break;

            case PlayState.TrackReady:
                break;

            case PlayState.Shutdown:
                updatePlayposForCurrentEpisode(player);
                break;

            case PlayState.Unknown:
                updatePlayposForCurrentEpisode(player);
                Debug.WriteLine("Play state: Unkown");
                break;

            case PlayState.Stopped:
                updatePlayposForCurrentEpisode(player);
                clearPrimaryTile();
                Debug.WriteLine("Play state: Stopped");
                break;

            case PlayState.Paused:
                updatePlayposForCurrentEpisode(player);
                Debug.WriteLine("Play state: Paused");
                break;

            case PlayState.Playing:
                PlaylistItem plItem = getCurrentlyPlayingTrack();
                if (plItem != null)
                {
                    plItem.TotalPlayTicks = player.Track.Duration.Ticks;
                    updateToDBPlaylistItem(plItem);

                    Debug.WriteLine("Play state: Playing");
                }
                else
                {
                    Debug.WriteLine("Playlist item NULL!");
                }

                updatePlayposForCurrentEpisode(player);
                setCurrentlyPlayingTrack(player.Track.Title);
                break;

            case PlayState.BufferingStarted:
                break;

            case PlayState.BufferingStopped:
                break;

            case PlayState.Rewinding:
                break;

            case PlayState.FastForwarding:
                break;
            }

            NotifyComplete();
        }
Beispiel #18
0
        /// <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(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + ":  OnUserAction() - {0}", action);
            switch (action)
            {
                case UserAction.Play:
                    // Since we are just restarting the same stream, this should be fine.
                    if (player.PlayerState!=PlayState.Playing)
                    {
                    player.Track = track;
                       // player.Track = fPlayList[gCurrentTrack];
                        player.Play();
                    }
                    break;
                case UserAction.Stop:
                    player.Stop();
                    break;
                case UserAction.Pause:
                    player.Stop();

                    // Stop the background streaming agent.
                    AudioTrackStreamer.ShutdownMediaStreamSource();//关闭
                    //Shoutcast.Sample.Phone.Background.Playback.AudioTrackStreamer.ShutdownMediaStreamSource();
                    break;
                case UserAction.FastForward:
                    break;
                case UserAction.Rewind:
                    break;
                case UserAction.Seek:
                    break;
                case UserAction.SkipNext:
                    break;
                case UserAction.SkipPrevious:
                    break;
            }

            NotifyComplete();
        }
Beispiel #19
0
        /// <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();
        }
Beispiel #20
0
        /// <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();
            }
        }
Beispiel #21
0
        /// <summary>
        /// Called when the playstate changes, except for the Error state (see OnError)
        /// </summary>
        /// <param name="player">The BackgroundAudioPlayer</param>
        /// <param name="track">The track playing at the time the playstate changed</param>
        /// <param name="playState">The new playstate of the player</param>
        /// <remarks>
        /// Play State changes cannot be cancelled. They are raised even if the application
        /// caused the state change itself, assuming the application has opted-in to the callback.
        /// 
        /// Notable playstate events: 
        /// (a) TrackEnded: invoked when the player has no current track. The agent can set the next track.
        /// (b) TrackReady: an audio track has been set and it is now ready for playack.
        /// 
        /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks.
        /// </remarks>
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            switch (playState)
            {
                case PlayState.TrackEnded:
                    PlaylistItem currentPlaylistItem = getCurrentlyPlayingTrack();
                    if (currentPlaylistItem != null)
                    {
                        currentPlaylistItem.SavedPlayPosTick = currentPlaylistItem.TotalPlayTicks; // We hit TrackEnded event so we can save the playpos to the end.
                        // But really, this is a bug in WP8 since the player doesn't know the playpos at this point anymore.
                        updateToDBPlaylistItem(currentPlaylistItem);
                    }

                    // Start playing next track if we have one.
                    AudioTrack nextTrack = getNextPlaylistTrack();
                    if (nextTrack != null)
                    {
                        player.Track = nextTrack;
                        player.Play();
                    }
                    else
                    {
                        player.Stop();
                    }
                    break;
                case PlayState.TrackReady:
                    break;
                case PlayState.Shutdown:
                    updatePlayposForCurrentEpisode(player);
                    break;
                case PlayState.Unknown:
                    updatePlayposForCurrentEpisode(player);
                    Debug.WriteLine("Play state: Unkown");
                    break;
                case PlayState.Stopped:
                    updatePlayposForCurrentEpisode(player);
                    clearPrimaryTile();
                    Debug.WriteLine("Play state: Stopped");
                    break;
                case PlayState.Paused:
                    updatePlayposForCurrentEpisode(player);
                    Debug.WriteLine("Play state: Paused");
                    break;
                case PlayState.Playing:
                    PlaylistItem plItem = getCurrentlyPlayingTrack();
                    if (plItem != null)
                    {
                        plItem.TotalPlayTicks = player.Track.Duration.Ticks;
                        updateToDBPlaylistItem(plItem);

                        Debug.WriteLine("Play state: Playing");
                    }
                    else
                    {
                        Debug.WriteLine("Playlist item NULL!");
                    }

                    updatePlayposForCurrentEpisode(player);
                    setCurrentlyPlayingTrack(player.Track.Title);
                    break;
                case PlayState.BufferingStarted:
                    break;
                case PlayState.BufferingStopped:
                    break;
                case PlayState.Rewinding:
                    break;
                case PlayState.FastForwarding:
                    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();
        }
Beispiel #23
0
 /// <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 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();
        }
Beispiel #25
0
        /// <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:
                ////    player.Track = GetNextTrack();
                //    break;
                //case UserAction.SkipPrevious:
                //    AudioTrack previousTrack = GetPreviousTrack();
                //    if (previousTrack != null)
                //    {
                //        player.Track = previousTrack;
                //    }
                //    break;
            }

            NotifyComplete();
        }
Beispiel #26
0
        /// <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();
        }
Beispiel #27
0
 /// <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();
 }
Beispiel #28
0
        /// <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();
        }
Beispiel #29
0
        /// <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 (track != null && track.Tag != null)
                    {
                        var data = track.Tag.ToString().Split('$');
                        var url = data[data.Length - 1];

                        var type = data[2];

                        if (type.ToLower() != "shoutcast")
                        {
                            track.Source = new Uri(url);
                        }
                    }

                    //player.Track = new AudioTrack(null, "", "", "", null, track.Tag, EnabledPlayerControls.Pause);
                    if (player.SafeGetPlayerState() != PlayState.Playing)
                    {
                        player.Play();
                    }
                    break;
                case UserAction.Stop:
                    if (player.SafeGetPlayerState() == PlayState.Playing)
                        player.Stop();
                    break;
                case UserAction.Pause:
                    if (player.SafeGetPlayerState() == PlayState.Playing)
                        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();
        }
Beispiel #30
0
        /// <summary>
        /// Called when the playstate changes, except for the Error state (see OnError)
        /// </summary>
        /// <param name="player">The BackgroundAudioPlayer</param>
        /// <param name="track">The track playing at the time the playstate changed</param>
        /// <param name="playState">The new playstate of the player</param>
        /// <remarks>
        /// Play State changes cannot be cancelled. They are raised even if the application
        /// caused the state change itself, assuming the application has opted-in to the callback.
        /// 
        /// Notable playstate events: 
        /// (a) TrackEnded: invoked when the player has no current track. The agent can set the next track.
        /// (b) TrackReady: an audio track has been set and it is now ready for playack.
        /// 
        /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks.
        /// </remarks>
        protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        {
            player.Volume = 1;
            switch (playState) {
                case PlayState.TrackEnded:
                    try {
                        player.Track = GetNextTrack();
                    } catch (LastTrackException ex) {
                        player.Track = ex.Track;
                        player.Stop();
                    }
                    break;
                case PlayState.TrackReady:
                    LoadPlaylist();
                    player.Play();
                    break;
                case PlayState.Shutdown:
                    break;
                case PlayState.Unknown:
                    break;
                case PlayState.Stopped:
                    break;
                case PlayState.Paused:
                    break;
                case PlayState.Playing:
                    break;
                case PlayState.BufferingStarted:
                    break;
                case PlayState.BufferingStopped:
                    break;
                case PlayState.Rewinding:
                    break;
                case PlayState.FastForwarding:
                    break;
            }

            NotifyComplete();
        }