mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-09 17:36:15 -08:00
The component had grown to ~1000 lines with session lifecycle, IPC plumbing, keyboard shortcuts, popover state, formatters, and view orchestration all living in one file. Per CLAUDE.md's 350–400 line hard cap, split into: - embedded-mpv-format.utils.ts (~100): pure helpers (formatTime, track labels, volume icon/label, persisted-volume access, measureBounds) and preset constants (SPEED_PRESETS, ASPECT_PRESETS, HIDDEN_BOUNDS). - embedded-mpv-shortcuts.ts (~90): EmbeddedMpvShortcuts class that owns the document keydown listener and routes through a handler interface; the component just provides callbacks. - embedded-mpv-ui-state.ts (~110): EmbeddedMpvMenuState (single-open popover state machine with toggle/open/close/closeAll + anyOpen signal) and EmbeddedMpvFeedback (transient overlay with auto-clearing flash). - embedded-mpv-session-controller.ts (~395): component-scoped Injectable that owns support/session/sessionId/stalled/retryToken signals, the session-update IPC subscription, bounds-sync (resize, scroll, overlay state), the stalled timer, and all per-session IPC operations (togglePaused, seekBy, seekTo, applyVolume, setAudioTrack, setSubtitleTrack, setSpeed, setAspect, retry). - embedded-mpv-player.component.ts (now ~540, was ~1000): view-only orchestration — view children, derived computed signals, DOM event listeners (pointerdown/pointermove/fullscreenchange/dblclick), and three effects (session start/teardown, overlay-active bounds sync, session payload → volume/timeUpdate fan-out). No behavior changes. Build clean, electron-backend tests still pass. Component is still over the 400-line cap but the bulk of its size is now the necessarily-coupled-to-view computed signals and constructor effects; the remaining over-cap delta is structural to a player root. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Entire-Checkpoint: f957cd9849e0