diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/features/messages.js | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/features/messages.js b/src/features/messages.js index 326c420..0ea7520 100644 --- a/src/features/messages.js +++ b/src/features/messages.js @@ -12893,21 +12893,23 @@ export function messagesFeature(ctx) { // it starts playing"). The server's first frame (vmedia first.jpg: frame // 0 at full size, any host, any layout, cached at the CDN) is the first // choice, fetched and decoded aside and put on the slide when it is - // ready; the frame drawn here is the fallback for the next clip; a clip - // with neither keeps the still there is (a kept frame, the post's - // picture), soft but not black, replaced by a first frame when one comes. + // ready; the frame drawn here is the fallback for the next clip. A clip + // with neither gets no picture at all — and so stays out of the carousel + // (pagerReveal): the post's own still, put up meanwhile, was often not + // the clip's first frame, and the swap from one to the other jarred + // (Adam, 2026-10-17: "i don't want to show posters and then switch to + // the first frame … could we just always wait until we have a non-black + // frame before including the video in the pager?"). function slideFrame(s, k) { const v = s.querySelector('video.mp-media'); if (!v || v._frame === 'first' || v._frameBusy) return; const url = v.getAttribute('data-src'); const put = (p, kind) => { if (!p || !pager || !s.isConnected || v._frame === 'first') return false; - if (kind === 'soft' && (v._frame || pager.cur === s)) return false; // never a soft still under the clip on screen v.setAttribute('poster', p); v._frame = kind; pagerReveal(); return true; }; - const soft = () => put(videoThumbs.get(url) || posterOf(s._ev, url), 'soft'); const first = serverFirst(url); if (first && !serverFirstFailed.has(url)) { v._frameBusy = true; @@ -12926,10 +12928,8 @@ export function messagesFeature(ctx) { if (k === 0 && !v._grabbed) { // the next clip: its opening is in the cache, the frame comes from there v._grabbed = true; v._frameBusy = true; - pagerPoster(playSrc(url)).then((p) => { v._frameBusy = false; if (!put(p, 'first')) soft(); }); - return; + pagerPoster(playSrc(url)).then((p) => { v._frameBusy = false; put(p, 'first'); }); } - if (first) soft(); // (the server had none: the still, if any, rather than black) } // The opening of a clip about to be reached, fetched into the browser's // HTTP cache with a range request: the player's own request for the file |
