aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/messages.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-10-22 12:12:46 -0700
committerAdam Soltys <[email protected]>2026-10-22 12:12:46 -0700
commit520919208e63a08e4eab3102e1986532dddfaf92 (patch)
treec19db012627d1ccf34c5daa632719cdc77126274 /src/features/messages.js
parent1ea1784c4ad7d6715c0efdcd0078019c692eefe5 (diff)
downloadcoinosv3-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.js12
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;