diff --git a/extension/background.js b/extension/background.js index 2ce8651..238a3cc 100644 --- a/extension/background.js +++ b/extension/background.js @@ -36,7 +36,7 @@ function ensureState() { if (data.currentTabTitle !== undefined) currentTabTitle = data.currentTabTitle; // Merge data from storage with any early-arriving state // New entries (added during boot) must stay at the top (index 0) - if (data.logs) logs = [...logs, ...data.logs].slice(0, 50); + if (data.logs) logs = [...logs, ...data.logs].slice(0, 200); if (data.history) history = [...history, ...data.history].slice(0, 20); if (data.currentRoom) currentRoom = data.currentRoom; if (data.lastActionState) lastActionState = data.lastActionState; @@ -82,7 +82,7 @@ function ensureState() { // Process any early logs/history that weren't captured in the spread if (pendingLogs.length > 0) { - logs = [...pendingLogs, ...logs].slice(0, 50); + logs = [...pendingLogs, ...logs].slice(0, 200); chrome.storage.session.set({ logs }); pendingLogs = []; } @@ -169,7 +169,7 @@ function addLog(message, type = 'info') { pendingLogs.unshift(log); } else { logs.unshift(log); - if (logs.length > 50) logs.pop(); + if (logs.length > 200) logs.pop(); chrome.storage.session.set({ logs }); } chrome.runtime.sendMessage({ type: 'LOG_UPDATE', log }).catch(() => {}); diff --git a/extension/content.js b/extension/content.js index 743ffb4..031880c 100644 --- a/extension/content.js +++ b/extension/content.js @@ -414,12 +414,17 @@ if (expectedEvents.has('seek')) { expectedEvents.delete('seek'); lastReportedSeekTime = current; // Update baseline so next user seek is relative to here + // No log — this is routine programmatic behavior (Force Sync, lobby, peer command) return; } + const delta = lastReportedSeekTime !== null ? Math.abs(current - lastReportedSeekTime) : null; + const deltaStr = delta !== null ? `Δ${delta.toFixed(2)}s` : 'Δ?'; + // Step 2: Delta check — skip micro-seeks (buffering, chapter markers, etc.) - if (lastReportedSeekTime !== null && Math.abs(current - lastReportedSeekTime) < MIN_SEEK_DELTA) { - return; // Too small — likely an internal player seek, not user-initiated + if (lastReportedSeekTime !== null && delta < MIN_SEEK_DELTA) { + reportLog(`[Seek] Filtered (${deltaStr} < ${MIN_SEEK_DELTA}s threshold) @ ${current.toFixed(2)}s — not relayed`, 'warn'); + return; } // Step 3: Debounce rapid consecutive seeks (e.g. scrubbing) @@ -430,11 +435,15 @@ const v = findVideo(); if (!v) return; const settled = v.currentTime; + const finalDelta = lastReportedSeekTime !== null ? Math.abs(settled - lastReportedSeekTime) : null; + const finalDeltaStr = finalDelta !== null ? `Δ${finalDelta.toFixed(2)}s` : 'Δ?'; lastReportedSeekTime = settled; + reportLog(`[Seek] Relayed @ ${settled.toFixed(2)}s (${finalDeltaStr})`, 'info'); reportEvent(EVENTS.SEEK); }, 800); }; + let lastVideoSrc = null; // Episode detection handler for loadeddata event