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