fix(overlay): drive timing review playhead from mpv playback position

- Preview session observes time-pos, waits for loaded media before seeking, and acks each command
- Forward positions to the modal over media-timing-review:preview-position
- Cursor follows the real position, pauses while buffering, and stays at the clip end when done
- Replace the fixed end-of-clip timer with a 15s stall timeout
- Document preview cursor behavior and ownership in docs
This commit is contained in:
sudacode committed 2026-09-29 18:07:07 -07:00
1 parent 04b878dd93
commit fdb0a31fff
14 files changed
+335 -57

No files matched your search

+21
View File
@@ -71,6 +71,7 @@ import type {
ChangelogSnapshot,
MediaTimingReviewActionResult,
MediaTimingReviewOpenPayload,
MediaTimingReviewPreviewPosition,
MediaTimingReviewPreviewRequest,
MediaTimingReviewResolveRequest,
MediaTimingReviewFrameRequest,
@@ -511,6 +512,26 @@ const electronAPI: ElectronAPI = {
onOpenYoutubeTrackPicker: onOpenYoutubeTrackPickerEvent,
onOpenMediaTimingReview: onOpenMediaTimingReviewEvent,
onMediaTimingReviewPreviewEnded: onMediaTimingReviewPreviewEndedEvent,
onMediaTimingReviewPreviewPosition: (
callback: (position: MediaTimingReviewPreviewPosition) => void,
): void => {
ipcRenderer.on(
IPC_CHANNELS.event.mediaTimingReviewPreviewPosition,
(_event, payload: unknown) => {
if (
typeof payload !== 'object' ||
payload === null ||
!('reviewId' in payload) ||
typeof payload.reviewId !== 'string' ||
!('time' in payload) ||
typeof payload.time !== 'number' ||
!Number.isFinite(payload.time)
)
return;
callback({ reviewId: payload.reviewId, time: payload.time });
},
);
},
previewMediaTimingReview: (
request: MediaTimingReviewPreviewRequest,
): Promise<MediaTimingReviewActionResult> =>