Backport pull request #7252 from jellyfin-web/release-10.11.z

Wraps registration of all mediaSession action handlers in try catch.

Original-merge: 7643885c6b

Merged-by: thornbill <thornbill@users.noreply.github.com>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
This commit is contained in:
bernarden
2025-10-27 15:47:14 -04:00
committed by Joshua M. Boniface
parent 8026ae3137
commit d168815ba4

View File

@@ -51,24 +51,20 @@ class MediaSessionSubscriber extends PlaybackSubscriber {
}
private bindNavigatorSession() {
/* eslint-disable compat/compat */
navigator.mediaSession.setActionHandler('pause', this.onMediaSessionAction.bind(this));
navigator.mediaSession.setActionHandler('play', this.onMediaSessionAction.bind(this));
// NOTE: Some legacy (TV) browsers lack support for the stop action
try {
navigator.mediaSession.setActionHandler('stop', this.onMediaSessionAction.bind(this));
} catch (err) {
console.warn('[MediaSessionSubscriber] Failed to add \'stop\' action handler', err);
}
navigator.mediaSession.setActionHandler('previoustrack', this.onMediaSessionAction.bind(this));
navigator.mediaSession.setActionHandler('nexttrack', this.onMediaSessionAction.bind(this));
navigator.mediaSession.setActionHandler('seekto', this.onMediaSessionAction.bind(this));
const actions: MediaSessionAction[] = ['pause', 'play', 'previoustrack', 'nexttrack', 'stop', 'seekto'];
// iOS will only show next/prev track controls or seek controls
if (!browser.iOS) {
navigator.mediaSession.setActionHandler('seekbackward', this.onMediaSessionAction.bind(this));
navigator.mediaSession.setActionHandler('seekforward', this.onMediaSessionAction.bind(this));
if (!browser.iOS) actions.push('seekbackward', 'seekforward');
for (const action of actions) {
try {
/* eslint-disable-next-line compat/compat */
navigator.mediaSession.setActionHandler(action, this.onMediaSessionAction.bind(this));
} catch (err) {
// NOTE: Some legacy (TV) browsers lack support for the stop and seekto actions
console.warn(`[MediaSessionSubscriber] Failed to add "${action}" action handler`, err);
}
}
/* eslint-enable compat/compat */
}
private onMediaSessionAction(details: MediaSessionActionDetails) {