mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Fix playback interceptor rejecting
This commit is contained in:
parent
3dcb42daac
commit
70b9aa4611
2 changed files with 46 additions and 28 deletions
|
@ -2267,7 +2267,7 @@ class PlaybackManager {
|
||||||
if (item.IsPlaceHolder) {
|
if (item.IsPlaceHolder) {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
showPlaybackInfoErrorMessage(self, 'PlaybackErrorPlaceHolder');
|
showPlaybackInfoErrorMessage(self, 'PlaybackErrorPlaceHolder');
|
||||||
return Promise.reject();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Normalize defaults to simplfy checks throughout the process
|
// Normalize defaults to simplfy checks throughout the process
|
||||||
|
@ -2285,31 +2285,15 @@ class PlaybackManager {
|
||||||
const mediaType = item.MediaType;
|
const mediaType = item.MediaType;
|
||||||
|
|
||||||
return runInterceptors(item, playOptions)
|
return runInterceptors(item, playOptions)
|
||||||
.then(() => {
|
|
||||||
if (playOptions.fullscreen) {
|
|
||||||
loading.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isServerItem(item) || itemHelper.isLocalItem(item)) {
|
|
||||||
return Promise.reject('skip bitrate detection');
|
|
||||||
}
|
|
||||||
|
|
||||||
return apiClient.getEndpointInfo().then((endpointInfo) => {
|
|
||||||
if ((mediaType === 'Video' || mediaType === 'Audio') && appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType)) {
|
|
||||||
return apiClient.detectBitrate().then((bitrate) => {
|
|
||||||
appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate);
|
|
||||||
return bitrate;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject('skip bitrate detection');
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(() => getSavedMaxStreamingBitrate(apiClient, mediaType))
|
|
||||||
.then((bitrate) => {
|
|
||||||
return playAfterBitrateDetect(bitrate, item, playOptions, onPlaybackStartedFn, prevSource);
|
|
||||||
})
|
|
||||||
.catch(onInterceptorRejection)
|
.catch(onInterceptorRejection)
|
||||||
|
.then(() => detectBitrate(apiClient, item, mediaType, playOptions))
|
||||||
|
.then((bitrate) => {
|
||||||
|
return playAfterBitrateDetect(bitrate, item, playOptions, onPlaybackStartedFn, prevSource)
|
||||||
|
.catch(onPlaybackRejection);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
/* NOTE: Any errors should already be handled, but interceptors will reject to prevent playback. */
|
||||||
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
if (playOptions.fullscreen) {
|
if (playOptions.fullscreen) {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
@ -2328,7 +2312,13 @@ class PlaybackManager {
|
||||||
Events.trigger(self, 'playbackcancelled');
|
Events.trigger(self, 'playbackcancelled');
|
||||||
}
|
}
|
||||||
|
|
||||||
function onInterceptorRejection(e) {
|
function onInterceptorRejection() {
|
||||||
|
cancelPlayback();
|
||||||
|
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onPlaybackRejection(e) {
|
||||||
cancelPlayback();
|
cancelPlayback();
|
||||||
|
|
||||||
let displayErrorCode = 'ErrorDefault';
|
let displayErrorCode = 'ErrorDefault';
|
||||||
|
@ -2343,7 +2333,7 @@ class PlaybackManager {
|
||||||
|
|
||||||
showPlaybackInfoErrorMessage(self, displayErrorCode);
|
showPlaybackInfoErrorMessage(self, displayErrorCode);
|
||||||
|
|
||||||
return Promise.reject();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
function destroyPlayer(player) {
|
function destroyPlayer(player) {
|
||||||
|
@ -2502,6 +2492,33 @@ class PlaybackManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function detectBitrate(apiClient, item, mediaType, playOptions) {
|
||||||
|
// FIXME: This is gnarly, but don't want to change too much here in a bugfix
|
||||||
|
return Promise.resolve()
|
||||||
|
.then(() => {
|
||||||
|
if (playOptions.fullscreen) {
|
||||||
|
loading.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isServerItem(item) || itemHelper.isLocalItem(item)) {
|
||||||
|
return Promise.reject('skip bitrate detection');
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiClient.getEndpointInfo()
|
||||||
|
.then((endpointInfo) => {
|
||||||
|
if ((mediaType === 'Video' || mediaType === 'Audio') && appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType)) {
|
||||||
|
return apiClient.detectBitrate().then((bitrate) => {
|
||||||
|
appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate);
|
||||||
|
return bitrate;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.reject('skip bitrate detection');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => getSavedMaxStreamingBitrate(apiClient, mediaType));
|
||||||
|
}
|
||||||
|
|
||||||
function playAfterBitrateDetect(maxBitrate, item, playOptions, onPlaybackStartedFn, prevSource) {
|
function playAfterBitrateDetect(maxBitrate, item, playOptions, onPlaybackStartedFn, prevSource) {
|
||||||
const startPosition = playOptions.startPositionTicks;
|
const startPosition = playOptions.startPositionTicks;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@ class PlayAccessValidation {
|
||||||
return Promise.reject();
|
return Promise.reject();
|
||||||
}
|
}
|
||||||
|
|
||||||
return showErrorMessage().finally(Promise.reject);
|
return showErrorMessage()
|
||||||
|
.finally(() => Promise.reject());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue