feat: add video resolver, URL input, and video player

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-21 10:57:43 -04:00
parent 820b451514
commit 16812447ef
8 changed files with 358 additions and 5 deletions

View File

@@ -0,0 +1,67 @@
import type { VideoMetadata } from '$lib/bindings/video';
import type { ThumbnailSpritesheet } from '$lib/bindings/mediaAnalysis';
export type SessionStatus = 'idle' | 'resolving' | 'ready' | 'error';
export const session = $state({
status: 'idle' as SessionStatus,
error: null as string | null,
url: '',
title: '',
duration: 0,
fps: 30,
thumbnailUrl: null as string | null,
streamUrl: '',
currentTime: 0,
isPlaying: false,
localFilePath: null as string | null,
downloadProgress: 0,
keyframePositions: [] as number[],
waveformPeaks: [] as number[],
thumbnailSpritesheets: [] as ThumbnailSpritesheet[],
});
export function setMetadata(meta: VideoMetadata) {
session.url = meta.url;
session.title = meta.title;
session.duration = meta.duration;
session.fps = meta.fps;
session.thumbnailUrl = meta.thumbnailUrl;
session.streamUrl = meta.streamUrl;
session.status = 'ready';
session.error = null;
session.localFilePath = null;
session.downloadProgress = 0;
session.keyframePositions = [];
session.waveformPeaks = [];
session.thumbnailSpritesheets = [];
}
export function setError(msg: string) {
session.status = 'error';
session.error = msg;
}
export function setResolving() {
session.status = 'resolving';
session.error = null;
}
export function reset() {
session.status = 'idle';
session.error = null;
session.url = '';
session.title = '';
session.duration = 0;
session.fps = 30;
session.thumbnailUrl = null;
session.streamUrl = '';
session.currentTime = 0;
session.isPlaying = false;
session.localFilePath = null;
session.downloadProgress = 0;
session.keyframePositions = [];
session.waveformPeaks = [];
session.thumbnailSpritesheets = [];
}