Commit Graph

27 Commits

Author SHA1 Message Date
MacBook c9ec6ce3e0 docs: final polish and refined protocol automation 2026-05-04 04:45:02 +02:00
MacBook 652f1cef4f refactor: automate protocol sync and reorganize repo for store readiness 2026-05-04 04:43:30 +02:00
Timo c2857dbdda feat: Improve seek logging and increase log buffer to 200 entries
- Log [Seek] Filtered when delta < 3s threshold (warn level) showing exact delta
- Log [Seek] Relayed when a seek passes all filters (info level) showing target time + delta
- Programmatic seeks (force sync, peer commands) remain silent in logs
- Increase log ring buffer from 50 -> 200 entries in all three enforcement points
2026-04-25 17:45:06 +02:00
Timo d07bf745a3 fix: Add seek delta threshold and debounce to prevent HLS/DASH buffering micro-seeks from being relayed as user seeks
Streaming players (Emby, Jellyfin, etc.) perform frequent internal seeks
for buffering that are < 1s in magnitude. These were being relayed to
peers, causing brief video freezes every few minutes.

Fix:
- MIN_SEEK_DELTA = 3.0s: ignore seeks smaller than 3 seconds
- 800ms debounce: settle rapid-fire seeks (e.g. scrubbing) before relaying
- Programmatic seek suppression still takes priority via expectedEvents
- lastReportedSeekTime baseline updated on programmatic seeks too
2026-04-25 17:42:55 +02:00
Timo 55c2d4ed0d feat: Auto-Sync Next Episode v1.2.0
Adds a new toggleable feature that detects episode transitions via
mediaTitle mutation (loadeddata/MutationObserver), pauses the video,
and waits for all room peers to load the same episode before
executing a coordinated Force Sync play at 0:00.

Protocol:
- Add EPISODE_LOBBY and EPISODE_READY events to shared/constants.js
- Add EPISODE_LOBBY_TIMEOUT (60s) constant
- Relay both new events in server/index.js

Content Script (content.js):
- Layered detection: loadeddata + MutationObserver src-change + heartbeat
- Debounced onEpisodeTransition() sends signal ONLY; no eager pause
- PAUSE_FOR_LOBBY handler pauses only after background confirms feature enabled
- startLobbyPoll() polls title match without premature pause for non-initiators
- checkAndReportLobbyReady() pauses and sends EPISODE_READY_LOCAL on match
- CONTENT_BOOT recovery for re-injection after hard navigation

Background (background.js):
- Episode lobby state persisted in chrome.storage.session with recovery
- EPISODE_CHANGED: checks setting, creates lobby, sends PAUSE_FOR_LOBBY to tab
- EPISODE_LOBBY/READY server event handlers with dedup logic
- 60s timeout cancels lobby (Option B) with Chrome failure notification
- Peer departure handled: removes from readyPeers, re-checks completion
- executeEpisodeLobby() reuses existing Force Sync pipeline at targetTime 0.0
- Lobby cleared on LEAVE_ROOM; status exposed in GET_STATUS

Popup:
- Auto-Sync Next Episode toggle in Settings tab (default: off, opt-in)
- Episode Lobby status card in Sync tab with peer readiness display
- LOBBY_UPDATE message handler for real-time UI updates

Bumps APP_VERSION and manifest to 1.2.0
2026-04-25 16:43:10 +02:00
Timo 7417c21217 feat: enhance peer list with volume icons, play/pause status, and time interpolation (v1.1.3) 2026-04-25 03:47:57 +02:00
Timo 4785c9625c chore(extension): bump version, fix targeted injection and race conditions 2026-04-23 21:58:19 +02:00
MacBook 67f872ffd2 feat(sync): implement end-to-end media title synchronization 2026-04-22 18:29:53 +02:00
MacBook e40e2e5101 feat(dev): implement extended video metadata and data-attribute inspector 2026-04-22 18:22:59 +02:00
MacBook 6065e0a278 fix(extension): guard currentTime against non-finite values and fix seek payload mismatch 2026-04-22 18:05:33 +02:00
Timo 2aef9a1ffc fix: v1.0.5 stability hotfixes (ACK security and event jitter) 2026-04-22 13:55:57 +02:00
Timo bcb3acb78e fix: resolve critical sync feedback loop and notification argument order 2026-04-22 13:41:05 +02:00
Timo 622db23f38 style: restore classic remote control UI and sync architectural fixes 2026-04-22 13:32:10 +02:00
Timo 901b97dcaf fix: implement timestamp correlation for visual ACKs 2026-04-22 12:23:17 +02:00
Timo 221961820a feat: implement visual confirmation system and redesigned Sync tab 2026-04-22 12:20:32 +02:00
Timo 1355022c35 feat: reorganize popup tabs and add video debug diagnostics 2026-04-22 11:27:16 +02:00
Timo f1dae0ef4e chore: final integration polish - harden join ux, refine connection state, and sanitize logs 2026-04-22 11:04:51 +02:00
Timo 4f2fe3045c Fix SPA video element recycling resilience 2026-04-22 10:55:54 +02:00
Timo 0b28274766 Fix: Service Worker persistence, Ping-Pong failsafe, URL parsing, and server rate limit DoS 2026-04-22 10:31:46 +02:00
Timo 88cb313fc0 Security & Stability: Fixed SW race, ping-pong loops, and invite parsing 2026-04-22 10:20:45 +02:00
Timo d750d96db5 Fix security vulnerabilities and logic flaws 2026-04-22 10:04:46 +02:00
Timo 3ec10a52e4 Refactor: Comprehensive Security and Architecture Audit (Self-Audit Fixes) 2026-04-22 09:53:26 +02:00
Timo 37ead94f76 Refactor: Comprehensive Security and Architecture Audit 2026-04-22 09:49:23 +02:00
Timo f2781a45c2 Fix: Resolve SyntaxError and ReferenceError in content.js MutationObserver 2026-04-22 09:01:50 +02:00
Timo 0d7e5e7fc7 Applied Final Polish optimizations: SPA navigation fix, UI throttling, and Strict WSS 2026-04-22 08:57:22 +02:00
Timo 5cfc9d4047 Stable state before Final Polish optimizations 2026-04-22 08:56:52 +02:00
MacBook 14033244e5 Initial commit: Production-ready KoalaSync Monorepo with Manifest V3, Socket.IO Relay, and Two-Phase Sync 2026-04-21 07:49:37 +02:00