diff options
| author | Adam Soltys <[email protected]> | 2026-10-22 12:12:46 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-22 12:12:46 -0700 |
| commit | 520919208e63a08e4eab3102e1986532dddfaf92 (patch) | |
| tree | c19db012627d1ccf34c5daa632719cdc77126274 /src/features/messages.js | |
| parent | 1ea1784c4ad7d6715c0efdcd0078019c692eefe5 (diff) | |
| download | coinosv3-520919208e63a08e4eab3102e1986532dddfaf92.tar.gz coinosv3-520919208e63a08e4eab3102e1986532dddfaf92.zip | |
Videos grid: a clip the player can't load leaves the grid instead of sitting there as a blank tile
A deleted file on Primal's blossom answers 404 without CORS headers, so the
probe saw only a quiet host (not a 404), the server had no still for it, and
the tile's fallback player failed with nothing listening: a blank box (Adam's
iPhone). The player's error now hides the tile and marks the clip gone for a
day, as a 404 the probe could read already did.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01K5xtiFrkFVsrkWx6JDQjiT
Diffstat (limited to 'src/features/messages.js')
| -rw-r--r-- | src/features/messages.js | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/features/messages.js b/src/features/messages.js index 2b175e2..71d3370 100644 --- a/src/features/messages.js +++ b/src/features/messages.js @@ -14333,6 +14333,18 @@ export function messagesFeature(ctx) { // (a plain load: shown, not kept — a player's pixels can only be // read from a CORS load, and those fail on a cached plain copy) v.muted = true; + // a clip the player can't load either is gone as far as the grid + // goes: a deleted file whose 404 came without CORS headers + // (Primal's blossom) only looked like a quiet host to the probe, + // and its tile sat blank. Left out for a day, like a 404 the + // probe could read. + v.addEventListener('error', () => { + if (!v.isConnected || !v.getAttribute('src')) return; // let go of by the eight-second cap + noteVideoInfo(url, { goneAt: Date.now() }); + const b = v.closest('.media-tile'); + if (b) b.classList.add('broken'); + scheduleRepaint(); + }, { once: true }); v.src = v.getAttribute('data-src'); if (heavy && d.size) v.after(h('span', { class: 'media-tile-badge' }, heavyLabel(url))); return; |
