From 1dbb80ec283557b8877ad03444e3d11df11557d8 Mon Sep 17 00:00:00 2001 From: Kilian von Pflugk Date: Sat, 18 May 2024 20:21:39 +0200 Subject: [PATCH] allow the intro skip button to be confirmed with the Enter key (#170) --- .../Configuration/inject.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ConfusedPolarBear.Plugin.IntroSkipper/Configuration/inject.js b/ConfusedPolarBear.Plugin.IntroSkipper/Configuration/inject.js index 8269578..50e5544 100644 --- a/ConfusedPolarBear.Plugin.IntroSkipper/Configuration/inject.js +++ b/ConfusedPolarBear.Plugin.IntroSkipper/Configuration/inject.js @@ -1,4 +1,5 @@ let introSkipper = { + allowEnter: true, skipSegments: {}, videoPlayer: {}, // .bind() is used here to prevent illegal invocation errors @@ -56,6 +57,7 @@ introSkipper.d = function (msg) { } introSkipper.injectCss(); introSkipper.injectButton(); + document.body.addEventListener('keydown', introSkipper.eventHandler, true); introSkipper.videoPlayer = document.querySelector("video"); if (introSkipper.videoPlayer != null) { introSkipper.d("Hooking video timeupdate"); @@ -222,4 +224,28 @@ introSkipper.secureFetch = async function (url) { if (res.status !== 200) { throw new Error(`Expected status 200 from ${url}, but got ${res.status}`); } return await res.json(); } +/** Handle keydown events. */ +introSkipper.eventHandler = function (e) { + const skipButton = document.querySelector("#skipIntro"); + if (!skipButton) { + return; + } + const embyButton = skipButton.querySelector(".emby-button"); + // Ignore all keydown events + if (!introSkipper.allowEnter) { + e.preventDefault(); + } + // The Enter key has been pressed and the Intro Skip button is visible + else if (e.key === "Enter" && embyButton.style.opacity !== '0') { + e.preventDefault(); + e.stopPropagation(); + introSkipper.doSkip(); + // Do not allow any keydown events + introSkipper.allowEnter = false + // Wait 5 seconds to allow keydown events again + setTimeout(() => { + introSkipper.allowEnter = true; + }, 5000); + } +} introSkipper.setup();