Skip to content

feat: motion photo support#2819

Draft
dschmidt wants to merge 4 commits into
mainfrom
feat/motion-photos
Draft

feat: motion photo support#2819
dschmidt wants to merge 4 commits into
mainfrom
feat/motion-photos

Conversation

@dschmidt

@dschmidt dschmidt commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Surfaces Google Motion Photos (a still JPEG with a short MP4 appended) in the UI: a play badge everywhere plus inline playback.

Warning

Proof of concept. The server does not emit the motion photo facet yet, so this cannot be merged and the e2e tests will not run against a stock backend. It works end to end against a local dev stack with the facet enabled.

What

  • Data: threads the oc:motionPhoto WebDAV property (version, presentationTimestampUs, videoSize) through buildResource onto Resource, using the generated MotionPhoto type from the libre-graph client.
  • Badge: MotionPhotoBadge (MDI motion-play/pause icon) on grid tiles, table rows, the sidebar preview and the media viewer photo roll.
  • Playback: useMotionPhoto range-fetches just the embedded MP4 (Range: bytes=<size - videoSize>-) and wraps it as a blob; useMotionPhotoPlayback owns the shared hover/play state, buffering indicator and abort. MotionPhotoOverlay reuses both across the files list, sidebar and photo roll.
    • Grid tiles, table rows, sidebar preview, photo roll: hover to play (muted, looping), badge click toggles.
    • Media viewer: auto-plays once on open, loop play/pause control in the bottom controls bar.
    • Touch: badge tap toggles play/pause; hover is limited to hover-capable devices.

@dschmidt dschmidt force-pushed the feat/motion-photos branch 4 times, most recently from 2d81b74 to a37ca7d Compare July 7, 2026 13:10
@dschmidt dschmidt changed the base branch from main to chore/regenerate-libre-graph-client July 7, 2026 13:11
@dschmidt dschmidt force-pushed the chore/regenerate-libre-graph-client branch from 4d882ab to cae8685 Compare July 7, 2026 13:18
@dschmidt dschmidt force-pushed the feat/motion-photos branch from a37ca7d to f013edc Compare July 7, 2026 13:18
Base automatically changed from chore/regenerate-libre-graph-client to main July 7, 2026 13:34
@dschmidt dschmidt force-pushed the feat/motion-photos branch from f013edc to 7a98785 Compare July 7, 2026 13:37
dschmidt added 4 commits July 7, 2026 16:01
Map the oc:motionPhoto WebDAV property (version, presentationTimestampUs, videoSize) onto Resource in buildResource, using the generated MotionPhoto type from the libre-graph client.
MotionPhotoBadge renders the MDI motion-play/pause icon; MotionPhotoOverlay pairs the badge with the hover-to-play clip so every surface reuses the same markup and behaviour. useMotionPhoto range-fetches the embedded MP4; useMotionPhotoPlayback owns the shared hover/play state, buffering and abort.
Show the badge and hover-to-play the clip on grid tiles, table rows, the sidebar preview and the media viewer photo roll. The media viewer auto-plays once on open and offers a loop play/pause control in the bottom bar.
Cover the badge in tiles/table, the media viewer preview strip, the viewer playback control and inline sidebar playback.
@dschmidt dschmidt force-pushed the feat/motion-photos branch from 7a98785 to ecff135 Compare July 7, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant