Remove callbacks from UI in favour of promises
This commit is contained in:
parent
41ddb35458
commit
1c9b904d1a
37
app/ui.js
37
app/ui.js
|
@ -39,22 +39,20 @@ const UI = {
|
||||||
reconnect_callback: null,
|
reconnect_callback: null,
|
||||||
reconnect_password: null,
|
reconnect_password: null,
|
||||||
|
|
||||||
prime(callback) {
|
prime() {
|
||||||
|
return WebUtil.initSettings().then(() => {
|
||||||
if (document.readyState === "interactive" || document.readyState === "complete") {
|
if (document.readyState === "interactive" || document.readyState === "complete") {
|
||||||
UI.load(callback);
|
return UI.start();
|
||||||
} else {
|
|
||||||
document.addEventListener('DOMContentLoaded', UI.load.bind(UI, callback));
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
// Setup rfb object, load settings from browser storage, then call
|
return new Promise((resolve, reject) => {
|
||||||
// UI.init to setup the UI/menus
|
document.addEventListener('DOMContentLoaded', () => UI.start().then(resolve).catch(reject));
|
||||||
load(callback) {
|
});
|
||||||
WebUtil.initSettings(UI.start, callback);
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// Render default UI and initialize settings menu
|
// Render default UI and initialize settings menu
|
||||||
start(callback) {
|
start() {
|
||||||
|
|
||||||
UI.initSettings();
|
UI.initSettings();
|
||||||
|
|
||||||
|
@ -105,9 +103,7 @@ const UI = {
|
||||||
UI.openConnectPanel();
|
UI.openConnectPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof callback === "function") {
|
return Promise.resolve(UI.rfb);
|
||||||
callback(UI.rfb);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
initFullscreen() {
|
initFullscreen() {
|
||||||
|
@ -1646,18 +1642,13 @@ const UI = {
|
||||||
// Set up translations
|
// Set up translations
|
||||||
const LINGUAS = ["cs", "de", "el", "es", "ko", "nl", "pl", "sv", "tr", "zh_CN", "zh_TW"];
|
const LINGUAS = ["cs", "de", "el", "es", "ko", "nl", "pl", "sv", "tr", "zh_CN", "zh_TW"];
|
||||||
l10n.setup(LINGUAS);
|
l10n.setup(LINGUAS);
|
||||||
if (l10n.language !== "en" && l10n.dictionary === undefined) {
|
if (l10n.language === "en" || l10n.dictionary !== undefined) {
|
||||||
WebUtil.fetchJSON('app/locale/' + l10n.language + '.json', (translations) => {
|
|
||||||
l10n.dictionary = translations;
|
|
||||||
|
|
||||||
// wait for translations to load before loading the UI
|
|
||||||
UI.prime();
|
UI.prime();
|
||||||
}, (err) => {
|
|
||||||
Log.Error("Failed to load translations: " + err);
|
|
||||||
UI.prime();
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
UI.prime();
|
WebUtil.fetchJSON('app/locale/' + l10n.language + '.json')
|
||||||
|
.then((translations) => { l10n.dictionary = translations; })
|
||||||
|
.catch(err => Log.Error("Failed to load translations: " + err))
|
||||||
|
.then(UI.prime);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default UI;
|
export default UI;
|
||||||
|
|
|
@ -114,22 +114,14 @@ export function eraseCookie(name) {
|
||||||
|
|
||||||
let settings = {};
|
let settings = {};
|
||||||
|
|
||||||
export function initSettings(callback /*, ...callbackArgs */) {
|
export function initSettings() {
|
||||||
"use strict";
|
if (!window.chrome || !window.chrome.storage) {
|
||||||
const callbackArgs = Array.prototype.slice.call(arguments, 1);
|
|
||||||
if (window.chrome && window.chrome.storage) {
|
|
||||||
window.chrome.storage.sync.get((cfg) => {
|
|
||||||
settings = cfg;
|
|
||||||
if (callback) {
|
|
||||||
callback.apply(this, callbackArgs);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
settings = {};
|
settings = {};
|
||||||
if (callback) {
|
return Promise.resolve();
|
||||||
callback.apply(this, callbackArgs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new Promise(resolve => window.chrome.storage.sync.get(resolve))
|
||||||
|
.then((cfg) => { settings = cfg; });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the settings cache, but do not write to permanent storage
|
// Update the settings cache, but do not write to permanent storage
|
||||||
|
@ -218,7 +210,8 @@ export function injectParamIfMissing(path, param, value) {
|
||||||
// IE11 support or polyfill promises and fetch in IE11.
|
// IE11 support or polyfill promises and fetch in IE11.
|
||||||
// resolve will receive an object on success, while reject
|
// resolve will receive an object on success, while reject
|
||||||
// will receive either an event or an error on failure.
|
// will receive either an event or an error on failure.
|
||||||
export function fetchJSON(path, resolve, reject) {
|
export function fetchJSON(path) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
// NB: IE11 doesn't support JSON as a responseType
|
// NB: IE11 doesn't support JSON as a responseType
|
||||||
const req = new XMLHttpRequest();
|
const req = new XMLHttpRequest();
|
||||||
req.open('GET', path);
|
req.open('GET', path);
|
||||||
|
@ -242,4 +235,5 @@ export function fetchJSON(path, resolve, reject) {
|
||||||
req.ontimeout = evt => reject(new Error("XHR timed out while trying to load '" + path + "'"));
|
req.ontimeout = evt => reject(new Error("XHR timed out while trying to load '" + path + "'"));
|
||||||
|
|
||||||
req.send();
|
req.send();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ describe('WebUtil', function () {
|
||||||
window.localStorage.getItem = sinon.stub();
|
window.localStorage.getItem = sinon.stub();
|
||||||
window.localStorage.removeItem = sinon.stub();
|
window.localStorage.removeItem = sinon.stub();
|
||||||
|
|
||||||
WebUtil.initSettings();
|
return WebUtil.initSettings();
|
||||||
});
|
});
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
Object.defineProperty(window, "localStorage", origLocalStorage);
|
Object.defineProperty(window, "localStorage", origLocalStorage);
|
||||||
|
@ -132,7 +132,7 @@ describe('WebUtil', function () {
|
||||||
settings = {};
|
settings = {};
|
||||||
csSandbox.spy(window.chrome.storage.sync, 'set');
|
csSandbox.spy(window.chrome.storage.sync, 'set');
|
||||||
csSandbox.spy(window.chrome.storage.sync, 'remove');
|
csSandbox.spy(window.chrome.storage.sync, 'remove');
|
||||||
WebUtil.initSettings();
|
return WebUtil.initSettings();
|
||||||
});
|
});
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
csSandbox.restore();
|
csSandbox.restore();
|
||||||
|
|
Loading…
Reference in New Issue