1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update promises

This commit is contained in:
Luke Pulverenti 2015-11-29 17:39:13 -05:00
parent 3e1fd2ec8a
commit cc53792556
2 changed files with 264 additions and 313 deletions

View file

@ -400,30 +400,29 @@
function ensureConnectUser(credentials) { function ensureConnectUser(credentials) {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
if (connectUser && connectUser.Id == credentials.ConnectUserId) { if (connectUser && connectUser.Id == credentials.ConnectUserId) {
deferred.resolveWith(null, [[]]); resolve();
} }
else if (credentials.ConnectUserId && credentials.ConnectAccessToken) { else if (credentials.ConnectUserId && credentials.ConnectAccessToken) {
connectUser = null; connectUser = null;
getConnectUser(credentials.ConnectUserId, credentials.ConnectAccessToken).then(function (user) { getConnectUser(credentials.ConnectUserId, credentials.ConnectAccessToken).then(function (user) {
onConnectUserSignIn(user); onConnectUserSignIn(user);
deferred.resolveWith(null, [[]]); resolve();
}, function () { }, function () {
deferred.resolveWith(null, [[]]); resolve();
}); });
} else { } else {
deferred.resolveWith(null, [[]]); resolve();
} }
});
return deferred.promise();
} }
function getConnectUser(userId, accessToken) { function getConnectUser(userId, accessToken) {
@ -487,56 +486,54 @@
function validateAuthentication(server, connectionMode) { function validateAuthentication(server, connectionMode) {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
var url = MediaBrowser.ServerInfo.getServerAddress(server, connectionMode); var url = MediaBrowser.ServerInfo.getServerAddress(server, connectionMode);
ajax({ ajax({
type: "GET", type: "GET",
url: getEmbyServerUrl(url, "System/Info"), url: getEmbyServerUrl(url, "System/Info"),
dataType: "json", dataType: "json",
headers: { headers: {
"X-MediaBrowser-Token": server.AccessToken "X-MediaBrowser-Token": server.AccessToken
} }
}).then(function (systemInfo) { }).then(function (systemInfo) {
updateServerInfo(server, systemInfo); updateServerInfo(server, systemInfo);
if (server.UserId) { if (server.UserId) {
ajax({ ajax({
type: "GET", type: "GET",
url: getEmbyServerUrl(url, "users/" + server.UserId), url: getEmbyServerUrl(url, "users/" + server.UserId),
dataType: "json", dataType: "json",
headers: { headers: {
"X-MediaBrowser-Token": server.AccessToken "X-MediaBrowser-Token": server.AccessToken
} }
}).then(function (user) { }).then(function (user) {
onLocalUserSignIn(user); onLocalUserSignIn(user);
deferred.resolveWith(null, [[]]); resolve();
}, function () { }, function () {
server.UserId = null; server.UserId = null;
server.AccessToken = null; server.AccessToken = null;
deferred.resolveWith(null, [[]]); resolve();
}); });
} }
}, function () { }, function () {
server.UserId = null;
server.AccessToken = null;
deferred.resolveWith(null, [[]]);
server.UserId = null;
server.AccessToken = null;
resolve();
});
}); });
return deferred.promise();
} }
function getImageUrl(localUser) { function getImageUrl(localUser) {
@ -569,46 +566,44 @@
self.user = function (apiClient) { self.user = function (apiClient) {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
var localUser; var localUser;
function onLocalUserDone(e) { function onLocalUserDone(e) {
var image = getImageUrl(localUser); var image = getImageUrl(localUser);
deferred.resolveWith(null, [ resolve({
{ localUser: localUser,
localUser: localUser, name: connectUser ? connectUser.Name : (localUser ? localUser.Name : null),
name: connectUser ? connectUser.Name : (localUser ? localUser.Name : null), canManageServer: localUser ? localUser.Policy.IsAdministrator : false,
canManageServer: localUser ? localUser.Policy.IsAdministrator : false, imageUrl: image.url,
imageUrl: image.url, supportsImageParams: image.supportsParams
supportsImageParams: image.supportsParams });
}]);
}
function onEnsureConnectUserDone() {
if (apiClient && apiClient.getCurrentUserId()) {
apiClient.getCurrentUser().then(function (u) {
localUser = u;
onLocalUserDone();
}, onLocalUserDone);
} else {
onLocalUserDone();
} }
}
var credentials = credentialProvider.credentials(); function onEnsureConnectUserDone() {
if (credentials.ConnectUserId && credentials.ConnectAccessToken && !(apiClient && apiClient.getCurrentUserId())) { if (apiClient && apiClient.getCurrentUserId()) {
ensureConnectUser(credentials).then(onEnsureConnectUserDone, onEnsureConnectUserDone); apiClient.getCurrentUser().then(function (u) {
} else { localUser = u;
onEnsureConnectUserDone(); onLocalUserDone();
}
return deferred.promise(); }, onLocalUserDone);
} else {
onLocalUserDone();
}
}
var credentials = credentialProvider.credentials();
if (credentials.ConnectUserId && credentials.ConnectAccessToken && !(apiClient && apiClient.getCurrentUserId())) {
ensureConnectUser(credentials).then(onEnsureConnectUserDone, onEnsureConnectUserDone);
} else {
onEnsureConnectUserDone();
}
});
}; };
self.isLoggedIntoConnect = function () { self.isLoggedIntoConnect = function () {
@ -634,7 +629,7 @@
} }
} }
return DeferredBuilder.when(promises).then(function () { return Promise.all(promises).then(function () {
var credentials = credentialProvider.credentials(); var credentials = credentialProvider.credentials();
@ -692,46 +687,45 @@
logger.log('Begin getConnectServers'); logger.log('Begin getConnectServers');
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
if (!credentials.ConnectAccessToken || !credentials.ConnectUserId) { if (!credentials.ConnectAccessToken || !credentials.ConnectUserId) {
deferred.resolveWith(null, [[]]); resolve([]);
return deferred.promise(); return;
}
var url = "https://connect.emby.media/service/servers?userId=" + credentials.ConnectUserId;
ajax({
type: "GET",
url: url,
dataType: "json",
headers: {
"X-Application": appName + "/" + appVersion,
"X-Connect-UserToken": credentials.ConnectAccessToken
} }
}).then(function (servers) { var url = "https://connect.emby.media/service/servers?userId=" + credentials.ConnectUserId;
ajax({
type: "GET",
url: url,
dataType: "json",
headers: {
"X-Application": appName + "/" + appVersion,
"X-Connect-UserToken": credentials.ConnectAccessToken
}
}).then(function (servers) {
servers = servers.map(function (i) {
return {
ExchangeToken: i.AccessKey,
ConnectServerId: i.Id,
Id: i.SystemId,
Name: i.Name,
RemoteAddress: i.Url,
LocalAddress: i.LocalAddress,
UserLinkType: (i.UserType || '').toLowerCase() == "guest" ? "Guest" : "LinkedUser"
};
});
resolve(servers);
}, function () {
resolve([]);
servers = servers.map(function (i) {
return {
ExchangeToken: i.AccessKey,
ConnectServerId: i.Id,
Id: i.SystemId,
Name: i.Name,
RemoteAddress: i.Url,
LocalAddress: i.LocalAddress,
UserLinkType: (i.UserType || '').toLowerCase() == "guest" ? "Guest" : "LinkedUser"
};
}); });
deferred.resolveWith(null, [servers]);
}, function () {
deferred.resolveWith(null, [[]]);
}); });
return deferred.promise();
} }
self.getSavedServers = function () { self.getSavedServers = function () {
@ -754,34 +748,27 @@
// Clone the array // Clone the array
var credentials = credentialProvider.credentials(); var credentials = credentialProvider.credentials();
var deferred = DeferredBuilder.Deferred(); return Promise.all([getConnectServers(credentials), findServers()]).then(function (responses) {
var connectServersPromise = getConnectServers(credentials); var connectServers = responses[0];
var findServersPromise = findServers(); var foundServers = responses[1];
connectServersPromise.then(function (connectServers) { var servers = credentials.Servers.slice(0);
mergeServers(servers, foundServers);
mergeServers(servers, connectServers);
findServersPromise.then(function (foundServers) { servers = filterServers(servers, connectServers);
var servers = credentials.Servers.slice(0); servers.sort(function (a, b) {
mergeServers(servers, foundServers); return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0);
mergeServers(servers, connectServers);
servers = filterServers(servers, connectServers);
servers.sort(function (a, b) {
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0);
});
credentials.Servers = servers;
credentialProvider.credentials(credentials);
deferred.resolveWith(null, [servers]);
}); });
});
return deferred.promise(); credentials.Servers = servers;
credentialProvider.credentials(credentials);
return servers;
});
}; };
function filterServers(servers, connectServers) { function filterServers(servers, connectServers) {
@ -803,30 +790,30 @@
function findServers() { function findServers() {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
require(['serverdiscovery'], function () { require(['serverdiscovery'], function () {
ServerDiscovery.findServers(1000).then(function (foundServers) { ServerDiscovery.findServers(1000).then(function (foundServers) {
var servers = foundServers.map(function (foundServer) { var servers = foundServers.map(function (foundServer) {
var info = { var info = {
Id: foundServer.Id, Id: foundServer.Id,
LocalAddress: foundServer.Address, LocalAddress: foundServer.Address,
Name: foundServer.Name, Name: foundServer.Name,
ManualAddress: convertEndpointAddressToManualAddress(foundServer), ManualAddress: convertEndpointAddressToManualAddress(foundServer),
DateLastLocalConnection: new Date().getTime() DateLastLocalConnection: new Date().getTime()
}; };
info.LastConnectionMode = info.ManualAddress ? MediaBrowser.ConnectionMode.Manual : MediaBrowser.ConnectionMode.Local; info.LastConnectionMode = info.ManualAddress ? MediaBrowser.ConnectionMode.Manual : MediaBrowser.ConnectionMode.Local;
return info; return info;
});
resolve(servers);
}); });
deferred.resolveWith(null, [servers]);
});
});
}); });
return deferred.promise();
} }
function convertEndpointAddressToManualAddress(info) { function convertEndpointAddressToManualAddress(info) {
@ -854,18 +841,16 @@
logger.log('Begin connect'); logger.log('Begin connect');
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
self.getAvailableServers().then(function (servers) { self.getAvailableServers().then(function (servers) {
self.connectToServers(servers).then(function (result) { self.connectToServers(servers).then(function (result) {
deferred.resolveWith(null, [result]);
resolve(result);
});
}); });
}); });
return deferred.promise();
}; };
self.getOffineResult = function () { self.getOffineResult = function () {
@ -1160,117 +1145,109 @@
self.loginToConnect = function (username, password) { self.loginToConnect = function (username, password) {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
if (!username) { if (!username) {
deferred.reject(); reject();
return deferred.promise(); return;
} }
if (!password) { if (!password) {
deferred.reject(); reject();
return deferred.promise(); return;
} }
require(['connectservice'], function () { require(['connectservice'], function () {
var md5 = self.getConnectPasswordHash(password); var md5 = self.getConnectPasswordHash(password);
ajax({ ajax({
type: "POST", type: "POST",
url: "https://connect.emby.media/service/user/authenticate", url: "https://connect.emby.media/service/user/authenticate",
data: { data: {
nameOrEmail: username, nameOrEmail: username,
password: md5 password: md5
}, },
dataType: "json", dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: { headers: {
"X-Application": appName + "/" + appVersion "X-Application": appName + "/" + appVersion
} }
}).then(function (result) { }).then(function (result) {
var credentials = credentialProvider.credentials(); var credentials = credentialProvider.credentials();
credentials.ConnectAccessToken = result.AccessToken; credentials.ConnectAccessToken = result.AccessToken;
credentials.ConnectUserId = result.User.Id; credentials.ConnectUserId = result.User.Id;
credentialProvider.credentials(credentials); credentialProvider.credentials(credentials);
onConnectUserSignIn(result.User); onConnectUserSignIn(result.User);
deferred.resolveWith(null, [result]); resolve(result);
}, function () { }, reject);
deferred.reject();
}); });
}); });
return deferred.promise();
}; };
self.signupForConnect = function (email, username, password, passwordConfirm) { self.signupForConnect = function (email, username, password, passwordConfirm) {
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
if (!email) { if (!email) {
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]); reject({ errorCode: 'invalidinput' });
return deferred.promise(); return;
} }
if (!username) { if (!username) {
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]); reject({ errorCode: 'invalidinput' });
return deferred.promise(); return;
} }
if (!password) { if (!password) {
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]); reject({ errorCode: 'invalidinput' });
return deferred.promise(); return;
} }
if (!passwordConfirm) { if (!passwordConfirm) {
deferred.rejectWith(null, [{ errorCode: 'passwordmatch' }]); reject({ errorCode: 'passwordmatch' });
return deferred.promise(); return;
} }
if (password != passwordConfirm) { if (password != passwordConfirm) {
deferred.rejectWith(null, [{ errorCode: 'passwordmatch' }]); reject({ errorCode: 'passwordmatch' });
return deferred.promise(); return;
} }
require(['connectservice'], function () { require(['connectservice'], function () {
var md5 = self.getConnectPasswordHash(password); var md5 = self.getConnectPasswordHash(password);
ajax({ ajax({
type: "POST", type: "POST",
url: "https://connect.emby.media/service/register", url: "https://connect.emby.media/service/register",
data: { data: {
email: email, email: email,
userName: username, userName: username,
password: md5 password: md5
}, },
dataType: "json", dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: { headers: {
"X-Application": appName + "/" + appVersion, "X-Application": appName + "/" + appVersion,
"X-CONNECT-TOKEN": "CONNECT-REGISTER" "X-CONNECT-TOKEN": "CONNECT-REGISTER"
} }
}).then(function (result) { }).then(resolve, function (e) {
deferred.resolve(null, []); try {
}, function (e) { var result = JSON.parse(e.responseText);
try { reject({ errorCode: result.Status });
} catch (err) {
var result = JSON.parse(e.responseText); reject({});
}
deferred.rejectWith(null, [{ errorCode: result.Status }]); });
} catch (err) {
deferred.rejectWith(null, [{}]);
}
}); });
}); });
return deferred.promise();
}; };
self.getConnectPasswordHash = function (password) { self.getConnectPasswordHash = function (password) {
@ -1333,45 +1310,44 @@
}); });
server = server.length ? server[0] : null; server = server.length ? server[0] : null;
var deferred = DeferredBuilder.Deferred(); return new Promise(function (resolve, reject) {
function onDone() { function onDone() {
var credentials = credentialProvider.credentials(); var credentials = credentialProvider.credentials();
credentials.Servers = credentials.Servers.filter(function (s) { credentials.Servers = credentials.Servers.filter(function (s) {
return s.Id != serverId; return s.Id != serverId;
}); });
credentialProvider.credentials(credentials); credentialProvider.credentials(credentials);
deferred.resolve(); resolve();
}
if (!server.ConnectServerId) {
onDone();
return deferred.promise();
}
var connectToken = self.connectToken();
var connectUserId = self.connectUserId();
if (!connectToken || !connectUserId) {
onDone();
return deferred.promise();
}
var url = "https://connect.emby.media/service/serverAuthorizations?serverId=" + server.ConnectServerId + "&userId=" + connectUserId;
ajax({
type: "DELETE",
url: url,
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
} }
}).then(onDone, onDone); if (!server.ConnectServerId) {
onDone();
return;
}
return deferred.promise(); var connectToken = self.connectToken();
var connectUserId = self.connectUserId();
if (!connectToken || !connectUserId) {
onDone();
return;
}
var url = "https://connect.emby.media/service/serverAuthorizations?serverId=" + server.ConnectServerId + "&userId=" + connectUserId;
ajax({
type: "DELETE",
url: url,
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
}).then(onDone, onDone);
});
}; };
self.rejectServer = function (serverId) { self.rejectServer = function (serverId) {
@ -1428,49 +1404,36 @@
self.getRegistrationInfo = function (feature, apiClient) { self.getRegistrationInfo = function (feature, apiClient) {
var deferred = DeferredBuilder.Deferred(); return self.getAvailableServers().then(function (servers) {
self.getAvailableServers().then(function (servers) {
var matchedServers = servers.filter(function (s) { var matchedServers = servers.filter(function (s) {
return stringEqualsIgnoreCase(s.Id, apiClient.serverInfo().Id); return stringEqualsIgnoreCase(s.Id, apiClient.serverInfo().Id);
}); });
if (!matchedServers.length) { if (!matchedServers.length) {
deferred.resolveWith(null, [{}]); return {};
return;
} }
var match = matchedServers[0]; var match = matchedServers[0];
if (!match.DateLastLocalConnection) { if (!match.DateLastLocalConnection) {
ApiClient.getJSON(ApiClient.getUrl('System/Endpoint')).then(function (info) { return ApiClient.getJSON(ApiClient.getUrl('System/Endpoint')).then(function (info) {
if (info.IsInNetwork) { if (info.IsInNetwork) {
updateDateLastLocalConnection(match.Id); updateDateLastLocalConnection(match.Id);
onLocalCheckSuccess(feature, apiClient, deferred); return apiClient.getRegistrationInfo(feature);
} else { } else {
deferred.resolveWith(null, [{}]); return {};
} }
}, function () {
deferred.resolveWith(null, [{}]);
}); });
return; } else {
return apiClient.getRegistrationInfo(feature);
} }
onLocalCheckSuccess(feature, apiClient, deferred);
}, function () {
deferred.reject();
}); });
return deferred.promise();
}; };
function updateDateLastLocalConnection(serverId) { function updateDateLastLocalConnection(serverId) {
@ -1489,17 +1452,6 @@
} }
} }
function onLocalCheckSuccess(feature, apiClient, deferred) {
apiClient.getRegistrationInfo(feature).then(function (result) {
deferred.resolveWith(null, [result]);
}, function () {
deferred.reject();
});
}
return self; return self;
}; };

View file

@ -1076,7 +1076,6 @@
Dashboard.showModalLoadingMsg(); Dashboard.showModalLoadingMsg();
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);
self.lastBitrateDetections[bitrateDetectionKey] = new Date().getTime(); self.lastBitrateDetections[bitrateDetectionKey] = new Date().getTime();
AppSettings.maxStreamingBitrate(bitrate); AppSettings.maxStreamingBitrate(bitrate);