diff --git a/src/js/ConfigStorage.js b/src/js/ConfigStorage.js
index 682f4da078..2fd4ca7f6a 100644
--- a/src/js/ConfigStorage.js
+++ b/src/js/ConfigStorage.js
@@ -4,47 +4,37 @@
// localStorage deals with strings, not objects, so the objects have been serialized.
const ConfigStorage = {
// key can be one string, or array of strings
- get: function(key, callback) {
+ get: function(key) {
+ let result = {};
if (Array.isArray(key)) {
- let obj = {};
key.forEach(function (element) {
try {
- obj = {...obj, ...JSON.parse(window.localStorage.getItem(element))};
+ result = {...obj, ...JSON.parse(window.localStorage.getItem(element))};
} catch (e) {
// is okay
}
});
- callback(obj);
} else {
const keyValue = window.localStorage.getItem(key);
if (keyValue) {
- let obj = {};
try {
- obj = JSON.parse(keyValue);
+ result = JSON.parse(keyValue);
} catch (e) {
// It's fine if we fail that parse
}
- callback(obj);
- } else {
- callback({});
}
}
+ return result;
},
// set takes an object like {'userLanguageSelect':'DEFAULT'}
- set: function(input, callback) {
+ set: function(input) {
Object.keys(input).forEach(function (element) {
const tmpObj = {};
tmpObj[element] = input[element];
window.localStorage.setItem(element, JSON.stringify(tmpObj));
});
- if (callback) {
- callback();
- }
},
- remove: function(item, callback) {
+ remove: function(item) {
window.localStorage.removeItem(item);
- if (callback) {
- callback();
- }
}
};
diff --git a/src/js/FirmwareCache.js b/src/js/FirmwareCache.js
index 26b7e4c57b..de5ac398a7 100644
--- a/src/js/FirmwareCache.js
+++ b/src/js/FirmwareCache.js
@@ -51,12 +51,11 @@ let FirmwareCache = (function () {
* @param {Function} callback
*/
function load(callback) {
- ConfigStorage.get(CACHEKEY, obj => {
- let entries = typeof obj === "object" && obj.hasOwnProperty(CACHEKEY)
- ? obj[CACHEKEY]
- : [];
- callback(entries);
- });
+ const obj = ConfigStorage.get(CACHEKEY);
+ let entries = typeof obj === "object" && obj.hasOwnProperty(CACHEKEY)
+ ? obj[CACHEKEY]
+ : [];
+ callback(entries);
}
return {
@@ -76,18 +75,14 @@ let FirmwareCache = (function () {
}
let key = oldest[0];
let cacheKey = withCachePrefix(key);
- ConfigStorage.get(cacheKey, obj => {
- /** @type {CacheItem} */
- let cached = typeof obj === "object" && obj.hasOwnProperty(cacheKey)
- ? obj[cacheKey]
- : null;
- if (cached === null) {
- return;
- }
- ConfigStorage.remove(cacheKey, () => {
- onRemoveFromCache(cached.release);
- });
- });
+ const obj = ConfigStorage.get(cacheKey);
+ /** @type {CacheItem} */
+ const cached = typeof obj === "object" && obj.hasOwnProperty(cacheKey) ? obj[cacheKey] : null;
+ if (cached === null) {
+ return undefined;
+ }
+ ConfigStorage.remove(cacheKey);
+ onRemoveFromCache(cached.release);
return oldest;
};
@@ -143,9 +138,8 @@ let FirmwareCache = (function () {
release: release,
hexdata: hexdata,
};
- ConfigStorage.set(obj, () => {
- onPutToCache(release);
- });
+ ConfigStorage.set(obj);
+ onPutToCache(release);
}
/**
@@ -163,13 +157,9 @@ let FirmwareCache = (function () {
return;
}
let cacheKey = withCachePrefix(key);
- ConfigStorage.get(cacheKey, obj => {
- /** @type {CacheItem} */
- let cached = typeof obj === "object" && obj.hasOwnProperty(cacheKey)
- ? obj[cacheKey]
- : null;
- callback(cached);
- });
+ const obj = ConfigStorage.get(cacheKey);
+ const cached = typeof obj === "object" && obj.hasOwnProperty(cacheKey) ? obj[cacheKey] : null;
+ callback(cached);
}
/**
@@ -184,19 +174,19 @@ let FirmwareCache = (function () {
for (let key of journal.keys()) {
cacheKeys.push(withCachePrefix(key));
}
- ConfigStorage.get(cacheKeys, obj => {
- if (typeof obj !== "object") {
- return;
- }
- for (let cacheKey of cacheKeys) {
- if (obj.hasOwnProperty(cacheKey)) {
- /** @type {CacheItem} */
- let item = obj[cacheKey];
- onRemoveFromCache(item.release);
- }
+ const obj = ConfigStorage.get(cacheKeys);
+ if (typeof obj !== "object") {
+ return;
+ }
+ console.log(obj.entries());
+ for (let cacheKey of cacheKeys) {
+ if (obj.hasOwnProperty(cacheKey)) {
+ /** @type {CacheItem} */
+ let item = obj[cacheKey];
+ onRemoveFromCache(item.release);
}
- ConfigStorage.remove(cacheKeys);
- });
+ }
+ ConfigStorage.remove(cacheKeys);
journal.clear();
JournalStorage.persist(journal.toJSON());
}
diff --git a/src/js/cordova_startup.js b/src/js/cordova_startup.js
index 5650df1e44..0950804d2c 100644
--- a/src/js/cordova_startup.js
+++ b/src/js/cordova_startup.js
@@ -22,29 +22,27 @@ const cordovaUI = {
if (screenWidth > 575 && screenHeight > 575) {
self.canChangeUI = false;
}
- ConfigStorage.get('cordovaForceComputerUI', function (result) {
- if (result.cordovaForceComputerUI === undefined) {
- if ((orientation === 'landscape' && screenHeight <= 575)
- || (orientation === 'portrait' && screenWidth <= 575)) {
- ConfigStorage.set({'cordovaForceComputerUI': false});
- } else {
- ConfigStorage.set({'cordovaForceComputerUI': true});
- }
+ const result = ConfigStorage.get('cordovaForceComputerUI');
+ if (result.cordovaForceComputerUI === undefined) {
+ if ((orientation === 'landscape' && screenHeight <= 575)
+ || (orientation === 'portrait' && screenWidth <= 575)) {
+ ConfigStorage.set({'cordovaForceComputerUI': false});
+ } else {
+ ConfigStorage.set({'cordovaForceComputerUI': true});
}
- });
+ }
self.set();
},
set: function() {
const self = this;
- ConfigStorage.get('cordovaForceComputerUI', function (result) {
- if (result.cordovaForceComputerUI) {
- window.screen.orientation.lock('landscape');
- $('body').css('zoom', self.uiZoom);
- } else {
- window.screen.orientation.lock('portrait');
- $('body').css('zoom', 1);
- }
- });
+ const result = ConfigStorage.get('cordovaForceComputerUI');
+ if (result.cordovaForceComputerUI) {
+ window.screen.orientation.lock('landscape');
+ $('body').css('zoom', self.uiZoom);
+ } else {
+ window.screen.orientation.lock('portrait');
+ $('body').css('zoom', 1);
+ }
},
};
diff --git a/src/js/gui.js b/src/js/gui.js
index d67dc5174f..ccb6f6c711 100644
--- a/src/js/gui.js
+++ b/src/js/gui.js
@@ -387,13 +387,12 @@ GuiControl.prototype.content_ready = function (callback) {
};
GuiControl.prototype.selectDefaultTabWhenConnected = function() {
- ConfigStorage.get(['rememberLastTab', 'lastTab'], function (result) {
- if (result.rememberLastTab && result.lastTab) {
- $(`#tabs ul.mode-connected .${result.lastTab} a`).click();
- } else {
- $('#tabs ul.mode-connected .tab_setup a').click();
- }
- });
+ const result = ConfigStorage.get(['rememberLastTab', 'lastTab']);
+ if (result.rememberLastTab && result.lastTab) {
+ $(`#tabs ul.mode-connected .${result.lastTab} a`).click();
+ } else {
+ $('#tabs ul.mode-connected .tab_setup a').click();
+ }
};
GuiControl.prototype.isNWJS = function () {
diff --git a/src/js/jenkins_loader.js b/src/js/jenkins_loader.js
index 1fe91811a2..4069b6f2f4 100644
--- a/src/js/jenkins_loader.js
+++ b/src/js/jenkins_loader.js
@@ -21,45 +21,44 @@ JenkinsLoader.prototype.loadJobs = function (viewName, callback) {
callback(jobs);
};
- ConfigStorage.get([cacheLastUpdateTag, jobsDataTag], function (result) {
- const jobsDataTimestamp = $.now();
- const cachedJobsData = result[jobsDataTag];
- const cachedJobsLastUpdate = result[cacheLastUpdateTag];
-
- const cachedCallback = () => {
- if (cachedJobsData) {
- GUI.log(i18n.getMessage('buildServerUsingCached', ['jobs']));
- }
+ const result = ConfigStorage.get([cacheLastUpdateTag, jobsDataTag]);
+ const jobsDataTimestamp = $.now();
+ const cachedJobsData = result[jobsDataTag];
+ const cachedJobsLastUpdate = result[cacheLastUpdateTag];
+
+ const cachedCallback = () => {
+ if (cachedJobsData) {
+ GUI.log(i18n.getMessage('buildServerUsingCached', ['jobs']));
+ }
- wrappedCallback(cachedJobsData ? cachedJobsData : []);
- };
+ wrappedCallback(cachedJobsData ? cachedJobsData : []);
+ };
- if (!cachedJobsData || !cachedJobsLastUpdate || jobsDataTimestamp - cachedJobsLastUpdate > self._cacheExpirationPeriod) {
- const url = `${viewUrl}${self._jobsRequest}`;
+ if (!cachedJobsData || !cachedJobsLastUpdate || jobsDataTimestamp - cachedJobsLastUpdate > self._cacheExpirationPeriod) {
+ const url = `${viewUrl}${self._jobsRequest}`;
- $.get(url, jobsInfo => {
- GUI.log(i18n.getMessage('buildServerLoaded', ['jobs']));
+ $.get(url, jobsInfo => {
+ GUI.log(i18n.getMessage('buildServerLoaded', ['jobs']));
- // remove Betaflight prefix, rename Betaflight job to Development
- const jobs = jobsInfo.jobs.map(job => {
- return { title: job.name.replace('Betaflight ', '').replace('Betaflight', 'Development'), name: job.name };
- });
+ // remove Betaflight prefix, rename Betaflight job to Development
+ const jobs = jobsInfo.jobs.map(job => {
+ return { title: job.name.replace('Betaflight ', '').replace('Betaflight', 'Development'), name: job.name };
+ });
- // cache loaded info
- const object = {};
- object[jobsDataTag] = jobs;
- object[cacheLastUpdateTag] = $.now();
- ConfigStorage.set(object);
+ // cache loaded info
+ const object = {};
+ object[jobsDataTag] = jobs;
+ object[cacheLastUpdateTag] = $.now();
+ ConfigStorage.set(object);
- wrappedCallback(jobs);
- }).fail(xhr => {
- GUI.log(i18n.getMessage('buildServerLoadFailed', ['jobs', `HTTP ${xhr.status}`]));
- cachedCallback();
- });
- } else {
+ wrappedCallback(jobs);
+ }).fail(xhr => {
+ GUI.log(i18n.getMessage('buildServerLoadFailed', ['jobs', `HTTP ${xhr.status}`]));
cachedCallback();
- }
- });
+ });
+ } else {
+ cachedCallback();
+ }
};
JenkinsLoader.prototype.loadBuilds = function (jobName, callback) {
@@ -69,49 +68,48 @@ JenkinsLoader.prototype.loadBuilds = function (jobName, callback) {
const buildsDataTag = `${jobUrl}BuildsData`;
const cacheLastUpdateTag = `${jobUrl}BuildsLastUpdate`;
- ConfigStorage.get([cacheLastUpdateTag, buildsDataTag], function (result) {
- const buildsDataTimestamp = $.now();
- const cachedBuildsData = result[buildsDataTag];
- const cachedBuildsLastUpdate = result[cacheLastUpdateTag];
+ const result = ConfigStorage.get([cacheLastUpdateTag, buildsDataTag]);
+ const buildsDataTimestamp = $.now();
+ const cachedBuildsData = result[buildsDataTag];
+ const cachedBuildsLastUpdate = result[cacheLastUpdateTag];
- const cachedCallback = () => {
- if (cachedBuildsData) {
- GUI.log(i18n.getMessage('buildServerUsingCached', [jobName]));
- }
+ const cachedCallback = () => {
+ if (cachedBuildsData) {
+ GUI.log(i18n.getMessage('buildServerUsingCached', [jobName]));
+ }
- self._parseBuilds(jobUrl, jobName, cachedBuildsData ? cachedBuildsData : [], callback);
- };
-
- if (!cachedBuildsData || !cachedBuildsLastUpdate || buildsDataTimestamp - cachedBuildsLastUpdate > self._cacheExpirationPeriod) {
- const url = `${jobUrl}${self._buildsRequest}`;
-
- $.get(url, function (buildsInfo) {
- GUI.log(i18n.getMessage('buildServerLoaded', [jobName]));
-
- // filter successful builds
- const builds = buildsInfo.builds.filter(build => build.result == 'SUCCESS')
- .map(build => ({
- number: build.number,
- artifacts: build.artifacts.map(artifact => artifact.relativePath),
- changes: build.changeSet.items.map(item => `* ${item.msg}`).join('
\n'),
- timestamp: build.timestamp
- }));
-
- // cache loaded info
- const object = {};
- object[buildsDataTag] = builds;
- object[cacheLastUpdateTag] = $.now();
- ConfigStorage.set(object);
-
- self._parseBuilds(jobUrl, jobName, builds, callback);
- }).fail(xhr => {
- GUI.log(i18n.getMessage('buildServerLoadFailed', [jobName, `HTTP ${xhr.status}`]));
- cachedCallback();
- });
- } else {
+ self._parseBuilds(jobUrl, jobName, cachedBuildsData ? cachedBuildsData : [], callback);
+ };
+
+ if (!cachedBuildsData || !cachedBuildsLastUpdate || buildsDataTimestamp - cachedBuildsLastUpdate > self._cacheExpirationPeriod) {
+ const url = `${jobUrl}${self._buildsRequest}`;
+
+ $.get(url, function (buildsInfo) {
+ GUI.log(i18n.getMessage('buildServerLoaded', [jobName]));
+
+ // filter successful builds
+ const builds = buildsInfo.builds.filter(build => build.result == 'SUCCESS')
+ .map(build => ({
+ number: build.number,
+ artifacts: build.artifacts.map(artifact => artifact.relativePath),
+ changes: build.changeSet.items.map(item => `* ${item.msg}`).join('
\n'),
+ timestamp: build.timestamp
+ }));
+
+ // cache loaded info
+ const object = {};
+ object[buildsDataTag] = builds;
+ object[cacheLastUpdateTag] = $.now();
+ ConfigStorage.set(object);
+
+ self._parseBuilds(jobUrl, jobName, builds, callback);
+ }).fail(xhr => {
+ GUI.log(i18n.getMessage('buildServerLoadFailed', [jobName, `HTTP ${xhr.status}`]));
cachedCallback();
- }
- });
+ });
+ } else {
+ cachedCallback();
+ }
};
JenkinsLoader.prototype._parseBuilds = function (jobUrl, jobName, builds, callback) {
diff --git a/src/js/localization.js b/src/js/localization.js
index ff90b78dff..f7f5ee152b 100644
--- a/src/js/localization.js
+++ b/src/js/localization.js
@@ -190,22 +190,16 @@ i18n.localizePage = function(forceReTranslate) {
* returns the current locale to the callback
*/
function getStoredUserLocale(cb) {
+ let userLanguage = 'DEFAULT';
if (typeof ConfigStorage !== 'undefined') {
- ConfigStorage.get('userLanguageSelect', function (result) {
- let userLanguage = 'DEFAULT';
- if (result.userLanguageSelect) {
- userLanguage = result.userLanguageSelect;
- }
- i18n.selectedLanguage = userLanguage;
-
- userLanguage = getValidLocale(userLanguage);
-
- cb(userLanguage);
- });
- } else {
- const userLanguage = getValidLocale('DEFAULT');
- cb(userLanguage);
+ const result = ConfigStorage.get('userLanguageSelect');
+ if (result.userLanguageSelect) {
+ userLanguage = result.userLanguageSelect;
+ }
+ i18n.selectedLanguage = userLanguage;
}
+ userLanguage = getValidLocale(userLanguage);
+ cb(userLanguage);
}
function getValidLocale(userLocale) {
diff --git a/src/js/main.js b/src/js/main.js
index d39dea6139..d4ef3b5787 100644
--- a/src/js/main.js
+++ b/src/js/main.js
@@ -45,13 +45,12 @@ function appReady() {
function checkSetupAnalytics(callback) {
if (!analytics) {
setTimeout(function () {
- ConfigStorage.get(['userId', 'analyticsOptOut', 'checkForConfiguratorUnstableVersions', ], function (result) {
- if (!analytics) {
- setupAnalytics(result);
- }
+ const result = ConfigStorage.get(['userId', 'analyticsOptOut', 'checkForConfiguratorUnstableVersions', ]);
+ if (!analytics) {
+ setupAnalytics(result);
+ }
- callback(analytics);
- });
+ callback(analytics);
});
} else if (callback) {
callback(analytics);
@@ -503,48 +502,45 @@ function startProcess() {
$(this).data('state', state);
});
- ConfigStorage.get('logopen', function (result) {
- if (result.logopen) {
- $("#showlog").trigger('click');
- }
- });
-
- ConfigStorage.get('permanentExpertMode', function (result) {
- const expertModeCheckbox = 'input[name="expertModeCheckbox"]';
- if (result.permanentExpertMode) {
- $(expertModeCheckbox).prop('checked', true);
- }
-
- $(expertModeCheckbox).on("change", () => {
- const checked = $(expertModeCheckbox).is(':checked');
- checkSetupAnalytics(function (analyticsService) {
- analyticsService.setDimension(analyticsService.DIMENSIONS.CONFIGURATOR_EXPERT_MODE, checked ? 'On' : 'Off');
- });
+ let result = ConfigStorage.get('logopen');
+ if (result.logopen) {
+ $("#showlog").trigger('click');
+ }
- if (FC.FEATURE_CONFIG && FC.FEATURE_CONFIG.features !== 0) {
- updateTabList(FC.FEATURE_CONFIG.features);
- }
+ result = ConfigStorage.get('permanentExpertMode');
+ const expertModeCheckbox = 'input[name="expertModeCheckbox"]';
+ if (result.permanentExpertMode) {
+ $(expertModeCheckbox).prop('checked', true);
+ }
- if (GUI.active_tab) {
- TABS[GUI.active_tab]?.expertModeChanged?.(checked);
- }
+ $(expertModeCheckbox).on("change", () => {
+ const checked = $(expertModeCheckbox).is(':checked');
+ checkSetupAnalytics(function (analyticsService) {
+ analyticsService.setDimension(analyticsService.DIMENSIONS.CONFIGURATOR_EXPERT_MODE, checked ? 'On' : 'Off');
});
- $(expertModeCheckbox).trigger("change");
- });
-
- ConfigStorage.get('cliAutoComplete', function (result) {
- CliAutoComplete.setEnabled(typeof result.cliAutoComplete == 'undefined' || result.cliAutoComplete); // On by default
- });
+ if (FC.FEATURE_CONFIG && FC.FEATURE_CONFIG.features !== 0) {
+ updateTabList(FC.FEATURE_CONFIG.features);
+ }
- ConfigStorage.get('darkTheme', function (result) {
- if (result.darkTheme === undefined || typeof result.darkTheme !== "number") {
- // sets dark theme to auto if not manually changed
- setDarkTheme(2);
- } else {
- setDarkTheme(result.darkTheme);
+ if (GUI.active_tab) {
+ TABS[GUI.active_tab]?.expertModeChanged?.(checked);
}
});
+
+ $(expertModeCheckbox).trigger("change");
+
+ result = ConfigStorage.get('cliAutoComplete');
+ CliAutoComplete.setEnabled(typeof result.cliAutoComplete === undefined || result.cliAutoComplete); // On by default
+
+ result = ConfigStorage.get('darkTheme');
+ if (result.darkTheme === undefined || typeof result.darkTheme !== "number") {
+ // sets dark theme to auto if not manually changed
+ setDarkTheme(2);
+ } else {
+ setDarkTheme(result.darkTheme);
+ }
+
if (GUI.isCordova()) {
let darkMode = false;
const checkDarkMode = function() {
@@ -579,52 +575,51 @@ function checkForConfiguratorUpdates() {
}
function notifyOutdatedVersion(releaseData) {
- ConfigStorage.get('checkForConfiguratorUnstableVersions', function (result) {
- let showUnstableReleases = false;
- if (result.checkForConfiguratorUnstableVersions) {
- showUnstableReleases = true;
+ const result = ConfigStorage.get('checkForConfiguratorUnstableVersions');
+ let showUnstableReleases = false;
+ if (result.checkForConfiguratorUnstableVersions) {
+ showUnstableReleases = true;
+ }
+ const versions = releaseData.filter(function (version) {
+ const semVerVersion = semver.parse(version.tag_name);
+ if (semVerVersion && (showUnstableReleases || semVerVersion.prerelease.length === 0)) {
+ return version;
+ } else {
+ return null;
}
- const versions = releaseData.filter(function (version) {
- const semVerVersion = semver.parse(version.tag_name);
- if (semVerVersion && (showUnstableReleases || semVerVersion.prerelease.length === 0)) {
- return version;
- } else {
- return null;
- }
- }).sort(function (v1, v2) {
- try {
- return semver.compare(v2.tag_name, v1.tag_name);
- } catch (e) {
- return false;
- }
- });
-
- if (versions.length > 0) {
- CONFIGURATOR.latestVersion = versions[0].tag_name;
- CONFIGURATOR.latestVersionReleaseUrl = versions[0].html_url;
+ }).sort(function (v1, v2) {
+ try {
+ return semver.compare(v2.tag_name, v1.tag_name);
+ } catch (e) {
+ return false;
}
+ });
- if (semver.lt(CONFIGURATOR.version, CONFIGURATOR.latestVersion)) {
- const message = i18n.getMessage('configuratorUpdateNotice', [CONFIGURATOR.latestVersion, CONFIGURATOR.latestVersionReleaseUrl]);
- GUI.log(message);
+ if (versions.length > 0) {
+ CONFIGURATOR.latestVersion = versions[0].tag_name;
+ CONFIGURATOR.latestVersionReleaseUrl = versions[0].html_url;
+ }
- const dialog = $('.dialogConfiguratorUpdate')[0];
+ if (semver.lt(CONFIGURATOR.version, CONFIGURATOR.latestVersion)) {
+ const message = i18n.getMessage('configuratorUpdateNotice', [CONFIGURATOR.latestVersion, CONFIGURATOR.latestVersionReleaseUrl]);
+ GUI.log(message);
- $('.dialogConfiguratorUpdate-content').html(message);
+ const dialog = $('.dialogConfiguratorUpdate')[0];
- $('.dialogConfiguratorUpdate-closebtn').click(function() {
- dialog.close();
- });
+ $('.dialogConfiguratorUpdate-content').html(message);
- $('.dialogConfiguratorUpdate-websitebtn').click(function() {
- dialog.close();
+ $('.dialogConfiguratorUpdate-closebtn').click(function() {
+ dialog.close();
+ });
- window.open(CONFIGURATOR.latestVersionReleaseUrl, '_blank');
- });
+ $('.dialogConfiguratorUpdate-websitebtn').click(function() {
+ dialog.close();
- dialog.showModal();
- }
- });
+ window.open(CONFIGURATOR.latestVersionReleaseUrl, '_blank');
+ });
+
+ dialog.showModal();
+ }
}
function isExpertModeEnabled() {
diff --git a/src/js/port_handler.js b/src/js/port_handler.js
index 298dffc9a5..c4a6aab2e2 100644
--- a/src/js/port_handler.js
+++ b/src/js/port_handler.js
@@ -160,17 +160,16 @@ PortHandler.detectPort = function(currentPorts) {
currentPorts = self.updatePortSelect(currentPorts);
console.log(`PortHandler - Found: ${JSON.stringify(newPorts)}`);
- ConfigStorage.get('last_used_port', function (result) {
- if (result.last_used_port) {
- if (result.last_used_port.includes('tcp')) {
- self.portPickerElement.val('manual');
- } else if (newPorts.length === 1) {
- self.portPickerElement.val(newPorts[0].path);
- } else if (newPorts.length > 1) {
- self.selectPort(currentPorts);
- }
+ let result = ConfigStorage.get('last_used_port');
+ if (result.last_used_port) {
+ if (result.last_used_port.includes('tcp')) {
+ self.portPickerElement.val('manual');
+ } else if (newPorts.length === 1) {
+ self.portPickerElement.val(newPorts[0].path);
+ } else if (newPorts.length > 1) {
+ self.selectPort(currentPorts);
}
- });
+ }
self.port_available = true;
// Signal board verification
@@ -183,14 +182,13 @@ PortHandler.detectPort = function(currentPorts) {
// start connect procedure. We need firmware flasher protection over here
if (GUI.active_tab !== 'firmware_flasher') {
let connectionTimeout = 100;
- ConfigStorage.get('connectionTimeout', function (result) {
- if (result.connectionTimeout) {
- connectionTimeout = result.connectionTimeout;
- }
- GUI.timeout_add('auto-connect_timeout', function () {
- $('div#header_btns a.connect').click();
- }, connectionTimeout); // timeout so bus have time to initialize after being detected by the system
- });
+ result = ConfigStorage.get('connectionTimeout');
+ if (result.connectionTimeout) {
+ connectionTimeout = result.connectionTimeout;
+ }
+ GUI.timeout_add('auto-connect_timeout', function () {
+ $('div#header_btns a.connect').click();
+ }, connectionTimeout); // timeout so bus have time to initialize after being detected by the system
}
}
// trigger callbacks
diff --git a/src/js/release_checker.js b/src/js/release_checker.js
index 5061958258..d96a67d55d 100644
--- a/src/js/release_checker.js
+++ b/src/js/release_checker.js
@@ -11,37 +11,37 @@ const ReleaseChecker = function (releaseName, releaseUrl) {
ReleaseChecker.prototype.loadReleaseData = function (processFunction) {
const self = this;
- ConfigStorage.get([self._releaseLastUpdateTag, self._releaseDataTag], function (result) {
- const releaseDataTimestamp = $.now();
- const cacheReleaseData = result[self._releaseDataTag];
- const cachedReleaseLastUpdate = result[self._releaseLastUpdateTag];
- if (!cacheReleaseData || !cachedReleaseLastUpdate || releaseDataTimestamp - cachedReleaseLastUpdate > 3600 * 1000) {
- $.get(self._releaseUrl, function (releaseData) {
- GUI.log(i18n.getMessage('releaseCheckLoaded',[self._releaseName]));
-
- const data = {};
- data[self._releaseDataTag] = releaseData;
- data[self._releaseLastUpdateTag] = releaseDataTimestamp;
- ConfigStorage.set(data, function () {});
-
- self._processReleaseData(releaseData, processFunction);
- }).fail(function (data) {
- let message = '';
- if (data['responseJSON']) {
- message = data['responseJSON'].message;
- }
- GUI.log(i18n.getMessage('releaseCheckFailed',[self._releaseName,message]));
-
- self._processReleaseData(cacheReleaseData, processFunction);
- });
- } else {
- if (cacheReleaseData) {
- GUI.log(i18n.getMessage('releaseCheckCached',[self._releaseName]));
+ const result = ConfigStorage.get([self._releaseLastUpdateTag, self._releaseDataTag]);
+ const releaseDataTimestamp = $.now();
+ const cacheReleaseData = result[self._releaseDataTag];
+ const cachedReleaseLastUpdate = result[self._releaseLastUpdateTag];
+
+ if (!cacheReleaseData || !cachedReleaseLastUpdate || releaseDataTimestamp - cachedReleaseLastUpdate > 3600 * 1000) {
+ $.get(self._releaseUrl, function (releaseData) {
+ GUI.log(i18n.getMessage('releaseCheckLoaded',[self._releaseName]));
+
+ const data = {};
+ data[self._releaseDataTag] = releaseData;
+ data[self._releaseLastUpdateTag] = releaseDataTimestamp;
+ ConfigStorage.set(data);
+
+ self._processReleaseData(releaseData, processFunction);
+ }).fail(function (data) {
+ let message = '';
+ if (data['responseJSON']) {
+ message = data['responseJSON'].message;
}
+ GUI.log(i18n.getMessage('releaseCheckFailed',[self._releaseName,message]));
self._processReleaseData(cacheReleaseData, processFunction);
+ });
+ } else {
+ if (cacheReleaseData) {
+ GUI.log(i18n.getMessage('releaseCheckCached',[self._releaseName]));
}
- });
+
+ self._processReleaseData(cacheReleaseData, processFunction);
+ }
};
diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js
index 653db41775..9783bbeb92 100644
--- a/src/js/serial_backend.js
+++ b/src/js/serial_backend.js
@@ -32,16 +32,17 @@ function initializeSerialBackend() {
ConfigStorage.set({'portOverride': $('#port-override').val()});
});
- ConfigStorage.get('portOverride', function (data) {
+ const data = ConfigStorage.get('portOverride');
+ if (data.portOverride) {
$('#port-override').val(data.portOverride);
- });
+ }
$('div#port-picker #port').change(function (target) {
GUI.updateManualPortVisibility();
});
$('div.connect_controls a.connect').click(function () {
- if (GUI.connect_lock != true) { // GUI control overrides the user control
+ if (!GUI.connect_lock) { // GUI control overrides the user control
const thisElement = $(this);
const clicks = thisElement.data('clicks');
@@ -115,40 +116,39 @@ function initializeSerialBackend() {
});
// auto-connect
- ConfigStorage.get('auto_connect', function (result) {
- if (result.auto_connect === undefined || result.auto_connect) {
- // default or enabled by user
- GUI.auto_connect = true;
+ const result = ConfigStorage.get('auto_connect');
+ if (result.auto_connect === undefined || result.auto_connect) {
+ // default or enabled by user
+ GUI.auto_connect = true;
- $('input.auto_connect').prop('checked', true);
- $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectEnabled'));
+ $('input.auto_connect').prop('checked', true);
+ $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectEnabled'));
- $('select#baud').val(115200).prop('disabled', true);
- } else {
- // disabled by user
- GUI.auto_connect = false;
+ $('select#baud').val(115200).prop('disabled', true);
+ } else {
+ // disabled by user
+ GUI.auto_connect = false;
- $('input.auto_connect').prop('checked', false);
- $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectDisabled'));
- }
+ $('input.auto_connect').prop('checked', false);
+ $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectDisabled'));
+ }
- // bind UI hook to auto-connect checkbos
- $('input.auto_connect').change(function () {
- GUI.auto_connect = $(this).is(':checked');
+ // bind UI hook to auto-connect checkbos
+ $('input.auto_connect').change(function () {
+ GUI.auto_connect = $(this).is(':checked');
- // update title/tooltip
- if (GUI.auto_connect) {
- $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectEnabled'));
+ // update title/tooltip
+ if (GUI.auto_connect) {
+ $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectEnabled'));
- $('select#baud').val(115200).prop('disabled', true);
- } else {
- $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectDisabled'));
+ $('select#baud').val(115200).prop('disabled', true);
+ } else {
+ $('input.auto_connect, span.auto_connect').prop('title', i18n.getMessage('autoConnectDisabled'));
- if (!GUI.connected_to && !GUI.connecting_to) $('select#baud').prop('disabled', false);
- }
+ if (!GUI.connected_to && !GUI.connecting_to) $('select#baud').prop('disabled', false);
+ }
- ConfigStorage.set({'auto_connect': GUI.auto_connect});
- });
+ ConfigStorage.set({'auto_connect': GUI.auto_connect});
});
PortHandler.initialize();
@@ -228,17 +228,16 @@ function onOpen(openInfo) {
GUI.log(i18n.getMessage('serialPortOpened', serial.connectionType === 'serial' ? [serial.connectionId] : [openInfo.socketId]));
// save selected port with ConfigStorage if the port differs
- ConfigStorage.get('last_used_port', function (result) {
- if (result.last_used_port) {
- if (result.last_used_port !== GUI.connected_to) {
- // last used port doesn't match the one found in local db, we will store the new one
- ConfigStorage.set({'last_used_port': GUI.connected_to});
- }
- } else {
- // variable isn't stored yet, saving
+ const result = ConfigStorage.get('last_used_port');
+ if (result.last_used_port) {
+ if (result.last_used_port !== GUI.connected_to) {
+ // last used port doesn't match the one found in local db, we will store the new one
ConfigStorage.set({'last_used_port': GUI.connected_to});
}
- });
+ } else {
+ // variable isn't stored yet, saving
+ ConfigStorage.set({'last_used_port': GUI.connected_to});
+ }
serial.onReceive.addListener(read_serial);
setConnectionTimeout();
@@ -827,31 +826,30 @@ function update_dataflash_global() {
function reinitialiseConnection(originatorTab, callback) {
GUI.log(i18n.getMessage('deviceRebooting'));
let connectionTimeout = 200;
- ConfigStorage.get('connectionTimeout', function (result) {
- if (result.connectionTimeout) {
- connectionTimeout = result.connectionTimeout;
- }
+ const result = ConfigStorage.get('connectionTimeout');
+ if (result.connectionTimeout) {
+ connectionTimeout = result.connectionTimeout;
+ }
- if (FC.boardHasVcp()) { // VCP-based flight controls may crash old drivers, we catch and reconnect
- GUI.timeout_add('waiting_for_disconnect', function waiting_for_bootup() {
- if (callback) {
- callback();
- }
- }, connectionTimeout);
- //TODO: Need to work out how to do a proper reconnect here.
- // caveat: Timeouts set with `GUI.timeout_add()` are removed on disconnect.
- } else {
- GUI.timeout_add('waiting_for_bootup', function waiting_for_bootup() {
- MSP.send_message(MSPCodes.MSP_STATUS, false, false, function() {
- GUI.log(i18n.getMessage('deviceReady'));
- originatorTab.initialize(false, $('#content').scrollTop());
- });
+ if (FC.boardHasVcp()) { // VCP-based flight controls may crash old drivers, we catch and reconnect
+ GUI.timeout_add('waiting_for_disconnect', function waiting_for_bootup() {
+ if (callback) {
+ callback();
+ }
+ }, connectionTimeout);
+ //TODO: Need to work out how to do a proper reconnect here.
+ // caveat: Timeouts set with `GUI.timeout_add()` are removed on disconnect.
+ } else {
+ GUI.timeout_add('waiting_for_bootup', function waiting_for_bootup() {
+ MSP.send_message(MSPCodes.MSP_STATUS, false, false, function() {
+ GUI.log(i18n.getMessage('deviceReady'));
+ originatorTab.initialize(false, $('#content').scrollTop());
+ });
- if (callback) {
- callback();
- }
+ if (callback) {
+ callback();
+ }
- }, connectionTimeout); // 1500 ms seems to be just the right amount of delay to prevent data request timeouts
- }
- });
+ }, connectionTimeout); // 1500 ms seems to be just the right amount of delay to prevent data request timeouts
+ }
}
diff --git a/src/js/tabs/auxiliary.js b/src/js/tabs/auxiliary.js
index ad9f962e89..6cbadcb68e 100644
--- a/src/js/tabs/auxiliary.js
+++ b/src/js/tabs/auxiliary.js
@@ -540,16 +540,15 @@ TABS.auxiliary.initialize = function (callback) {
}
let hideUnusedModes = false;
- ConfigStorage.get('hideUnusedModes', function (result) {
- $("input#switch-toggle-unused")
- .change(function() {
- hideUnusedModes = $(this).prop("checked");
- ConfigStorage.set({ hideUnusedModes: hideUnusedModes });
- update_ui();
- })
- .prop("checked", !!result.hideUnusedModes)
- .change();
- });
+ const result = ConfigStorage.get('hideUnusedModes');
+ $("input#switch-toggle-unused")
+ .change(function() {
+ hideUnusedModes = $(this).prop("checked");
+ ConfigStorage.set({ hideUnusedModes: hideUnusedModes });
+ update_ui();
+ })
+ .prop("checked", !!result.hideUnusedModes)
+ .change();
// update ui instantly on first load
update_ui();
diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js
index 938132b723..1e5b30b7d8 100644
--- a/src/js/tabs/firmware_flasher.js
+++ b/src/js/tabs/firmware_flasher.js
@@ -160,12 +160,11 @@ firmware_flasher.initialize = function (callback) {
TABS.firmware_flasher.releases = builds;
- ConfigStorage.get('selected_board', function (result) {
- if (result.selected_board) {
- const boardBuilds = builds[result.selected_board];
- $('select[name="board"]').val(boardBuilds ? result.selected_board : 0).trigger('change');
- }
- });
+ result = ConfigStorage.get('selected_board');
+ if (result.selected_board) {
+ const boardBuilds = builds[result.selected_board];
+ $('select[name="board"]').val(boardBuilds ? result.selected_board : 0).trigger('change');
+ }
}
function processBoardOptions(releaseData, showDevReleases) {
@@ -241,30 +240,29 @@ firmware_flasher.initialize = function (callback) {
if (builds && hasUnifiedTargetBuild(builds)) {
console.log('loaded some builds for later');
const storageTag = 'unifiedSourceCache';
- ConfigStorage.get(storageTag, function (result) {
- let storageObj = result[storageTag];
- if (!storageObj || !storageObj.lastUpdate || checkTime - storageObj.lastUpdate > expirationPeriod) {
- console.log('go get', unifiedSource);
- $.get(unifiedSource, function(data, textStatus, jqXHR) {
- // Cache the information for later use.
- let newStorageObj = {};
- let newDataObj = {};
- newDataObj.lastUpdate = checkTime;
- newDataObj.data = data;
- newStorageObj[storageTag] = newDataObj;
- ConfigStorage.set(newStorageObj);
-
- parseUnifiedBuilds(data, builds);
- }).fail(xhr => {
- console.log('failed to get new', unifiedSource, 'cached data', Math.floor((checkTime - storageObj.lastUpdate) / 60), 'mins old');
- parseUnifiedBuilds(storageObj.data, builds);
- });
- } else {
- // In the event that the cache is okay
- console.log('unified config cached data', Math.floor((checkTime - storageObj.lastUpdate)/60), 'mins old');
- parseUnifiedBuilds(storageObj.data, builds);
- }
- });
+ result = ConfigStorage.get(storageTag);
+ let storageObj = result[storageTag];
+ if (!storageObj || !storageObj.lastUpdate || checkTime - storageObj.lastUpdate > expirationPeriod) {
+ console.log('go get', unifiedSource);
+ $.get(unifiedSource, function(data, textStatus, jqXHR) {
+ // Cache the information for later use.
+ let newStorageObj = {};
+ let newDataObj = {};
+ newDataObj.lastUpdate = checkTime;
+ newDataObj.data = data;
+ newStorageObj[storageTag] = newDataObj;
+ ConfigStorage.set(newStorageObj);
+
+ parseUnifiedBuilds(data, builds);
+ }).fail(xhr => {
+ console.log('failed to get new', unifiedSource, 'cached data', Math.floor((checkTime - storageObj.lastUpdate) / 60), 'mins old');
+ parseUnifiedBuilds(storageObj.data, builds);
+ });
+ } else {
+ // In the event that the cache is okay
+ console.log('unified config cached data', Math.floor((checkTime - storageObj.lastUpdate)/60), 'mins old');
+ parseUnifiedBuilds(storageObj.data, builds);
+ }
} else {
populateBoardOptions(builds);
}
@@ -311,13 +309,12 @@ firmware_flasher.initialize = function (callback) {
TABS.firmware_flasher.releases = releases;
TABS.firmware_flasher.unifiedConfigs = unifiedConfigs;
- ConfigStorage.get('selected_board', function (result) {
- if (result.selected_board) {
- const boardReleases = TABS.firmware_flasher.unifiedConfigs[result.selected_board]
- || TABS.firmware_flasher.releases[result.selected_board];
- $('select[name="board"]').val(boardReleases ? result.selected_board : 0).trigger('change');
- }
- });
+ result = ConfigStorage.get('selected_board');
+ if (result.selected_board) {
+ const boardReleases = TABS.firmware_flasher.unifiedConfigs[result.selected_board]
+ || TABS.firmware_flasher.releases[result.selected_board];
+ $('select[name="board"]').val(boardReleases ? result.selected_board : 0).trigger('change');
+ }
}
const buildTypes = [
@@ -610,78 +607,77 @@ firmware_flasher.initialize = function (callback) {
const storageTag = 'unifiedConfigLast';
const expirationPeriod = 3600; // One of your earth hours.
const checkTime = Math.floor(Date.now() / 1000); // Lets deal in seconds.
- ConfigStorage.get(storageTag, function (result) {
- let storageObj = result[storageTag];
- const unifiedConfigList = TABS.firmware_flasher.unifiedConfigs[target];
- const manufacturerIds = Object.keys(unifiedConfigList);
- const duplicateName = manufacturerIds.length > 1;
-
- const processManufacturer = function(index) {
- const processNext = function () {
- if (index < manufacturerIds.length - 1) {
- processManufacturer(index + 1);
- } else {
- finishPopulatingBuilds();
- }
- };
-
- const manufacturerId = manufacturerIds[index];
- const targetId = `${target}+${manufacturerId}`;
- // Check to see if the cached configuration is the one we want.
- if (!storageObj || !storageObj.targetId || storageObj.targetId !== targetId
- || !storageObj.lastUpdate || checkTime - storageObj.lastUpdate > expirationPeriod
- || !storageObj.unifiedTarget) {
- const unifiedConfig = unifiedConfigList[manufacturerId];
- // Have to go and try and get the unified config, and then do stuff
- $.get(unifiedConfig.download_url, function(targetConfig) {
- console.log('got unified config');
-
- let config = cleanUnifiedConfigFile(targetConfig);
- if (config !== null) {
- const bareBoard = grabBuildNameFromConfig(config);
- TABS.firmware_flasher.bareBoard = bareBoard;
-
- self.gitHubApi.getFileLastCommitInfo('betaflight/unified-targets', 'master', unifiedConfig.path, function (commitInfo) {
- config = self.injectTargetInfo(config, target, manufacturerId, commitInfo);
-
- setUnifiedConfig(target, bareBoard, config, manufacturerId, unifiedConfig.name, unifiedConfig.download_url, commitInfo.date);
-
- // cache it for later
- let newStorageObj = {};
- newStorageObj[storageTag] = {
- unifiedTarget: self.unifiedTarget,
- targetId: targetId,
- lastUpdate: checkTime,
- };
- ConfigStorage.set(newStorageObj);
-
- populateBuilds(builds, target, manufacturerId, duplicateName, TABS.firmware_flasher.releases[bareBoard], processNext);
- });
- } else {
- failLoading(unifiedConfig.download_url);
- }
- }).fail(xhr => {
- failLoading(unifiedConfig.download_url);
- });
+ result = ConfigStorage.get(storageTag);
+ let storageObj = result[storageTag];
+ const unifiedConfigList = TABS.firmware_flasher.unifiedConfigs[target];
+ const manufacturerIds = Object.keys(unifiedConfigList);
+ const duplicateName = manufacturerIds.length > 1;
+
+ const processManufacturer = function(index) {
+ const processNext = function () {
+ if (index < manufacturerIds.length - 1) {
+ processManufacturer(index + 1);
} else {
- console.log('We have the config cached for', targetId);
- const unifiedTarget = storageObj.unifiedTarget;
+ finishPopulatingBuilds();
+ }
+ };
+
+ const manufacturerId = manufacturerIds[index];
+ const targetId = `${target}+${manufacturerId}`;
+ // Check to see if the cached configuration is the one we want.
+ if (!storageObj || !storageObj.targetId || storageObj.targetId !== targetId
+ || !storageObj.lastUpdate || checkTime - storageObj.lastUpdate > expirationPeriod
+ || !storageObj.unifiedTarget) {
+ const unifiedConfig = unifiedConfigList[manufacturerId];
+ // Have to go and try and get the unified config, and then do stuff
+ $.get(unifiedConfig.download_url, function(targetConfig) {
+ console.log('got unified config');
+
+ let config = cleanUnifiedConfigFile(targetConfig);
+ if (config !== null) {
+ const bareBoard = grabBuildNameFromConfig(config);
+ TABS.firmware_flasher.bareBoard = bareBoard;
+
+ self.gitHubApi.getFileLastCommitInfo('betaflight/unified-targets', 'master', unifiedConfig.path, function (commitInfo) {
+ config = self.injectTargetInfo(config, target, manufacturerId, commitInfo);
- const bareBoard = grabBuildNameFromConfig(unifiedTarget.config);
- TABS.firmware_flasher.bareBoard = bareBoard;
+ setUnifiedConfig(target, bareBoard, config, manufacturerId, unifiedConfig.name, unifiedConfig.download_url, commitInfo.date);
- if (target === bareBoard) {
- self.unifiedTarget = {};
+ // cache it for later
+ let newStorageObj = {};
+ newStorageObj[storageTag] = {
+ unifiedTarget: self.unifiedTarget,
+ targetId: targetId,
+ lastUpdate: checkTime,
+ };
+ ConfigStorage.set(newStorageObj);
+
+ populateBuilds(builds, target, manufacturerId, duplicateName, TABS.firmware_flasher.releases[bareBoard], processNext);
+ });
} else {
- self.unifiedTarget = unifiedTarget;
+ failLoading(unifiedConfig.download_url);
}
+ }).fail(xhr => {
+ failLoading(unifiedConfig.download_url);
+ });
+ } else {
+ console.log('We have the config cached for', targetId);
+ const unifiedTarget = storageObj.unifiedTarget;
+
+ const bareBoard = grabBuildNameFromConfig(unifiedTarget.config);
+ TABS.firmware_flasher.bareBoard = bareBoard;
- populateBuilds(builds, target, manufacturerId, duplicateName, TABS.firmware_flasher.releases[bareBoard], processNext);
+ if (target === bareBoard) {
+ self.unifiedTarget = {};
+ } else {
+ self.unifiedTarget = unifiedTarget;
}
- };
- processManufacturer(0);
- });
+ populateBuilds(builds, target, manufacturerId, duplicateName, TABS.firmware_flasher.releases[bareBoard], processNext);
+ }
+ };
+
+ processManufacturer(0);
} else {
self.unifiedTarget = {};
finishPopulatingBuilds();
@@ -875,85 +871,78 @@ firmware_flasher.initialize = function (callback) {
document.querySelector('select[name="board"]').addEventListener('change', updateDetectBoardButton);
document.querySelector('select[name="firmware_version"]').addEventListener('change', updateDetectBoardButton);
- ConfigStorage.get('erase_chip', function (result) {
- if (result.erase_chip) {
- $('input.erase_chip').prop('checked', true);
- } else {
- $('input.erase_chip').prop('checked', false);
- }
+ let result = ConfigStorage.get('erase_chip');
+ if (result.erase_chip) {
+ $('input.erase_chip').prop('checked', true);
+ } else {
+ $('input.erase_chip').prop('checked', false);
+ }
- $('input.erase_chip').change(function () {
- ConfigStorage.set({'erase_chip': $(this).is(':checked')});
- }).change();
- });
+ $('input.erase_chip').change(function () {
+ ConfigStorage.set({'erase_chip': $(this).is(':checked')});
+ }).change();
- ConfigStorage.get('show_development_releases', function (result) {
- $('input.show_development_releases')
- .prop('checked', result.show_development_releases)
- .change(function () {
- ConfigStorage.set({'show_development_releases': $(this).is(':checked')});
- }).change();
+ result = ConfigStorage.get('show_development_releases');
+ $('input.show_development_releases')
+ .prop('checked', result.show_development_releases)
+ .change(function () {
+ ConfigStorage.set({'show_development_releases': $(this).is(':checked')});
+ }).change();
- });
+ result = ConfigStorage.get('selected_build_type');
+ // ensure default build type is selected
+ buildType_e.val(result.selected_build_type || 0).trigger('change');
- ConfigStorage.get('selected_build_type', function (result) {
- // ensure default build type is selected
- buildType_e.val(result.selected_build_type || 0).trigger('change');
- });
+ result = ConfigStorage.get('no_reboot_sequence');
+ if (result.no_reboot_sequence) {
+ $('input.updating').prop('checked', true);
+ $('.flash_on_connect_wrapper').show();
+ } else {
+ $('input.updating').prop('checked', false);
+ }
+
+ // bind UI hook so the status is saved on change
+ $('input.updating').change(function() {
+ const status = $(this).is(':checked');
- ConfigStorage.get('no_reboot_sequence', function (result) {
- if (result.no_reboot_sequence) {
- $('input.updating').prop('checked', true);
+ if (status) {
$('.flash_on_connect_wrapper').show();
} else {
- $('input.updating').prop('checked', false);
+ $('input.flash_on_connect').prop('checked', false).change();
+ $('.flash_on_connect_wrapper').hide();
}
- // bind UI hook so the status is saved on change
- $('input.updating').change(function() {
- const status = $(this).is(':checked');
-
- if (status) {
- $('.flash_on_connect_wrapper').show();
- } else {
- $('input.flash_on_connect').prop('checked', false).change();
- $('.flash_on_connect_wrapper').hide();
- }
-
- ConfigStorage.set({'no_reboot_sequence': status});
- });
-
- $('input.updating').change();
+ ConfigStorage.set({'no_reboot_sequence': status});
});
- ConfigStorage.get('flash_manual_baud', function (result) {
- if (result.flash_manual_baud) {
- $('input.flash_manual_baud').prop('checked', true);
- } else {
- $('input.flash_manual_baud').prop('checked', false);
- }
+ $('input.updating').change();
- // bind UI hook so the status is saved on change
- $('input.flash_manual_baud').change(function() {
- const status = $(this).is(':checked');
- ConfigStorage.set({'flash_manual_baud': status});
- });
+ result = ConfigStorage.get('flash_manual_baud');
+ if (result.flash_manual_baud) {
+ $('input.flash_manual_baud').prop('checked', true);
+ } else {
+ $('input.flash_manual_baud').prop('checked', false);
+ }
- $('input.flash_manual_baud').change();
+ // bind UI hook so the status is saved on change
+ $('input.flash_manual_baud').change(function() {
+ const status = $(this).is(':checked');
+ ConfigStorage.set({'flash_manual_baud': status});
});
- ConfigStorage.get('flash_manual_baud_rate', function (result) {
- $('#flash_manual_baud_rate').val(result.flash_manual_baud_rate);
+ $('input.flash_manual_baud').change();
- // bind UI hook so the status is saved on change
- $('#flash_manual_baud_rate').change(function() {
- const baud = parseInt($('#flash_manual_baud_rate').val());
- ConfigStorage.set({'flash_manual_baud_rate': baud});
- });
+ result = ConfigStorage.get('flash_manual_baud_rate');
+ $('#flash_manual_baud_rate').val(result.flash_manual_baud_rate);
- $('input.flash_manual_baud_rate').change();
+ // bind UI hook so the status is saved on change
+ $('#flash_manual_baud_rate').change(function() {
+ const baud = parseInt($('#flash_manual_baud_rate').val());
+ ConfigStorage.set({'flash_manual_baud_rate': baud});
});
+ $('input.flash_manual_baud_rate').change();
+
// UI Hooks
$('a.load_file').click(function () {
self.enableFlashing(false);
@@ -1159,14 +1148,13 @@ firmware_flasher.initialize = function (callback) {
ConfigStorage.set(storageObj);
}
- ConfigStorage.get(storageTag, function (result) {
- if (!result[storageTag] || Date.now() - result[storageTag] > DAY_MS) {
+ result = ConfigStorage.get(storageTag);
+ if (!result[storageTag] || Date.now() - result[storageTag] > DAY_MS) {
- showAcknowledgementDialog(setAcknowledgementTimestamp);
- } else {
- startFlashing();
- }
- });
+ showAcknowledgementDialog(setAcknowledgementTimestamp);
+ } else {
+ startFlashing();
+ }
}
function showAcknowledgementDialog(acknowledgementCallback) {
@@ -1287,8 +1275,8 @@ firmware_flasher.initialize = function (callback) {
if (status) {
const catch_new_port = function () {
- PortHandler.port_detected('flash_detected_device', function (result) {
- const port = result[0];
+ PortHandler.port_detected('flash_detected_device', function (resultPort) {
+ const port = resultPort[0];
if (!GUI.connect_lock) {
GUI.log(i18n.getMessage('firmwareFlasherFlashTrigger', [port]));
diff --git a/src/js/tabs/logging.js b/src/js/tabs/logging.js
index 3b0f190657..2e73c64746 100644
--- a/src/js/tabs/logging.js
+++ b/src/js/tabs/logging.js
@@ -99,18 +99,17 @@ logging.initialize = function (callback) {
}
});
- ConfigStorage.get('logging_file_entry', function (result) {
- if (result.logging_file_entry) {
- chrome.fileSystem.restoreEntry(result.logging_file_entry, function (entry) {
- if (checkChromeRuntimeError()) {
- return;
- }
+ const result = ConfigStorage.get('logging_file_entry');
+ if (result.logging_file_entry) {
+ chrome.fileSystem.restoreEntry(result.logging_file_entry, function (entry) {
+ if (checkChromeRuntimeError()) {
+ return;
+ }
- fileEntry = entry;
- prepare_writer(true);
- });
- }
- });
+ fileEntry = entry;
+ prepare_writer(true);
+ });
+ }
GUI.content_ready(callback);
}
diff --git a/src/js/tabs/motors.js b/src/js/tabs/motors.js
index 3e0dfeb48d..5a1b3058a2 100644
--- a/src/js/tabs/motors.js
+++ b/src/js/tabs/motors.js
@@ -559,22 +559,21 @@ TABS.motors.initialize = function (callback) {
});
// set refresh speeds according to configuration saved in storage
- ConfigStorage.get(['motors_tab_sensor_settings', 'motors_tab_gyro_settings', 'motors_tab_accel_settings'], function (result) {
- if (result.motors_tab_sensor_settings) {
- $('.tab-motors select[name="sensor_choice"]').val(result.motors_tab_sensor_settings.sensor);
- }
+ const result = ConfigStorage.get(['motors_tab_sensor_settings', 'motors_tab_gyro_settings', 'motors_tab_accel_settings']);
+ if (result.motors_tab_sensor_settings) {
+ $('.tab-motors select[name="sensor_choice"]').val(result.motors_tab_sensor_settings.sensor);
+ }
- if (result.motors_tab_gyro_settings) {
- TABS.motors.sensorGyroRate = result.motors_tab_gyro_settings.rate;
- TABS.motors.sensorGyroScale = result.motors_tab_gyro_settings.scale;
- }
+ if (result.motors_tab_gyro_settings) {
+ TABS.motors.sensorGyroRate = result.motors_tab_gyro_settings.rate;
+ TABS.motors.sensorGyroScale = result.motors_tab_gyro_settings.scale;
+ }
- if (result.motors_tab_accel_settings) {
- TABS.motors.sensorAccelRate = result.motors_tab_accel_settings.rate;
- TABS.motors.sensorAccelScale = result.motors_tab_accel_settings.scale;
- }
- $('.tab-motors .sensor select:first').change();
- });
+ if (result.motors_tab_accel_settings) {
+ TABS.motors.sensorAccelRate = result.motors_tab_accel_settings.rate;
+ TABS.motors.sensorAccelScale = result.motors_tab_accel_settings.scale;
+ }
+ $('.tab-motors .sensor select:first').change();
// Amperage
function power_data_pull() {
diff --git a/src/js/tabs/options.js b/src/js/tabs/options.js
index 9362651afe..2004bde7ea 100644
--- a/src/js/tabs/options.js
+++ b/src/js/tabs/options.js
@@ -29,70 +29,66 @@ options.cleanup = function (callback) {
};
options.initPermanentExpertMode = function () {
- ConfigStorage.get('permanentExpertMode', function (result) {
- if (result.permanentExpertMode) {
- $('div.permanentExpertMode input').prop('checked', true);
- }
+ const result = ConfigStorage.get('permanentExpertMode');
+ if (result.permanentExpertMode) {
+ $('div.permanentExpertMode input').prop('checked', true);
+ }
- $('div.permanentExpertMode input').change(function () {
- const checked = $(this).is(':checked');
+ $('div.permanentExpertMode input').change(function () {
+ const checked = $(this).is(':checked');
- ConfigStorage.set({'permanentExpertMode': checked});
+ ConfigStorage.set({'permanentExpertMode': checked});
- $('input[name="expertModeCheckbox"]').prop('checked', checked).change();
- }).change();
- });
+ $('input[name="expertModeCheckbox"]').prop('checked', checked).change();
+ }).change();
};
options.initRememberLastTab = function () {
- ConfigStorage.get('rememberLastTab', function (result) {
- $('div.rememberLastTab input')
- .prop('checked', !!result.rememberLastTab)
- .change(function() { ConfigStorage.set({rememberLastTab: $(this).is(':checked')}); })
- .change();
- });
+ const result = ConfigStorage.get('rememberLastTab');
+ $('div.rememberLastTab input')
+ .prop('checked', !!result.rememberLastTab)
+ .change(function() { ConfigStorage.set({rememberLastTab: $(this).is(':checked')}); })
+ .change();
};
options.initCheckForConfiguratorUnstableVersions = function () {
- ConfigStorage.get('checkForConfiguratorUnstableVersions', function (result) {
- if (result.checkForConfiguratorUnstableVersions) {
- $('div.checkForConfiguratorUnstableVersions input').prop('checked', true);
- }
+ const result = ConfigStorage.get('checkForConfiguratorUnstableVersions');
+ if (result.checkForConfiguratorUnstableVersions) {
+ $('div.checkForConfiguratorUnstableVersions input').prop('checked', true);
+ }
- $('div.checkForConfiguratorUnstableVersions input').change(function () {
- const checked = $(this).is(':checked');
+ $('div.checkForConfiguratorUnstableVersions input').change(function () {
+ const checked = $(this).is(':checked');
- ConfigStorage.set({'checkForConfiguratorUnstableVersions': checked});
+ ConfigStorage.set({'checkForConfiguratorUnstableVersions': checked});
- checkForConfiguratorUpdates();
- });
+ checkForConfiguratorUpdates();
});
};
options.initAnalyticsOptOut = function () {
- ConfigStorage.get('analyticsOptOut', function (result) {
- if (result.analyticsOptOut) {
- $('div.analyticsOptOut input').prop('checked', true);
- }
+ const result = ConfigStorage.get('analyticsOptOut');
+ if (result.analyticsOptOut) {
+ $('div.analyticsOptOut input').prop('checked', true);
+ }
- $('div.analyticsOptOut input').change(function () {
- const checked = $(this).is(':checked');
+ $('div.analyticsOptOut input').change(function () {
+ const checked = $(this).is(':checked');
- ConfigStorage.set({'analyticsOptOut': checked});
+ ConfigStorage.set({'analyticsOptOut': checked});
- checkSetupAnalytics(function (analyticsService) {
- if (checked) {
- analyticsService.sendEvent(analyticsService.EVENT_CATEGORIES.APPLICATION, 'OptOut');
- }
+ checkSetupAnalytics(function (analyticsService) {
+ if (checked) {
+ analyticsService.sendEvent(analyticsService.EVENT_CATEGORIES.APPLICATION, 'OptOut');
+ }
- analyticsService.setOptOut(checked);
+ analyticsService.setOptOut(checked);
- if (!checked) {
- analyticsService.sendEvent(analyticsService.EVENT_CATEGORIES.APPLICATION, 'OptIn');
- }
- });
- }).change();
- });
+ if (!checked) {
+ analyticsService.sendEvent(analyticsService.EVENT_CATEGORIES.APPLICATION, 'OptIn');
+ }
+ });
+ }).change();
};
options.initCliAutoComplete = function () {
@@ -107,33 +103,31 @@ options.initCliAutoComplete = function () {
};
options.initAutoConnectConnectionTimeout = function () {
- ConfigStorage.get('connectionTimeout', function (result) {
- if (result.connectionTimeout) {
- $('#connectionTimeoutSelect').val(result.connectionTimeout);
- }
- $('#connectionTimeoutSelect').on('change', function () {
- const value = parseInt($(this).val());
- ConfigStorage.set({'connectionTimeout': value});
- });
+ const result = ConfigStorage.get('connectionTimeout');
+ if (result.connectionTimeout) {
+ $('#connectionTimeoutSelect').val(result.connectionTimeout);
+ }
+ $('#connectionTimeoutSelect').on('change', function () {
+ const value = parseInt($(this).val());
+ ConfigStorage.set({'connectionTimeout': value});
});
};
options.initCordovaForceComputerUI = function () {
if (GUI.isCordova() && cordovaUI.canChangeUI) {
- ConfigStorage.get('cordovaForceComputerUI', function (result) {
- if (result.cordovaForceComputerUI) {
- $('div.cordovaForceComputerUI input').prop('checked', true);
- }
+ const result = ConfigStorage.get('cordovaForceComputerUI');
+ if (result.cordovaForceComputerUI) {
+ $('div.cordovaForceComputerUI input').prop('checked', true);
+ }
- $('div.cordovaForceComputerUI input').change(function () {
- const checked = $(this).is(':checked');
+ $('div.cordovaForceComputerUI input').change(function () {
+ const checked = $(this).is(':checked');
- ConfigStorage.set({'cordovaForceComputerUI': checked});
+ ConfigStorage.set({'cordovaForceComputerUI': checked});
- if (typeof cordovaUI.set === 'function') {
- cordovaUI.set();
- }
- });
+ if (typeof cordovaUI.set === 'function') {
+ cordovaUI.set();
+ }
});
} else {
$('div.cordovaForceComputerUI').hide();
diff --git a/src/js/tabs/receiver.js b/src/js/tabs/receiver.js
index e8a98014c0..ad9b690b09 100644
--- a/src/js/tabs/receiver.js
+++ b/src/js/tabs/receiver.js
@@ -788,13 +788,12 @@ TABS.receiver.initialize = function (callback) {
GUI.interval_add('receiver_pull', get_rc_refresh_data, plotUpdateRate, true);
});
- ConfigStorage.get('rx_refresh_rate', function (result) {
- if (result.rxRefreshRate) {
- rxRefreshRate.val(result.rxRefreshRate).change();
- } else {
- rxRefreshRate.change(); // start with default value
- }
- });
+ const result = ConfigStorage.get('rx_refresh_rate');
+ if (result.rxRefreshRate) {
+ rxRefreshRate.val(result.rxRefreshRate).change();
+ } else {
+ rxRefreshRate.change(); // start with default value
+ }
// Setup model for preview
tab.initModelPreview();
diff --git a/src/js/tabs/sensors.js b/src/js/tabs/sensors.js
index 90f2e2a83e..5c647718c8 100644
--- a/src/js/tabs/sensors.js
+++ b/src/js/tabs/sensors.js
@@ -428,40 +428,39 @@ TABS.sensors.initialize = function (callback) {
}
});
- ConfigStorage.get('sensor_settings', function (result) {
- // set refresh speeds according to configuration saved in storage
- if (result.sensor_settings) {
- $('.tab-sensors select[name="gyro_refresh_rate"]').val(result.sensor_settings.rates.gyro);
- $('.tab-sensors select[name="gyro_scale"]').val(result.sensor_settings.scales.gyro);
+ const result = ConfigStorage.get('sensor_settings');
+ // set refresh speeds according to configuration saved in storage
+ if (result.sensor_settings) {
+ $('.tab-sensors select[name="gyro_refresh_rate"]').val(result.sensor_settings.rates.gyro);
+ $('.tab-sensors select[name="gyro_scale"]').val(result.sensor_settings.scales.gyro);
- $('.tab-sensors select[name="accel_refresh_rate"]').val(result.sensor_settings.rates.accel);
- $('.tab-sensors select[name="accel_scale"]').val(result.sensor_settings.scales.accel);
+ $('.tab-sensors select[name="accel_refresh_rate"]').val(result.sensor_settings.rates.accel);
+ $('.tab-sensors select[name="accel_scale"]').val(result.sensor_settings.scales.accel);
- $('.tab-sensors select[name="mag_refresh_rate"]').val(result.sensor_settings.rates.mag);
- $('.tab-sensors select[name="mag_scale"]').val(result.sensor_settings.scales.mag);
+ $('.tab-sensors select[name="mag_refresh_rate"]').val(result.sensor_settings.rates.mag);
+ $('.tab-sensors select[name="mag_scale"]').val(result.sensor_settings.scales.mag);
- $('.tab-sensors select[name="altitude_refresh_rate"]').val(result.sensor_settings.rates.altitude);
- $('.tab-sensors select[name="sonar_refresh_rate"]').val(result.sensor_settings.rates.sonar);
+ $('.tab-sensors select[name="altitude_refresh_rate"]').val(result.sensor_settings.rates.altitude);
+ $('.tab-sensors select[name="sonar_refresh_rate"]').val(result.sensor_settings.rates.sonar);
- $('.tab-sensors select[name="debug_refresh_rate"]').val(result.sensor_settings.rates.debug);
+ $('.tab-sensors select[name="debug_refresh_rate"]').val(result.sensor_settings.rates.debug);
- // start polling data by triggering refresh rate change event
- $('.tab-sensors .rate select:first').change();
- } else {
- // start polling immediatly (as there is no configuration saved in the storage)
- $('.tab-sensors .rate select:first').change();
+ // start polling data by triggering refresh rate change event
+ $('.tab-sensors .rate select:first').change();
+ } else {
+ // start polling immediatly (as there is no configuration saved in the storage)
+ $('.tab-sensors .rate select:first').change();
+ }
+
+ const resultGraphs = ConfigStorage.get('graphs_enabled');
+ if (resultGraphs.graphs_enabled) {
+ const _checkboxes = $('.tab-sensors .info .checkboxes input');
+ for (let i = 0; i < resultGraphs.graphs_enabled.length; i++) {
+ _checkboxes.eq(i).not(':disabled').prop('checked', resultGraphs.graphs_enabled[i]).change();
}
- ConfigStorage.get('graphs_enabled', function (resultGraphs) {
- if (resultGraphs.graphs_enabled) {
- const _checkboxes = $('.tab-sensors .info .checkboxes input');
- for (let i = 0; i < resultGraphs.graphs_enabled.length; i++) {
- _checkboxes.eq(i).not(':disabled').prop('checked', resultGraphs.graphs_enabled[i]).change();
- }
- } else {
- $('.tab-sensors .info input:lt(4):not(:disabled)').prop('checked', true).change();
- }
- });
- });
+ } else {
+ $('.tab-sensors .info input:lt(4):not(:disabled)').prop('checked', true).change();
+ }
// status data pulled via separate timer with static speed
GUI.interval_add('status_pull', function status_pull() {