From cc17fbe7cc1f900cdd4be7a69285b99df7d4f42f Mon Sep 17 00:00:00 2001 From: Jage9 Date: Sat, 21 Feb 2026 16:37:55 -0500 Subject: [PATCH] Force fresh radio stream start to avoid stale buffered audio --- client/public/version.js | 2 +- client/src/audio/radioStationRuntime.ts | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/public/version.js b/client/public/version.js index e314bee..5eab948 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.21 R103"; +window.CHGRID_WEB_VERSION = "2026.02.21 R104"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/audio/radioStationRuntime.ts b/client/src/audio/radioStationRuntime.ts index 00480aa..9892851 100644 --- a/client/src/audio/radioStationRuntime.ts +++ b/client/src/audio/radioStationRuntime.ts @@ -107,6 +107,11 @@ function connectRadioChannelSource( }; } +function freshStreamUrl(streamUrl: string): string { + const separator = streamUrl.includes('?') ? '&' : '?'; + return `${streamUrl}${separator}chgrid_start=${Date.now()}`; +} + export class RadioStationRuntime { private readonly sharedRadioSources = new Map(); private readonly itemRadioOutputs = new Map(); @@ -251,7 +256,7 @@ export class RadioStationRuntime { } const audioCtx = this.audio.context; if (!audioCtx) return null; - const element = new Audio(streamUrl); + const element = new Audio(freshStreamUrl(streamUrl)); element.crossOrigin = 'anonymous'; element.loop = true; element.preload = 'none';