From ce5db6aa3cf5dcf09981aea527cd6e98cd511ebc Mon Sep 17 00:00:00 2001 From: asepharyana Date: Mon, 3 Aug 2026 10:09:19 +0700 Subject: [PATCH] fix(media): normalize activeMode in backend MediaState (FE relies on it) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gateway publishes {playing, activeMode, musicVolume, current, queue} but the backend MediaState interface + normalizeMediaState dropped activeMode, so the FE's 'Screen share active' / 'Music playing' badge never rendered. Carry it through so the FE↔BE media contract stays in sync. --- services/backend/src/modules/media/media.service.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/backend/src/modules/media/media.service.ts b/services/backend/src/modules/media/media.service.ts index 7f2ce41..5af2989 100644 --- a/services/backend/src/modules/media/media.service.ts +++ b/services/backend/src/modules/media/media.service.ts @@ -28,6 +28,8 @@ export interface MediaItem { export interface MediaState { playing: boolean; + /** null/absent when idle; "music" | "screen" while a track is active. */ + activeMode?: "music" | "screen" | null; musicVolume: number; current: MediaItem | null; queue: MediaItem[]; @@ -41,6 +43,7 @@ const DEFAULT_COMMAND_TIMEOUT_MS = 5000; const DEFAULT_STATE: MediaState = { playing: false, + activeMode: null, musicVolume: 1.0, current: null, queue: [], @@ -56,8 +59,12 @@ function normalizeMediaState(raw: Record): MediaState { rawPlaying === true || rawPlaying === "playing" || rawPlaying === "buffering"; + const mode = raw.activeMode; + const activeMode: "music" | "screen" | null = + mode === "music" || mode === "screen" ? mode : null; return { playing, + activeMode, musicVolume: Number(raw.musicVolume ?? 1.0), current: (raw.current as MediaItem | null) ?? null, queue: (raw.queue as MediaItem[]) ?? [],