auto-organize fix

This commit is contained in:
Luke Pulverenti 2015-06-08 17:32:20 -04:00
parent bbfda77868
commit f64e0c7c53
54 changed files with 838 additions and 666 deletions

View file

@ -239,7 +239,7 @@
logger.log("Reconnect attempt failed to " + url);
if (currentRetryCount <= 6) {
if (currentRetryCount <= 5) {
var newConnectionMode = switchConnectionMode(connectionMode);

View file

@ -18,6 +18,23 @@
Manual: 2
};
globalScope.MediaBrowser.ServerInfo = {
getServerAddress: function (server, mode) {
switch (mode) {
case MediaBrowser.ConnectionMode.Local:
return server.LocalAddress;
case MediaBrowser.ConnectionMode.Manual:
return server.ManualAddress;
case MediaBrowser.ConnectionMode.Remote:
return server.RemoteAddress;
default:
return server.ManualAddress || server.LocalAddress || server.RemoteAddress;
}
}
};
globalScope.MediaBrowser.ConnectionManager = function (logger, credentialProvider, appName, appVersion, deviceName, deviceId, capabilities) {
logger.log('Begin MediaBrowser.ConnectionManager constructor');
@ -109,12 +126,27 @@
return credentialProvider.credentials().ConnectAccessToken;
};
self.getLastUsedServer = function () {
var servers = credentialProvider.credentials().Servers;
servers.sort(function (a, b) {
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0);
});
if (!servers.length) {
return null;
}
return servers[0];
};
self.getLastUsedApiClient = function () {
var servers = credentialProvider.credentials().Servers;
servers.sort(function (a, b) {
return b.DateLastAccessed - a.DateLastAccessed;
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0);
});
if (!servers.length) {
@ -515,6 +547,7 @@
self.logout = function () {
console.log('begin connectionManager loguot');
var promises = [];
for (var i = 0, length = apiClients.length; i < length; i++) {
@ -646,7 +679,7 @@
servers = filterServers(servers, connectServers);
servers.sort(function (a, b) {
return b.DateLastAccessed - a.DateLastAccessed;
return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0);
});
credentials.Servers = servers;
@ -680,23 +713,27 @@
function findServers() {
var deferred = DeferredBuilder.Deferred();
ServerDiscovery.findServers(2500).done(function (foundServers) {
var servers = foundServers.map(function (foundServer) {
require(['serverdiscovery'], function () {
ServerDiscovery.findServers(2500).done(function (foundServers) {
var info = {
Id: foundServer.Id,
LocalAddress: foundServer.Address,
Name: foundServer.Name,
ManualAddress: convertEndpointAddressToManualAddress(foundServer),
DateLastLocalConnection: new Date().getTime()
};
var servers = foundServers.map(function (foundServer) {
info.LastConnectionMode = info.ManualAddress ? MediaBrowser.ConnectionMode.Manual : MediaBrowser.ConnectionMode.Local;
var info = {
Id: foundServer.Id,
LocalAddress: foundServer.Address,
Name: foundServer.Name,
ManualAddress: convertEndpointAddressToManualAddress(foundServer),
DateLastLocalConnection: new Date().getTime()
};
return info;
info.LastConnectionMode = info.ManualAddress ? MediaBrowser.ConnectionMode.Manual : MediaBrowser.ConnectionMode.Local;
return info;
});
deferred.resolveWith(null, [servers]);
});
deferred.resolveWith(null, [servers]);
});
return deferred.promise();
}
@ -804,6 +841,14 @@
function beginWakeServer(server) {
require(['wakeonlan'], function () {
var infos = server.WakeOnLanInfos || [];
for (var i = 0, length = infos.length; i < length; i++) {
WakeOnLan.send(infos[i]);
}
});
}
self.connectToServer = function (server, options) {
@ -819,11 +864,7 @@
if (tests.indexOf(MediaBrowser.ConnectionMode.Local) == -1) { tests.push(MediaBrowser.ConnectionMode.Local); }
if (tests.indexOf(MediaBrowser.ConnectionMode.Remote) == -1) { tests.push(MediaBrowser.ConnectionMode.Remote); }
var sendWakeOnLan = server.WakeOnLanInfos && server.WakeOnLanInfos.length;
if (sendWakeOnLan) {
beginWakeServer(server);
}
beginWakeServer(server);
var wakeOnLanSendTime = new Date().getTime();
@ -900,7 +941,6 @@
function onSuccessfulConnection(server, systemInfo, connectionMode, options, deferred) {
var credentials = credentialProvider.credentials();
if (credentials.ConnectAccessToken) {
ensureConnectUser(credentials).done(function () {
@ -964,8 +1004,8 @@
function normalizeAddress(address) {
// attempt to correct bad input
address = address.trim();
// attempt to correct bad input
address = address.trim();
if (address.toLowerCase().indexOf('http') != 0) {
address = "http://" + address;
@ -1017,43 +1057,53 @@
self.loginToConnect = function (username, password) {
var deferred = DeferredBuilder.Deferred();
if (!username) {
var deferred = DeferredBuilder.Deferred();
deferred.reject();
return deferred.promise();
}
if (!password) {
var deferred = DeferredBuilder.Deferred();
deferred.reject();
return deferred.promise();
}
var md5 = self.getConnectPasswordHash(password);
require(['connectservice'], function () {
return AjaxApi.ajax({
type: "POST",
url: "https://connect.mediabrowser.tv/service/user/authenticate",
data: {
nameOrEmail: username,
password: md5
},
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: {
"X-Application": appName + "/" + appVersion
}
var md5 = self.getConnectPasswordHash(password);
}).done(function (result) {
AjaxApi.ajax({
type: "POST",
url: "https://connect.mediabrowser.tv/service/user/authenticate",
data: {
nameOrEmail: username,
password: md5
},
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: {
"X-Application": appName + "/" + appVersion
}
var credentials = credentialProvider.credentials();
}).done(function (result) {
credentials.ConnectAccessToken = result.AccessToken;
credentials.ConnectUserId = result.User.Id;
var credentials = credentialProvider.credentials();
credentialProvider.credentials(credentials);
credentials.ConnectAccessToken = result.AccessToken;
credentials.ConnectUserId = result.User.Id;
onConnectUserSignIn(result.User);
credentialProvider.credentials(credentials);
onConnectUserSignIn(result.User);
deferred.resolveWith(null, [result]);
}).fail(function () {
deferred.reject();
});
});
return deferred.promise();
};
self.getConnectPasswordHash = function (password) {

View file

@ -7,15 +7,21 @@
globalScope.MediaBrowser.CredentialProvider = function () {
var self = this;
var credentials;
var credentials = null;
var key = 'servercredentials3';
function ensure() {
credentials = credentials || JSON.parse(appStorage.getItem(key) || '{}');
credentials.Servers = credentials.Servers || credentials.servers || [];
if (!credentials) {
var json = appStorage.getItem(key) || '{}';
credentials.servers = null;
console.log('credentials initialized with: ' + json);
credentials = JSON.parse(json);
credentials.Servers = credentials.Servers || credentials.servers || [];
credentials.servers = null;
}
}
function get() {
@ -65,6 +71,8 @@
// Merge the data
existing.DateLastAccessed = Math.max(existing.DateLastAccessed || 0, server.DateLastAccessed || 0);
existing.UserLinkType = server.UserLinkType;
if (server.AccessToken) {
existing.AccessToken = server.AccessToken;
existing.UserId = server.UserId;
@ -101,21 +109,4 @@
};
};
globalScope.MediaBrowser.ServerInfo = {
getServerAddress: function (server, mode) {
switch (mode) {
case MediaBrowser.ConnectionMode.Local:
return server.LocalAddress;
case MediaBrowser.ConnectionMode.Manual:
return server.ManualAddress;
case MediaBrowser.ConnectionMode.Remote:
return server.RemoteAddress;
default:
return server.ManualAddress || server.LocalAddress || server.RemoteAddress;
}
}
};
})(window, window.JSON);

View file

@ -1,26 +0,0 @@
(function (globalScope, navigator) {
function networkStatus() {
var self = this;
self.isNetworkAvailable = function () {
var online = navigator.onLine;
if (online == null) {
online = true;
}
return online;
};
self.isAnyLocalNetworkAvailable = function () {
return self.isNetworkAvailable();
};
}
globalScope.NetworkStatus = new networkStatus();
})(window, window.navigator);

View file

@ -0,0 +1,14 @@
(function (globalScope) {
function send(info) {
var deferred = DeferredBuilder.Deferred();
deferred.resolve();
return deferred.promise();
}
globalScope.WakeOnLan = {
send: send
};
})(window);

View file

@ -30,62 +30,6 @@
//initAjax();
}
var baseAjaxMethod;
var currentId = 0;
function getNewRequestId() {
var id = currentId++;
return id.toString();
}
function initAjax() {
baseAjaxMethod = AjaxApi.ajax;
AjaxApi.ajax = sendRequest;
}
function sendRequest(request) {
if (request.data || request.contentType || request.dataType != 'json') {
return baseAjaxMethod(request);
}
var deferred = DeferredBuilder.Deferred();
var id = getNewRequestId();
request.headers = request.headers || {};
if (request.dataType == 'json') {
request.headers.accept = 'application/json';
}
var requestHeaders = [];
for (name in request.headers) {
requestHeaders.push(name + "=" + request.headers[name]);
}
ApiClientBridge.sendRequest(request.url, request.type, requestHeaders.join('|||||'), "window.AndroidAjax.onResponse", id);
Events.on(AndroidAjax, 'response' + id, function (e, status, response) {
Events.off(AndroidAjax, 'response' + id);
response = decodeURIComponent(response);
if (status >= 400) {
alert(status);
deferred.reject();
}
else if (request.dataType == 'json') {
deferred.resolveWith(null, [JSON.parse(response)]);
}
else {
deferred.resolveWith(null, [response]);
}
});
return deferred.promise();
}
Events.on(ConnectionManager.credentialProvider(), 'credentialsupdated', updateCredentials);
updateCredentials();

View file

@ -0,0 +1,84 @@
(function (globalScope, localStorage, sessionStorage) {
function myStore(defaultObject) {
var self = this;
self.localData = {};
var isDefaultAvailable;
if (defaultObject) {
try {
defaultObject.setItem('_test', '0');
isDefaultAvailable = true;
} catch (e) {
}
}
self.setItem = function (name, value) {
if (isDefaultAvailable) {
defaultObject.setItem(name, value);
} else {
self.localData[name] = value;
}
};
self.getItem = function (name) {
if (isDefaultAvailable) {
return defaultObject.getItem(name);
}
return self.localData[name];
};
self.removeItem = function (name) {
if (isDefaultAvailable) {
defaultObject.removeItem(name);
} else {
self.localData[name] = null;
}
};
}
function preferencesStore() {
var self = this;
self.setItem = function (name, value) {
AndroidSharedPreferences.set(name, value);
};
self.getItem = function (name) {
return AndroidSharedPreferences.get(name);
};
self.removeItem = function (name) {
AndroidSharedPreferences.remove(name);
};
function migrateKey(key) {
var json = localStorage.getItem(key);
if (json) {
self.setItem(key, json);
localStorage.removeItem(key);
}
}
function migrate() {
migrateKey('servercredentials3');
}
migrate();
}
globalScope.appStorage = new preferencesStore();
globalScope.sessionStore = new myStore(sessionStorage);
})(window, window.localStorage, window.sessionStorage);

24
dashboard-ui/thirdparty/cordova/back.js vendored Normal file
View file

@ -0,0 +1,24 @@
(function () {
Dashboard.exit = function () {
if (navigator.app && navigator.app.exitApp) {
navigator.app.exitApp();
} else {
Dashboard.logout();
}
};
function onBackKeyDown(e) {
if (Dashboard.exitOnBack()) {
e.preventDefault();
Dashboard.exit();
}
else {
history.back();
}
}
document.addEventListener("backbutton", onBackKeyDown, false);
})();

View file

@ -1,14 +1,15 @@
(function () {
var PlayerName = "Chromecast";
var ApplicationID = "2D4B1DA3";
var currentWebAppSession;
var currentDevice;
function chromecastPlayer() {
var self = this;
var PlayerName = "Chromecast";
var ApplicationID = "2D4B1DA3";
var currentWebAppSession;
var currentDevice;
var currentDeviceId;
// MediaController needs this
self.name = PlayerName;
@ -301,9 +302,7 @@
self.getTargets = function () {
var manager = ConnectSDK.discoveryManager;
return manager.getDeviceList().filter(function (d) {
return ConnectHelper.getDeviceList().filter(function (d) {
return isChromecast(d.getModelName()) || isChromecast(d.getFriendlyName());
@ -469,6 +468,7 @@
MediaController.setActivePlayer(PlayerName, convertDeviceToTarget(device));
currentDevice = device;
currentDeviceId = device.getId();
$(castPlayer).trigger('connect');
@ -584,7 +584,7 @@
var deferred = $.Deferred();
var device = ConnectSDK.discoveryManager.getDeviceList().filter(function (d) {
var device = ConnectHelper.getDeviceList().filter(function (d) {
return d.getId() == target.id;
})[0];
@ -629,22 +629,31 @@
$(MediaController).on('playerchange', function (e, newPlayer, newTarget) {
if (currentDevice) {
if (newTarget.id != currentDevice.getId()) {
if (newTarget.id != currentDeviceId) {
if (currentWebAppSession) {
console.log('Disconnecting from chromecast');
currentDevice.disconnect();
//currentDevice.disconnect();
currentDevice = null;
currentDeviceId = null;
}
}
}
});
function onResume() {
var deviceId = currentDeviceId;
if (deviceId) {
self.tryPair({
id: deviceId
});
}
}
document.addEventListener("resume", onResume, false);
}
function initSdk() {
MediaController.registerPlayer(new chromecastPlayer());
}
initSdk();
MediaController.registerPlayer(new chromecastPlayer());
})();

View file

@ -12,11 +12,25 @@
// new ConnectSDK.CapabilityFilter(["MediaPlayer.Display.Video", "MediaControl.Pause"])
//]);
manager.on('devicelistchanged', onDeviceListChanged);
manager.startDiscovery();
requirejs(['thirdparty/cordova/chromecast', 'thirdparty/cordova/generaldevice']);
}
function onDeviceListChanged(list) {
}
function getDeviceList() {
return ConnectSDK.discoveryManager.getDeviceList();
}
window.ConnectHelper = {
getDeviceList: getDeviceList
};
Dashboard.ready(initSdk);
})();

View file

@ -400,9 +400,7 @@
self.getTargets = function () {
var manager = ConnectSDK.discoveryManager;
return manager.getDeviceList().filter(function (d) {
return ConnectHelper.getDeviceList().filter(function (d) {
return isValid(d);
@ -506,7 +504,7 @@
var deferred = $.Deferred();
var device = ConnectSDK.discoveryManager.getDeviceList().filter(function (d) {
var device = ConnectHelper.getDeviceList().filter(function (d) {
return d.getId() == target.id;
})[0];

View file

@ -0,0 +1,28 @@
(function () {
// Handle the volume down button
//
function onVolumeDownKeyDown() {
MediaController.volumeDown();
}
// Handle the volume up button
//
function onVolumeUpKeyDown() {
MediaController.volumeUp();
}
$(MediaController).on('playerchange', function (e, newPlayer, newTarget) {
document.removeEventListener("volumedownbutton", onVolumeDownKeyDown, false);
document.removeEventListener("volumeupbutton", onVolumeUpKeyDown, false);
if (!newPlayer.localPlayer) {
document.addEventListener("volumedownbutton", onVolumeDownKeyDown, false);
document.addEventListener("volumeupbutton", onVolumeUpKeyDown, false);
}
});
})();

View file

@ -0,0 +1,87 @@
(function (globalScope) {
function getResultCode(result) {
if (result != null && result.resultCode != null) {
return result.resultCode;
}
return result;
}
function closeSocket(socketId) {
try {
chrome.sockets.udp.close(socketId);
} catch (err) {
}
}
function stringToArrayBuffer(string) {
// UTF-16LE
var buf = new ArrayBuffer(string.length * 2);
var bufView = new Uint16Array(buf);
for (var i = 0, strLen = string.length; i < strLen; i++) {
bufView[i] = string.charCodeAt(i);
}
return buf;
}
// https://github.com/agnat/node_wake_on_lan/blob/master/wake_on_lan.js
globalScope.WakeOnLan = {
send: function (info) {
var deferred = DeferredBuilder.Deferred();
var chrome = globalScope.chrome;
if (!chrome) {
deferred.resolve();
return deferred.promise();
}
var port = info.Port || 9;
//chrome.sockets.udp.create(function (createInfo) {
// if (!createInfo) {
// console.log('create fail');
// return;
// }
// if (!createInfo.socketId) {
// console.log('create fail');
// return;
// }
// var socketId = createInfo.socketId;
// console.log('chrome.sockets.udp.bind');
// chrome.sockets.udp.bind(createInfo.socketId, '0.0.0.0', 0, function (bindResult) {
// if (getResultCode(bindResult) != 0) {
// console.log('bind fail: ' + bindResult);
// deferred.resolve();
// closeSocket(socketId);
// }
// var data = stringToArrayBuffer('who is EmbyServer?');
// console.log('chrome.sockets.udp.send');
// chrome.sockets.udp.send(createInfo.socketId, data, '255.255.255.255', port, function (sendResult) {
// deferred.resolve();
// closeSocket(socketId);
// });
// });
//});
deferred.resolve();
return deferred.promise();
}
};
})(window);

View file

@ -10,5 +10,4 @@
return 'file://' + path;
}
};
})();