diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 8e43667e44..78cff40472 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -1214,6 +1214,10 @@ export default function (view) { } } + let spaceKeyTimeout; + let isSpaceKeyDown = false; + let isSpaceKeyHeld = false; + function onKeyDown(e) { clickedElement = e.target; @@ -1228,8 +1232,16 @@ export default function (view) { if (e.keyCode === 32) { if (e.target.tagName !== 'BUTTON' || !layoutManager.tv) { - playbackManager.playPause(currentPlayer); - showOsd(btnPlayPause); + if (!isSpaceKeyDown) { + isSpaceKeyDown = true; + isSpaceKeyHeld = false; + + spaceKeyTimeout = setTimeout(() => { + isSpaceKeyHeld = true; + playbackManager.setPlaybackRate(2, currentPlayer); + }, 500); + } + e.preventDefault(); e.stopPropagation(); // Trick Firefox with a null element to skip next click @@ -1430,6 +1442,27 @@ export default function (view) { } } + function onKeyUp(e) { + if (e.keyCode === 32) { + if (isSpaceKeyDown) { + if (isSpaceKeyHeld) { + playbackManager.setPlaybackRate(1, currentPlayer); + } else { + playbackManager.playPause(currentPlayer); + showOsd(osdBottomElement.querySelector('.btnPause')); + } + + if (spaceKeyTimeout) { + clearTimeout(spaceKeyTimeout); + spaceKeyTimeout = null; + } + + isSpaceKeyDown = false; + isSpaceKeyHeld = false; + } + } + } + function onKeyDownCapture() { resetIdle(); } @@ -1680,6 +1713,7 @@ export default function (view) { showOsd(); inputManager.on(window, onInputCommand); document.addEventListener('keydown', onKeyDown); + document.addEventListener('keyup', onKeyUp); dom.addEventListener(document, 'keydown', onKeyDownCapture, { capture: true, passive: true @@ -1723,6 +1757,7 @@ export default function (view) { } document.removeEventListener('keydown', onKeyDown); + document.removeEventListener('keyup', onKeyUp); dom.removeEventListener(document, 'keydown', onKeyDownCapture, { capture: true, passive: true