diff --git a/server/lib/player-capabilities.js b/server/lib/player-capabilities.js index c0c2e67..3e24196 100644 --- a/server/lib/player-capabilities.js +++ b/server/lib/player-capabilities.js @@ -68,8 +68,15 @@ const BASELINE = { tizen: [ 'playback.video', 'playback.image', 'playback.widget', 'playback.youtube', 'playback.zones', 'playback.transitions', 'playback.pip', - 'audio.mute', 'audio.volume', + // audio.mute only. A FIELDED Tizen panel has no set_volume handler at all — the command falls + // through to "unknown command", so the dashboard slider does nothing. Updated panels declare + // audio.volume for themselves once they ship a handler; the baseline describes what an + // un-updated one can actually do, which is the whole reason it exists. + 'audio.mute', 'display.rotation', + // Both really are implemented in the shipped player (captureAndSend / startStreaming), so + // omitting them would have hidden working controls on every legacy Tizen panel. + 'remote.screenshot', 'remote.stream', 'remote.input', 'system.restart_player', 'sync.clock', diff --git a/server/test/player-capabilities.test.js b/server/test/player-capabilities.test.js index 4e203ec..7a7baea 100644 --- a/server/test/player-capabilities.test.js +++ b/server/test/player-capabilities.test.js @@ -97,3 +97,15 @@ test('Tizen does NOT claim offline caching — it caches the playlist, not the m assert.equal(caps.supports({ platform: 'Tizen 6.5' }, 'offline.cache'), false); assert.ok(caps.supports({ client_type: 'apk' }, 'offline.cache'), 'Android really does cache media'); }); + +test('the baseline describes a FIELDED player, not the one we are about to ship', () => { + // Tizen's shipped build has no set_volume handler — the command falls through to "unknown + // command" — so a legacy panel must not claim audio.volume even though updated panels will + // declare it themselves. It DOES implement capture and streaming, so those must be claimed or + // working controls disappear from every legacy Tizen display. + const tizen = { platform: 'Tizen 6.5' }; + assert.equal(caps.supports(tizen, 'audio.volume'), false, 'the slider is dead on a fielded panel'); + assert.ok(caps.supports(tizen, 'audio.mute'), 'mute does work'); + assert.ok(caps.supports(tizen, 'remote.screenshot'), 'captureAndSend exists in the shipped player'); + assert.ok(caps.supports(tizen, 'remote.stream'), 'startStreaming exists in the shipped player'); +});