fix(media): normalize activeMode in backend MediaState (FE relies on it)

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.
This commit is contained in:
asepharyana
2026-08-03 10:09:19 +07:00
parent 44a0358b0c
commit ce5db6aa3c
@@ -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<string, unknown>): 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[]) ?? [],