fix(diashow): never project a video, however its poster turned out

`merge` decided by whether a usable still existed, so the same clip was included or
dropped depending on whether ffmpeg happened to extract a poster — a video WITH a
thumbnail was queued and shown as a frozen frame, one without was skipped. Keyed on
the mime type instead: the projector shows stills only.

The test factory casts through `as unknown as FeedUpload`, so adding a field the queue
reads does not fail typechecking — it fails at runtime, which is how this surfaced as
ten broken tests rather than a compile error. The factory now carries `mime_type` and
the comment says why keeping it in step matters.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Fabian Hamm (Privat)
2026-08-03 18:36:57 +02:00
parent fffa2d556c
commit 89ca819529
3 changed files with 36 additions and 7 deletions

View File

@@ -205,6 +205,7 @@
// Ids known BEFORE the scan — only these are eviction candidates, so an upload that
// arrives mid-scan (not in this snapshot) is never wrongly pruned.
const before = new Set(queue.knownIds());
// eslint-disable-next-line svelte/prefer-svelte-reactivity -- local scan-bookkeeping set inside one reconcile() call; never stored in $state, so no reactivity is involved.
const seen = new Set<string>();
let cursor: string | null = null;
let complete = false;