1 Commits

Author SHA1 Message Date
Josh Patra
3dfee251ec fix pause reset 2025-07-03 14:42:25 -04:00
2 changed files with 17 additions and 17 deletions

View File

@@ -174,40 +174,43 @@ function defineVideoController() {
target.playbackRate = storedSpeed; target.playbackRate = storedSpeed;
this.div = this.initializeControls(); this.div = this.initializeControls();
// FIXED: Make the controller visible for 5 seconds on startup // Make the controller visible for 5 seconds on startup
runAction("blink", 5000, null, this.video); runAction("blink", 5000, null, this.video);
// FIXED: Rewritten mediaEventAction to prevent speed reset on pause. // Rewritten mediaEventAction to prevent speed reset on pause.
var mediaEventAction = function (event) { var mediaEventAction = function (event) {
// Subtitle Nudge logic is based on play/pause state. // Handle subtitle nudging based on the event type first.
if (event.type === "play") { if (event.type === "play") {
this.startSubtitleNudge(); this.startSubtitleNudge();
} else if (event.type === "pause" || event.type === "ended") { } else if (event.type === "pause" || event.type === "ended") {
this.stopSubtitleNudge(); this.stopSubtitleNudge();
// On pause or end, DO NOT proceed to change speed. // *** THE KEY FIX ***
// This is the key fix for the pause-resets-speed bug. // On pause or end, we do NOT want to change the speed.
// We only stop the nudger and exit the function immediately.
return; return;
} }
// Speed restoration logic (for "play" and non-user "seeked" events) // The rest of this logic will now ONLY run for "play" and "seeked" events.
// If it's a seek initiated by our rewind/advance keys, do nothing.
if (event.type === "seeked" && isUserSeek) { if (event.type === "seeked" && isUserSeek) {
isUserSeek = false; // Reset flag isUserSeek = false; // Reset the flag for the next seek.
return; // Don't change speed on user-initiated seeks. return;
} }
// Determine the speed that *should* be set, in case the site changed it. // Determine the speed that *should* be applied, in case the site changed it.
let targetSpeed; let targetSpeed;
if (tc.settings.forceLastSavedSpeed) { if (tc.settings.forceLastSavedSpeed) {
targetSpeed = tc.settings.lastSpeed; targetSpeed = tc.settings.lastSpeed;
} else if (tc.settings.rememberSpeed) { } else if (tc.settings.rememberSpeed) {
targetSpeed = tc.settings.lastSpeed; targetSpeed = tc.settings.lastSpeed;
} else { } else {
// Fallback to per-video speed or 1.0 // Fallback to the speed saved for this specific video, or 1.0
targetSpeed = tc.settings.speeds[event.target.currentSrc] || 1.0; targetSpeed = tc.settings.speeds[event.target.currentSrc] || 1.0;
} }
// Only set the speed if the site has actually changed it. // Only re-apply the speed if the website has actually changed it.
// This avoids unnecessary "ratechange" events. // This prevents redundant "ratechange" events.
if (Math.abs(event.target.playbackRate - targetSpeed) > 0.01) { if (Math.abs(event.target.playbackRate - targetSpeed) > 0.01) {
setSpeed(event.target, targetSpeed); setSpeed(event.target, targetSpeed);
} }
@@ -390,7 +393,7 @@ function defineVideoController() {
const r = parentEl.getRootNode(); const r = parentEl.getRootNode();
const s = r && r.querySelector ? r.querySelector(".scrim") : null; const s = r && r.querySelector ? r.querySelector(".scrim") : null;
if (s) s.prepend(fragment); if (s) s.prepend(fragment);
else parentEl.insertBefore(fragment, pEl.firstChild); else parentEl.insertBefore(fragment, parentEl.firstChild);
break; break;
default: default:
parentEl.insertBefore(fragment, parentEl.firstChild); parentEl.insertBefore(fragment, parentEl.firstChild);
@@ -831,7 +834,6 @@ function pause(v) {
else v.pause(); else v.pause();
} }
// FIXED: Using the improved resetSpeed function for toggling
function resetSpeed(v, target, isFastKey = false) { function resetSpeed(v, target, isFastKey = false) {
const videoId = v.currentSrc || v.src || "default"; const videoId = v.currentSrc || v.src || "default";
const currentSpeed = v.playbackRate; const currentSpeed = v.playbackRate;
@@ -879,7 +881,6 @@ function jumpToMark(v) {
if (v.vsc && typeof v.vsc.mark === "number") v.currentTime = v.vsc.mark; if (v.vsc && typeof v.vsc.mark === "number") v.currentTime = v.vsc.mark;
} }
function handleDrag(video, e) { function handleDrag(video, e) {
/* ... Same original logic ... */
const c = video.vsc.div; const c = video.vsc.div;
const sC = c.shadowRoot.querySelector("#controller"); const sC = c.shadowRoot.querySelector("#controller");
var pE = c.parentElement; var pE = c.parentElement;
@@ -911,7 +912,6 @@ function handleDrag(video, e) {
} }
var timer = null; var timer = null;
function showController(controller) { function showController(controller) {
/* ... Same original logic ... */
if (!controller || typeof controller.classList === "undefined") return; if (!controller || typeof controller.classList === "undefined") return;
controller.classList.add("vsc-show"); controller.classList.add("vsc-show");
if (timer) clearTimeout(timer); if (timer) clearTimeout(timer);

View File

@@ -1,7 +1,7 @@
{ {
"name": "Video Speed Controller", "name": "Video Speed Controller",
"short_name": "videospeed", "short_name": "videospeed",
"version": "1.2.1", "version": "1.2.1.0",
"manifest_version": 2, "manifest_version": 2,
"description": "Speed up, slow down, advance and rewind HTML5 audio/video with shortcuts", "description": "Speed up, slow down, advance and rewind HTML5 audio/video with shortcuts",
"homepage_url": "https://github.com/SoPat712/videospeed", "homepage_url": "https://github.com/SoPat712/videospeed",