1
0
Fork 0
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:
Luke Pulverenti 2015-11-28 03:07:44 -05:00
parent ee899a7332
commit 9932bc3eb5
168 changed files with 948 additions and 945 deletions

View file

@ -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) {