From 59db69227b6c8f7bc23f38f04fa11d7ba1fcde71 Mon Sep 17 00:00:00 2001 From: dmitrylyzo <56478732+dmitrylyzo@users.noreply.github.com> Date: Sun, 21 Jul 2024 01:53:29 -0400 Subject: [PATCH] Backport pull request #5740 from jellyfin-web/release-10.9.z Don't change volume if it is physically controlled Original-merge: e0a0c92b43b53a5bba1aaeacf2a9e7e3215d0f16 Merged-by: thornbill Backported-by: Bill Thornton --- src/components/playback/playbackmanager.js | 14 ++++++++++---- src/plugins/htmlAudioPlayer/plugin.js | 5 ++++- src/plugins/htmlVideoPlayer/plugin.js | 6 +++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 676d1df1c3..a848416b52 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -33,6 +33,10 @@ function enableLocalPlaylistManagement(player) { return player.isLocalPlayer; } +function supportsPhysicalVolumeControl(player) { + return player.isLocalPlayer && appHost.supports('physicalvolumecontrol'); +} + function bindToFullscreenChange(player) { if (Screenfull.isEnabled) { Screenfull.on('change', function () { @@ -1157,7 +1161,7 @@ class PlaybackManager { self.setVolume = function (val, player) { player = player || self._currentPlayer; - if (player) { + if (player && !supportsPhysicalVolumeControl(player)) { player.setVolume(val); } }; @@ -1165,15 +1169,17 @@ class PlaybackManager { self.getVolume = function (player) { player = player || self._currentPlayer; - if (player) { + if (player && !supportsPhysicalVolumeControl(player)) { return player.getVolume(); } + + return 1; }; self.volumeUp = function (player) { player = player || self._currentPlayer; - if (player) { + if (player && !supportsPhysicalVolumeControl(player)) { player.volumeUp(); } }; @@ -1181,7 +1187,7 @@ class PlaybackManager { self.volumeDown = function (player) { player = player || self._currentPlayer; - if (player) { + if (player && !supportsPhysicalVolumeControl(player)) { player.volumeDown(); } }; diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index ee226ebcc2..34b573317d 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -263,7 +263,10 @@ class HtmlAudioPlayer { document.body.appendChild(elem); } - elem.volume = htmlMediaHelper.getSavedVolume(); + // TODO: Move volume control to PlaybackManager. Player should just be a wrapper that translates commands into API calls. + if (!appHost.supports('physicalvolumecontrol')) { + elem.volume = htmlMediaHelper.getSavedVolume(); + } self._mediaElement = elem; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 5885147cb0..5c536e7e11 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1584,7 +1584,11 @@ export class HtmlVideoPlayer { playerDlg.innerHTML = html; const videoElement = playerDlg.querySelector('video'); - videoElement.volume = getSavedVolume(); + // TODO: Move volume control to PlaybackManager. Player should just be a wrapper that translates commands into API calls. + if (!appHost.supports('physicalvolumecontrol')) { + videoElement.volume = getSavedVolume(); + } + videoElement.addEventListener('timeupdate', this.onTimeUpdate); videoElement.addEventListener('ended', this.onEnded); videoElement.addEventListener('volumechange', this.onVolumeChange);