mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
add fetch timeout
This commit is contained in:
parent
7c3fa06651
commit
ba5afc0ae2
14 changed files with 98 additions and 41 deletions
|
@ -205,9 +205,25 @@
|
||||||
headers['Content-Type'] = contentType;
|
headers['Content-Type'] = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!request.timeout) {
|
||||||
return fetch(request.url, fetchRequest);
|
return fetch(request.url, fetchRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
var timeout = setTimeout(reject, request.timeout);
|
||||||
|
|
||||||
|
fetch(request.url, fetchRequest).then(function (response) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
resolve(response);
|
||||||
|
}, function (error) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function paramsToString(params) {
|
function paramsToString(params) {
|
||||||
|
|
||||||
var values = [];
|
var values = [];
|
||||||
|
@ -256,9 +272,9 @@
|
||||||
return Promise.reject(response);
|
return Promise.reject(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, function () {
|
}, function (error) {
|
||||||
onFetchFail(request.url, {});
|
onFetchFail(request.url, {});
|
||||||
return Promise.reject({});
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,7 +395,7 @@
|
||||||
return Promise.reject(response);
|
return Promise.reject(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, function () {
|
}, function (error) {
|
||||||
|
|
||||||
logger.log("Request failed to " + request.url);
|
logger.log("Request failed to " + request.url);
|
||||||
|
|
||||||
|
@ -390,26 +406,26 @@
|
||||||
|
|
||||||
var previousServerAddress = self.serverAddress();
|
var previousServerAddress = self.serverAddress();
|
||||||
|
|
||||||
tryReconnect().then(function () {
|
return tryReconnect().then(function () {
|
||||||
|
|
||||||
logger.log("Reconnect succeesed");
|
logger.log("Reconnect succeesed");
|
||||||
request.url = request.url.replace(previousServerAddress, self.serverAddress());
|
request.url = request.url.replace(previousServerAddress, self.serverAddress());
|
||||||
|
|
||||||
self.fetchWithFailover(request, false);
|
return self.fetchWithFailover(request, false);
|
||||||
|
|
||||||
}, function () {
|
}, function (innerError) {
|
||||||
|
|
||||||
logger.log("Reconnect failed");
|
logger.log("Reconnect failed");
|
||||||
onFetchFail(request.url, {});
|
onFetchFail(request.url, {});
|
||||||
return Promise.reject({});
|
throw innerError;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
logger.log("Reporting request failure");
|
logger.log("Reporting request failure");
|
||||||
|
|
||||||
onFetchFail(request.url, {});
|
onFetchFail(request.url, {});
|
||||||
return Promise.reject({});
|
throw error;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -590,7 +606,13 @@
|
||||||
|
|
||||||
var now = new Date().getTime();
|
var now = new Date().getTime();
|
||||||
|
|
||||||
return self.get(url).then(function () {
|
return self.ajax({
|
||||||
|
|
||||||
|
type: "GET",
|
||||||
|
url: url,
|
||||||
|
timeout: 5000
|
||||||
|
|
||||||
|
}).then(function () {
|
||||||
|
|
||||||
var responseTimeSeconds = (new Date().getTime() - now) / 1000;
|
var responseTimeSeconds = (new Date().getTime() - now) / 1000;
|
||||||
var bytesPerSecond = byteSize / responseTimeSeconds;
|
var bytesPerSecond = byteSize / responseTimeSeconds;
|
||||||
|
|
|
@ -113,9 +113,25 @@
|
||||||
headers['Content-Type'] = contentType;
|
headers['Content-Type'] = contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!request.timeout) {
|
||||||
return fetch(request.url, fetchRequest);
|
return fetch(request.url, fetchRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
var timeout = setTimeout(reject, request.timeout);
|
||||||
|
|
||||||
|
fetch(request.url, fetchRequest).then(function (response) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
resolve(response);
|
||||||
|
}, function (error) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function paramsToString(params) {
|
function paramsToString(params) {
|
||||||
|
|
||||||
var values = [];
|
var values = [];
|
||||||
|
@ -154,8 +170,8 @@
|
||||||
return Promise.reject(response);
|
return Promise.reject(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, function () {
|
}, function (error) {
|
||||||
return Promise.reject({});
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -340,7 +340,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.overflowBackdropCard {
|
.overflowBackdropCard {
|
||||||
width: 80%;
|
width: 84%;
|
||||||
max-width: 400px;
|
max-width: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -463,11 +463,15 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
|
||||||
}
|
}
|
||||||
|
|
||||||
.itemDetailImage {
|
.itemDetailImage {
|
||||||
|
border: solid 1px transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemDetailImage.loaded {
|
||||||
-moz-box-shadow: 0px 0 20px #000;
|
-moz-box-shadow: 0px 0 20px #000;
|
||||||
-webkit-box-shadow: 0px 0 20px #000;
|
-webkit-box-shadow: 0px 0 20px #000;
|
||||||
box-shadow: 0px 0 20px #000;
|
box-shadow: 0px 0 20px #000;
|
||||||
border: solid 1px #222;
|
border: solid 1px #222;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailImageContainer img {
|
.detailImageContainer img {
|
||||||
width: 280px;
|
width: 280px;
|
||||||
|
|
|
@ -781,7 +781,10 @@
|
||||||
|
|
||||||
self.endSession = function () {
|
self.endSession = function () {
|
||||||
|
|
||||||
|
self.stop();
|
||||||
|
setTimeout(function () {
|
||||||
castPlayer.stopApp();
|
castPlayer.stopApp();
|
||||||
|
}, 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.volumeUp = function () {
|
self.volumeUp = function () {
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
|
|
||||||
function playInternalPostMediaSourceSelection(item, mediaSource, startPosition, deferred) {
|
function playInternalPostMediaSourceSelection(item, mediaSource, startPosition, deferred) {
|
||||||
|
|
||||||
Dashboard.hideModalLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
|
|
||||||
currentItem = item;
|
currentItem = item;
|
||||||
currentMediaSource = mediaSource;
|
currentMediaSource = mediaSource;
|
||||||
|
|
|
@ -644,7 +644,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
return browserInfo.mobile && AppInfo.enableAppLayouts && screen.availWidth <= 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPortraitShape() {
|
function getPortraitShape() {
|
||||||
|
@ -899,7 +899,7 @@
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: getPortraitShape(),
|
shape: getPortraitShape(),
|
||||||
showTitle: false,
|
showTitle: true,
|
||||||
centerText: true,
|
centerText: true,
|
||||||
lazy: true
|
lazy: true
|
||||||
});
|
});
|
||||||
|
|
|
@ -3260,6 +3260,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var img = elem.querySelector('img');
|
var img = elem.querySelector('img');
|
||||||
|
img.onload = function () {
|
||||||
|
if (img.src.indexOf('empty.png') == -1) {
|
||||||
|
img.classList.add('loaded');
|
||||||
|
}
|
||||||
|
};
|
||||||
ImageLoader.lazyImage(img, url);
|
ImageLoader.lazyImage(img, url);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -763,10 +763,9 @@
|
||||||
curr.addEventListener('click', onCardClick);
|
curr.addEventListener('click', onCardClick);
|
||||||
|
|
||||||
if (AppInfo.isTouchPreferred) {
|
if (AppInfo.isTouchPreferred) {
|
||||||
|
|
||||||
curr.removeEventListener('contextmenu', disableEvent);
|
curr.removeEventListener('contextmenu', disableEvent);
|
||||||
curr.addEventListener('contextmenu', disableEvent);
|
curr.addEventListener('contextmenu', disableEvent);
|
||||||
//this.off('contextmenu', onContextMenu);
|
|
||||||
//this.on('contextmenu', onContextMenu);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
curr.removeEventListener('contextmenu', onContextMenu);
|
curr.removeEventListener('contextmenu', onContextMenu);
|
||||||
|
@ -820,6 +819,7 @@
|
||||||
hammertime.on('press', onTapHold);
|
hammertime.on('press', onTapHold);
|
||||||
hammertime.on('pressup', onTapHoldUp);
|
hammertime.on('pressup', onTapHoldUp);
|
||||||
});
|
});
|
||||||
|
|
||||||
showTapHoldHelp(element);
|
showTapHoldHelp(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -863,9 +863,16 @@
|
||||||
|
|
||||||
showSelections(card);
|
showSelections(card);
|
||||||
|
|
||||||
|
if (s.stopPropagation) {
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function onTapHoldUp(e) {
|
function onTapHoldUp(e) {
|
||||||
|
|
|
@ -272,7 +272,7 @@
|
||||||
|
|
||||||
var userAtTop = showUserAtTop();
|
var userAtTop = showUserAtTop();
|
||||||
|
|
||||||
var homeHref = window.ApiClient ? 'index.html' : 'selectserver.html';
|
var homeHref = window.ApiClient ? 'index.html' : 'selectserver.html?showuser=1';
|
||||||
|
|
||||||
var hasUserImage = user.imageUrl && AppInfo.enableUserImage;
|
var hasUserImage = user.imageUrl && AppInfo.enableUserImage;
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@
|
||||||
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(event, this);" href="mysync.html"><iron-icon icon="sync" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
|
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(event, this);" href="mysync.html"><iron-icon icon="sync" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
|
||||||
|
|
||||||
if (Dashboard.isConnectMode()) {
|
if (Dashboard.isConnectMode()) {
|
||||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(event, this);" href="selectserver.html"><iron-icon icon="wifi" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
|
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(event, this);" href="selectserver.html?showuser=1"><iron-icon icon="wifi" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showUserAtTop()) {
|
if (showUserAtTop()) {
|
||||||
|
@ -790,7 +790,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pageClassOn('pageinit', 'page', function () {
|
pageClassOn('pagebeforeshow', 'page', function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
|
|
|
@ -845,7 +845,7 @@
|
||||||
|
|
||||||
if (firstItem.MediaType === "Video") {
|
if (firstItem.MediaType === "Video") {
|
||||||
|
|
||||||
Dashboard.showModalLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.startPositionTicks || firstItem.MediaType !== 'Video' || !AppSettings.enableCinemaMode()) {
|
if (options.startPositionTicks || firstItem.MediaType !== 'Video' || !AppSettings.enableCinemaMode()) {
|
||||||
|
@ -1064,7 +1064,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.IsPlaceHolder) {
|
if (item.IsPlaceHolder) {
|
||||||
Dashboard.hideModalLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
MediaController.showPlaybackInfoErrorMessage('PlaceHolder');
|
MediaController.showPlaybackInfoErrorMessage('PlaceHolder');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1073,7 +1073,7 @@
|
||||||
|
|
||||||
if (item.MediaType == 'Video' && AppSettings.enableAutomaticBitrateDetection() && (new Date().getTime() - (self.lastBitrateDetections[bitrateDetectionKey] || 0)) > 300000) {
|
if (item.MediaType == 'Video' && AppSettings.enableAutomaticBitrateDetection() && (new Date().getTime() - (self.lastBitrateDetections[bitrateDetectionKey] || 0)) > 300000) {
|
||||||
|
|
||||||
Dashboard.showModalLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
ApiClient.detectBitrate().then(function (bitrate) {
|
ApiClient.detectBitrate().then(function (bitrate) {
|
||||||
Logger.log('Max bitrate auto detected to ' + bitrate);
|
Logger.log('Max bitrate auto detected to ' + bitrate);
|
||||||
|
@ -1096,7 +1096,7 @@
|
||||||
|
|
||||||
if (item.MediaType === "Video") {
|
if (item.MediaType === "Video") {
|
||||||
|
|
||||||
Dashboard.showModalLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaController.getPlaybackInfo(item.Id, deviceProfile, startPosition).then(function (playbackInfoResult) {
|
MediaController.getPlaybackInfo(item.Id, deviceProfile, startPosition).then(function (playbackInfoResult) {
|
||||||
|
@ -1122,7 +1122,7 @@
|
||||||
callback(mediaSource);
|
callback(mediaSource);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Dashboard.hideModalLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
MediaController.showPlaybackInfoErrorMessage('NoCompatibleStream');
|
MediaController.showPlaybackInfoErrorMessage('NoCompatibleStream');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1140,7 +1140,7 @@
|
||||||
|
|
||||||
function playInternalPostMediaSourceSelection(item, mediaSource, startPosition, callback) {
|
function playInternalPostMediaSourceSelection(item, mediaSource, startPosition, callback) {
|
||||||
|
|
||||||
Dashboard.hideModalLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
|
|
||||||
self.currentMediaSource = mediaSource;
|
self.currentMediaSource = mediaSource;
|
||||||
self.currentItem = item;
|
self.currentItem = item;
|
||||||
|
|
|
@ -334,24 +334,24 @@
|
||||||
|
|
||||||
function updatePageStyle(page) {
|
function updatePageStyle(page) {
|
||||||
|
|
||||||
if (ConnectionManager.isLoggedIntoConnect()) {
|
if (getParameterByName('showuser') == '1') {
|
||||||
$(page).addClass('libraryPage').addClass('noSecondaryNavPage').removeClass('standalonePage');
|
$(page).addClass('libraryPage').addClass('noSecondaryNavPage').removeClass('standalonePage');
|
||||||
} else {
|
} else {
|
||||||
$(page).removeClass('libraryPage').removeClass('noSecondaryNavPage').addClass('standalonePage');
|
$(page).removeClass('libraryPage').removeClass('noSecondaryNavPage').addClass('standalonePage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).on('pageinit pagebeforeshow', "#selectServerPage", function () {
|
pageIdOn('pagebeforeshow', "selectServerPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
updatePageStyle(page);
|
updatePageStyle(page);
|
||||||
|
});
|
||||||
|
|
||||||
}).on('pageshow', "#selectServerPage", function () {
|
pageIdOn('pageshow', "selectServerPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
loadPage(page);
|
loadPage(page);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
})();
|
})();
|
|
@ -1757,7 +1757,7 @@ var AppInfo = {};
|
||||||
|
|
||||||
function initRequire() {
|
function initRequire() {
|
||||||
|
|
||||||
var urlArgs = "v=" + window.dashboardVersion;
|
var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate());
|
||||||
|
|
||||||
var paths = {
|
var paths = {
|
||||||
velocity: "bower_components/velocity/velocity.min",
|
velocity: "bower_components/velocity/velocity.min",
|
||||||
|
@ -2209,7 +2209,7 @@ var AppInfo = {};
|
||||||
postInitDependencies.push('scripts/nowplayingbar');
|
postInitDependencies.push('scripts/nowplayingbar');
|
||||||
}
|
}
|
||||||
|
|
||||||
//postInitDependencies.push('components/testermessage');
|
postInitDependencies.push('components/testermessage');
|
||||||
|
|
||||||
require(postInitDependencies);
|
require(postInitDependencies);
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<title>Emby</title>
|
<title>Emby</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="selectServerPage" data-role="page" class="page libraryPage noSecondaryNavPage" data-theme="b" data-require="scripts/selectserver,paper-fab,paper-item-body,paper-icon-item">
|
<div id="selectServerPage" data-role="page" class="page noSecondaryNavPage standalonePage" data-theme="b" data-require="scripts/selectserver,paper-fab,paper-item-body,paper-icon-item">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue