public static async Task <bool> NextTrack()
        {
            // Progress bar on CompactOverlay should jump *immediately* to 0,
            // so the user get the feeling that their command was received.
            PlayStatusTracker.LastPlayStatus.ProgressedMilliseconds = 0;

            if (await _controller.NextTrack())
            {
                await Task.Delay(100);

                return(true);
            }

            return(await(new Player()).NextTrack());
        }
        public static async Task <KeyDownProcessResult> KeyDown(VirtualKey key, bool shiftPressed, bool ctrlPressed, bool altPressed, WebViewController controller, Controls.NowPlayingView nowPlaying)
        {
            if (key == VirtualKey.Space)
            {
                // Play/Pause
                await controller.PlayPause();
            }
            else if (key == VirtualKey.Right && ctrlPressed)
            {
                // Next Track
                await controller.NextTrack();

                if (nowPlaying.IsOpen)
                {
                    nowPlaying.PlayChangeTrackAnimation(reverse: false);
                }
            }
            else if (key == VirtualKey.Left && ctrlPressed)
            {
                // Prev Track
                await controller.PreviousTrack();

                if (nowPlaying.IsOpen)
                {
                    nowPlaying.PlayChangeTrackAnimation(reverse: true);
                }
            }
            else if (key == VirtualKey.Up && ctrlPressed & shiftPressed)
            {
                // Max volume
                await controller.SeekVolume(1.0);
            }
            else if (key == VirtualKey.Down && ctrlPressed && shiftPressed)
            {
                // Mute
                await controller.SeekVolume(0.0);
            }
            else if (key == VirtualKey.Up && ctrlPressed)
            {
                // Volume up
                var newVolume = Math.Min(PlayStatusTracker.LastPlayStatus.Volume + 0.1, 1.0);
                await controller.SeekVolume(newVolume);

                PlayStatusTracker.LastPlayStatus.Volume = newVolume;
            }
            else if (key == VirtualKey.Down && ctrlPressed)
            {
                // Volume down
                var newVolume = Math.Max(PlayStatusTracker.LastPlayStatus.Volume - 0.1, 0.0);
                await controller.SeekVolume(newVolume);

                PlayStatusTracker.LastPlayStatus.Volume = newVolume;
            }
            else if (key == VirtualKey.Left && altPressed)
            {
                // Back
                return(KeyDownProcessResult.GoBack);
            }
            else if (key == VirtualKey.Escape)
            {
                // Back
                return(KeyDownProcessResult.GoBack);
            }
            else if (key == VirtualKey.M && ctrlPressed && nowPlaying.IsOpen && nowPlaying.ViewMode == Controls.NowPlayingView.NowPlayingViewMode.Normal)
            {
                await nowPlaying.SwitchToMiniView();
            }
            else if (key == VirtualKey.Left || key == VirtualKey.Right || key == VirtualKey.Up || key == VirtualKey.Down)
            {
                // Do nothing, but don't switch out of now playing either.
            }
            else
            {
                return(KeyDownProcessResult.AskJs);
            }
            return(KeyDownProcessResult.Handled);
        }