diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 14b23ad940..c11e176df3 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2284,32 +2284,17 @@ class PlaybackManager { // TODO: This should be the media type requested, not the original media type const mediaType = item.MediaType; + if (playOptions.fullscreen) { + loading.show(); + } + 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) + .then(() => detectBitrate(apiClient, item, mediaType)) + .then((bitrate) => { + return playAfterBitrateDetect(bitrate, item, playOptions, onPlaybackStartedFn, prevSource) + .catch(onPlaybackRejection); + }) .finally(() => { if (playOptions.fullscreen) { loading.hide(); @@ -2328,7 +2313,13 @@ class PlaybackManager { Events.trigger(self, 'playbackcancelled'); } - function onInterceptorRejection(e) { + function onInterceptorRejection() { + cancelPlayback(); + + return Promise.reject(); + } + + function onPlaybackRejection(e) { cancelPlayback(); let displayErrorCode = 'ErrorDefault'; @@ -2502,6 +2493,29 @@ class PlaybackManager { } } + function detectBitrate(apiClient, item, mediaType) { + // FIXME: This is gnarly, but don't want to change too much here in a bugfix + return Promise.resolve() + .then(() => { + 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) { const startPosition = playOptions.startPositionTicks; diff --git a/src/plugins/playAccessValidation/plugin.js b/src/plugins/playAccessValidation/plugin.js index 3081f8cf49..13527ddad3 100644 --- a/src/plugins/playAccessValidation/plugin.js +++ b/src/plugins/playAccessValidation/plugin.js @@ -35,7 +35,8 @@ class PlayAccessValidation { return Promise.reject(); } - return showErrorMessage().finally(Promise.reject); + return showErrorMessage() + .finally(() => Promise.reject()); }); } }