Wire custom control bar into VideoPlayer#1662
Conversation
…ions' into horatiu-lig-9805-import-activitynet-style-event-annotations-3
…ent-annotations-3
…ent-annotations-3
Previously, filtering and counting video annotations only considered annotations attached to a video's frames. Videos can also carry annotations directly (e.g. ActivityNet-style event/classification labels on the whole video). This makes both the video filter and the annotation counter consider these direct video annotations in addition to frame annotations.
…ions-3' into horatiu-lig-9806-filter-videos-by-event-metadata
Full-width scrubber + transport buttons that own no playback state and call back on user intent. Includes helpers (formatTime, clampPercent, timeFromClientX) and unit tests. Exported from the components barrel. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughVideoPlayer now renders a custom control bar backed by ChangesVideoPlayer controls
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant VideoPlayer
participant useVideoPlayback
participant VideoControls
VideoPlayer->>useVideoPlayback: Provide video and region references
useVideoPlayback-->>VideoPlayer: Return playback state and handlers
VideoPlayer->>VideoControls: Pass playback callbacks
VideoControls->>VideoPlayer: Invoke play, seek, mute, or fullscreen actions
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Interactive Playground plus paused / near-end states, on a dark backdrop matching how the bar overlays a video. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compose useVideoPlayback + VideoControls, forcing native <video controls> off so the full-width scrubber can host aligned timeline overlays. Adds a startTimeS prop (null waits for a deep-link timestamp) and a region ref for fullscreen. Updates tests and stories accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mirrors a <video> element's playback state into reactive fields and exposes intent callbacks (seek, play/pause, mute, fullscreen) for a custom control bar. Listening via native events keeps it composable with handlers on the element. Covered by a harness-driven unit test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Interactive Playground plus paused / near-end states, on a dark backdrop matching how the bar overlays a video.
a9d31fd to
2dc2a47
Compare
5a07a5b to
7dede03
Compare
|
/review |
…o horatiu-lig-9807-show-event-bars-on-the-timeline.b
…o horatiu-lig-9807-show-event-bars-on-the-timeline.c
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
lightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.test.ts (1)
1-128: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winConsider adding coverage for
startTimeSsemantics.The new
startTimeSprop (default0vs.null"wait for deep link" behavior) has no dedicated test here, even though it drives a non-trivial effect inuseVideoPlayback(skipping the seek entirely whennull, applyingel.currentTimeonloadedmetadataotherwise). A test simulatingloadedmetadataand assertingel.currentTimewould guard this new behavior.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@lightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.test.ts` around lines 1 - 128, Add dedicated tests in the VideoPlayer suite for startTimeS behavior: verify a numeric value seeks the video by setting currentTime after loadedmetadata, and null skips the seek entirely. Exercise the loadedmetadata event and assert currentTime so the useVideoPlayback semantics for the default value and deep-link wait behavior remain covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@lightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.svelte`:
- Around line 93-99: Update the initialMuted option passed to useVideoPlayback
in VideoPlayer so it derives from mergedVideoProps.muted, preserving the
consumer’s videoProps.muted override and matching the actual video element state
from initialization.
- Around line 138-150: Update the video element in VideoPlayer so the
component’s onerror and onloadeddata handlers cannot be overwritten by
mergedVideoProps. Place the built-in handlers after the spread or explicitly
chain them with consumer callbacks, preserving both sourceLoadError handling and
consumer-provided behavior.
---
Nitpick comments:
In `@lightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.test.ts`:
- Around line 1-128: Add dedicated tests in the VideoPlayer suite for startTimeS
behavior: verify a numeric value seeks the video by setting currentTime after
loadedmetadata, and null skips the seek entirely. Exercise the loadedmetadata
event and assert currentTime so the useVideoPlayback semantics for the default
value and deep-link wait behavior remain covered.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 9215a059-d966-4fdf-9bb3-91531b1a94dd
📒 Files selected for processing (5)
lightly_studio_view/e2e/videos/video-frame-details.e2e-test.tslightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.stories.sveltelightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.sveltelightly_studio_view/src/lib/components/VideoPlayer/VideoPlayer.test.tslightly_studio_view/src/lib/components/VideoPlayer/useVideoPlayback.svelte.ts
Title: Wire custom control bar into VideoPlayer
What has changed and why?
Third of 4 PRs splitting #1649.
Composes
useVideoPlayback+VideoControlsinsideVideoPlayer, replacingthe native
<video controls>bar (now forced off) with the custom one so thefull-width scrubber can host aligned timeline overlays. Adds a
startTimeSprop (
nullwaits for a deep-link timestamp before seeking) and a region reffor fullscreen.
How has it been tested?
Updated

VideoPlayerunit tests (native controls stay off even whenrequested; the custom control bar renders) and Storybook stories.
Player uses the new controls:
Did you update CHANGELOG.md?
Summary by CodeRabbit