// ---- Player Event Handlers ----

        private void OnPlayerEngineStateChanged(object o, Banshee.MediaEngine.PlayerEngineStateArgs args)
        {
            switch (args.State)
            {
            case PlayerEngineState.Loaded:
                seek_slider.Duration = PlayerEngineCore.CurrentTrack.Duration.TotalSeconds;
                UpdateMetaDisplay();
                break;

            case PlayerEngineState.Idle:
                seek_slider.SetIdle();
                InfoBox.Visible = false;
                UpdateMetaDisplay();
                break;
            }
        }
Beispiel #2
0
        private void OnPlayerEvent(PlayerEventArgs args)
        {
            switch (args.Event)
            {
            case PlayerEvent.Iterate:
                OnPlayerEngineTick();
                break;

            case PlayerEvent.StartOfStream:
                stream_position_label.StreamState = StreamLabelState.Playing;
                seek_slider.CanSeek = ServiceManager.PlayerEngine.CanSeek;
                break;

            case PlayerEvent.Buffering:
                PlayerEventBufferingArgs buffering = (PlayerEventBufferingArgs)args;
                if (buffering.Progress >= 1.0)
                {
                    stream_position_label.StreamState = StreamLabelState.Playing;
                    break;
                }

                stream_position_label.StreamState       = StreamLabelState.Buffering;
                stream_position_label.BufferingProgress = buffering.Progress;
                seek_slider.Sensitive = false;
                break;

            case PlayerEvent.StateChange:
                switch (((PlayerEventStateChangeArgs)args).Current)
                {
                case PlayerState.Contacting:
                    transitioning = false;
                    stream_position_label.StreamState = StreamLabelState.Contacting;
                    seek_slider.SetIdle();
                    break;

                case PlayerState.Loading:
                    transitioning = false;
                    if (((PlayerEventStateChangeArgs)args).Previous == PlayerState.Contacting)
                    {
                        stream_position_label.StreamState = StreamLabelState.Loading;
                        seek_slider.SetIdle();
                    }
                    break;

                case PlayerState.Idle:
                    seek_slider.CanSeek = false;
                    if (!transitioning)
                    {
                        stream_position_label.StreamState = StreamLabelState.Idle;
                        seek_slider.Duration  = 0;
                        seek_slider.SeekValue = 0;
                        seek_slider.SetIdle();
                    }
                    break;

                default:
                    transitioning = false;
                    break;
                }
                break;
            }
        }