mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
move completely to fetch
This commit is contained in:
parent
ee899a7332
commit
9932bc3eb5
168 changed files with 948 additions and 945 deletions
|
@ -68,8 +68,9 @@
|
|||
|
||||
if (promise == null) {
|
||||
|
||||
promise = self.getUser(self.getCurrentUserId()).fail(function () {
|
||||
promise = self.getUser(self.getCurrentUserId()).catch(function (err) {
|
||||
currentUserPromise = null;
|
||||
throw err;
|
||||
});
|
||||
|
||||
currentUserPromise = promise;
|
||||
|
@ -123,7 +124,7 @@
|
|||
name = name.split('&').join('-');
|
||||
name = name.split('?').join('-');
|
||||
|
||||
var val = HttpClient.param({ name: name });
|
||||
var val = paramsToString({ name: name });
|
||||
return val.substring(val.indexOf('=') + 1).replace("'", '%27');
|
||||
};
|
||||
|
||||
|
@ -188,27 +189,35 @@
|
|||
throw new Error("Request cannot be null");
|
||||
}
|
||||
|
||||
if (includeAuthorization !== false) {
|
||||
|
||||
request.headers = request.headers || {};
|
||||
self.setRequestHeaders(request.headers);
|
||||
}
|
||||
|
||||
if (self.enableAutomaticNetworking === false || request.type != "GET") {
|
||||
logger.log('Requesting url without automatic networking: ' + request.url);
|
||||
return HttpClient.send(request).fail(onRequestFail);
|
||||
}
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
self.ajaxWithFailover(request, deferred, true);
|
||||
return deferred.promise();
|
||||
return self.fetch(request, includeAuthorization);
|
||||
};
|
||||
|
||||
function getFetchPromise(request) {
|
||||
return fetch(request.url, {
|
||||
headers: request.headers,
|
||||
|
||||
var headers = request.headers || {};
|
||||
|
||||
if (request.dataType == 'json') {
|
||||
headers.accept = 'application/json';
|
||||
}
|
||||
|
||||
var fetchRequest = {
|
||||
headers: headers,
|
||||
method: request.type
|
||||
});
|
||||
};
|
||||
|
||||
if (request.data) {
|
||||
|
||||
if (typeof request.data === 'string') {
|
||||
fetchRequest.body = request.data;
|
||||
}
|
||||
}
|
||||
|
||||
if (request.contentType) {
|
||||
|
||||
headers['Content-Type'] = request.contentType;
|
||||
}
|
||||
|
||||
return fetch(request.url, fetchRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -220,52 +229,51 @@
|
|||
throw new Error("Request cannot be null");
|
||||
}
|
||||
|
||||
request.headers = request.headers || {};
|
||||
|
||||
if (includeAuthorization !== false) {
|
||||
|
||||
request.headers = request.headers || {};
|
||||
self.setRequestHeaders(request.headers);
|
||||
}
|
||||
|
||||
if (self.enableAutomaticNetworking === false || request.type != "GET") {
|
||||
logger.log('Requesting url without automatic networking: ' + request.url);
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
return getFetchPromise(request).then(function (response) {
|
||||
|
||||
getFetchPromise(request).then(function (response) {
|
||||
if (response.status < 400) {
|
||||
|
||||
if (response.status < 400) {
|
||||
resolve(response);
|
||||
if (request.dataType == 'json' || request.headers.accept == 'application/json') {
|
||||
return response.json();
|
||||
} else {
|
||||
onFetchFail(request.url, response);
|
||||
reject();
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
onFetchFail(request.url, response);
|
||||
return Promise.reject(response);
|
||||
}
|
||||
|
||||
}, function () {
|
||||
onFetchFail(request.url, {});
|
||||
reject();
|
||||
});
|
||||
}, function () {
|
||||
onFetchFail(request.url, {});
|
||||
return Promise.reject({});
|
||||
});
|
||||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
self.fetchWithFailover(request, resolve, reject, true);
|
||||
});
|
||||
return self.fetchWithFailover(request, true);
|
||||
};
|
||||
|
||||
self.fetchJSON = function (url, includeAuthorization) {
|
||||
self.getJSON = function (url, includeAuthorization) {
|
||||
|
||||
return self.fetch({
|
||||
|
||||
url: url,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
headers: {
|
||||
accept: 'application/json'
|
||||
}
|
||||
|
||||
}, includeAuthorization).then(function (response) {
|
||||
return response.json();
|
||||
});
|
||||
}, includeAuthorization);
|
||||
};
|
||||
|
||||
function switchConnectionMode(connectionMode) {
|
||||
|
@ -303,15 +311,15 @@
|
|||
|
||||
var timeout = connectionMode == MediaBrowser.ConnectionMode.Local ? 7000 : 15000;
|
||||
|
||||
HttpClient.send({
|
||||
fetch(url + "/system/info/public", {
|
||||
|
||||
type: "GET",
|
||||
url: url + "/system/info/public",
|
||||
dataType: "json",
|
||||
method: 'GET',
|
||||
accept: 'application/json'
|
||||
|
||||
timeout: timeout
|
||||
// Commenting this out since the fetch api doesn't have a timeout option yet
|
||||
//timeout: timeout
|
||||
|
||||
}).done(function () {
|
||||
}).then(function () {
|
||||
|
||||
logger.log("Reconnect succeeded to " + url);
|
||||
|
||||
|
@ -320,7 +328,7 @@
|
|||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
logger.log("Reconnect attempt failed to " + url);
|
||||
|
||||
|
@ -347,19 +355,24 @@
|
|||
return deferred.promise();
|
||||
}
|
||||
|
||||
self.fetchWithFailover = function (request, resolve, reject, enableReconnection) {
|
||||
self.fetchWithFailover = function (request, enableReconnection) {
|
||||
|
||||
logger.log("Requesting " + request.url);
|
||||
|
||||
request.timeout = 30000;
|
||||
|
||||
getFetchPromise(request).then(function (response) {
|
||||
return getFetchPromise(request).then(function (response) {
|
||||
|
||||
if (response.status < 400) {
|
||||
resolve(response);
|
||||
|
||||
if (request.dataType == 'json' || request.headers.accept == 'application/json') {
|
||||
return response.json();
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
onFetchFail(request.url, response);
|
||||
reject();
|
||||
return Promise.reject(response);
|
||||
}
|
||||
|
||||
}, function () {
|
||||
|
@ -373,18 +386,18 @@
|
|||
|
||||
var previousServerAddress = self.serverAddress();
|
||||
|
||||
tryReconnect().done(function () {
|
||||
tryReconnect().then(function () {
|
||||
|
||||
logger.log("Reconnect succeesed");
|
||||
request.url = request.url.replace(previousServerAddress, self.serverAddress());
|
||||
|
||||
self.fetchWithFailover(request, resolve, reject, false);
|
||||
self.fetchWithFailover(request, false);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
logger.log("Reconnect failed");
|
||||
onFetchFail(request.url, {});
|
||||
reject();
|
||||
return Promise.reject({});
|
||||
|
||||
});
|
||||
} else {
|
||||
|
@ -392,55 +405,7 @@
|
|||
logger.log("Reporting request failure");
|
||||
|
||||
onFetchFail(request.url, {});
|
||||
reject();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
self.ajaxWithFailover = function (request, deferred, enableReconnection) {
|
||||
|
||||
logger.log("Requesting " + request.url);
|
||||
|
||||
request.timeout = 30000;
|
||||
|
||||
HttpClient.send(request).done(function (response) {
|
||||
|
||||
deferred.resolve(response, 0);
|
||||
|
||||
}).fail(function (e, textStatus) {
|
||||
|
||||
logger.log("Request failed with textStatus " + textStatus + " to " + request.url);
|
||||
|
||||
var statusCode = parseInt(e.status || '0');
|
||||
var isUserErrorCode = statusCode >= 400 && statusCode < 500;
|
||||
|
||||
// http://api.jquery.com/jQuery.ajax/
|
||||
if (enableReconnection && !isUserErrorCode) {
|
||||
|
||||
logger.log("Attempting reconnection");
|
||||
|
||||
var previousServerAddress = self.serverAddress();
|
||||
|
||||
tryReconnect().done(function () {
|
||||
|
||||
logger.log("Reconnect succeesed");
|
||||
request.url = request.url.replace(previousServerAddress, self.serverAddress());
|
||||
|
||||
self.ajaxWithFailover(request, deferred, false);
|
||||
|
||||
}).fail(function () {
|
||||
|
||||
logger.log("Reconnect failed");
|
||||
onRetryRequestFail(request);
|
||||
deferred.reject();
|
||||
|
||||
});
|
||||
} else {
|
||||
|
||||
logger.log("Reporting request failure");
|
||||
|
||||
onRetryRequestFail(request);
|
||||
deferred.reject();
|
||||
return Promise.reject({});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -453,14 +418,20 @@
|
|||
});
|
||||
};
|
||||
|
||||
self.getJSON = function (url) {
|
||||
function paramsToString(params) {
|
||||
|
||||
return self.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
var values = [];
|
||||
|
||||
for (var key in params) {
|
||||
|
||||
var value = params[key];
|
||||
|
||||
if (value) {
|
||||
values.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
|
||||
}
|
||||
}
|
||||
return values.join('&');
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an api url based on a handler name and query string parameters
|
||||
|
@ -490,7 +461,7 @@
|
|||
url += name;
|
||||
|
||||
if (params) {
|
||||
params = HttpClient.param(params);
|
||||
params = paramsToString(params);
|
||||
if (params) {
|
||||
url += "?" + params;
|
||||
}
|
||||
|
@ -632,7 +603,7 @@
|
|||
|
||||
var now = new Date().getTime();
|
||||
|
||||
self.get(url).done(function () {
|
||||
self.get(url).then(function () {
|
||||
|
||||
var responseTimeSeconds = (new Date().getTime() - now) / 1000;
|
||||
var bytesPerSecond = byteSize / responseTimeSeconds;
|
||||
|
@ -640,7 +611,7 @@
|
|||
|
||||
deferred.resolveWith(null, [bitrate]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
@ -653,24 +624,24 @@
|
|||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
// First try a small amount so that we don't hang up their mobile connection
|
||||
self.getDownloadSpeed(1000000).done(function (bitrate) {
|
||||
self.getDownloadSpeed(1000000).then(function (bitrate) {
|
||||
|
||||
if (bitrate < 1000000) {
|
||||
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
|
||||
} else {
|
||||
|
||||
// If that produced a fairly high speed, try again with a larger size to get a more accurate result
|
||||
self.getDownloadSpeed(2400000).done(function (bitrate) {
|
||||
self.getDownloadSpeed(2400000).then(function (bitrate) {
|
||||
|
||||
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
}
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
@ -692,7 +663,7 @@
|
|||
self.getUrl("Users/" + userId + "/Items/" + itemId) :
|
||||
self.getUrl("Items/" + itemId);
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -706,7 +677,7 @@
|
|||
|
||||
var url = self.getUrl("Users/" + userId + "/Items/Root");
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
self.getNotificationSummary = function (userId) {
|
||||
|
@ -770,7 +741,8 @@
|
|||
return self.ajax({
|
||||
type: "POST",
|
||||
url: url
|
||||
}).always(done);
|
||||
|
||||
}).then(done, done);
|
||||
}
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
@ -1215,7 +1187,7 @@
|
|||
|
||||
var url = self.getUrl("System/Info");
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1225,7 +1197,7 @@
|
|||
|
||||
var url = self.getUrl("System/Info/Public");
|
||||
|
||||
return self.fetchJSON(url, false);
|
||||
return self.getJSON(url, false);
|
||||
};
|
||||
|
||||
self.getInstantMixFromItem = function (itemId, options) {
|
||||
|
@ -1249,7 +1221,7 @@
|
|||
client: app
|
||||
});
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
self.updateDisplayPreferences = function (id, obj, userId, app) {
|
||||
|
@ -1543,7 +1515,7 @@
|
|||
|
||||
var url = self.getUrl("System/Configuration");
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -2027,11 +1999,11 @@
|
|||
url: url,
|
||||
data: data,
|
||||
contentType: "image/" + file.name.substring(file.name.lastIndexOf('.') + 1)
|
||||
}).done(function (result) {
|
||||
}).then(function (result) {
|
||||
|
||||
deferred.resolveWith(null, [result]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.reject();
|
||||
});
|
||||
};
|
||||
|
@ -2087,11 +2059,11 @@
|
|||
url: url,
|
||||
data: data,
|
||||
contentType: "image/" + file.name.substring(file.name.lastIndexOf('.') + 1)
|
||||
}).done(function (result) {
|
||||
}).then(function (result) {
|
||||
|
||||
deferred.resolveWith(null, [result]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.reject();
|
||||
});
|
||||
};
|
||||
|
@ -2185,7 +2157,7 @@
|
|||
|
||||
var url = self.getUrl("Genres/" + self.encodeName(name), options);
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
self.getMusicGenre = function (name, userId) {
|
||||
|
@ -2202,7 +2174,7 @@
|
|||
|
||||
var url = self.getUrl("MusicGenres/" + self.encodeName(name), options);
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
self.getGameGenre = function (name, userId) {
|
||||
|
@ -2219,7 +2191,7 @@
|
|||
|
||||
var url = self.getUrl("GameGenres/" + self.encodeName(name), options);
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -2239,7 +2211,7 @@
|
|||
|
||||
var url = self.getUrl("Artists/" + self.encodeName(name), options);
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -2485,7 +2457,7 @@
|
|||
dataType: "json",
|
||||
contentType: "application/json"
|
||||
|
||||
}).done(function (result) {
|
||||
}).then(function (result) {
|
||||
|
||||
if (self.onAuthenticated) {
|
||||
self.onAuthenticated(self, result);
|
||||
|
@ -2493,7 +2465,7 @@
|
|||
|
||||
deferred.resolveWith(null, [result]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
@ -2528,11 +2500,11 @@
|
|||
currentPassword: CryptoJS.SHA1(currentPassword).toString(),
|
||||
newPassword: CryptoJS.SHA1(newPassword).toString()
|
||||
}
|
||||
}).done(function (result) {
|
||||
}).then(function (result) {
|
||||
|
||||
deferred.resolveWith(null, [result]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
@ -2565,11 +2537,11 @@
|
|||
data: {
|
||||
newPassword: CryptoJS.SHA1(newPassword).toString()
|
||||
}
|
||||
}).done(function (result) {
|
||||
}).then(function (result) {
|
||||
|
||||
deferred.resolveWith(null, [result]);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
@ -2862,7 +2834,7 @@
|
|||
url = self.getUrl("Items", options);
|
||||
}
|
||||
|
||||
return self.fetchJSON(url);
|
||||
return self.getJSON(url);
|
||||
};
|
||||
|
||||
self.getChannels = function (query) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue