1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-15 20:35:19 +03:00

Use async URL loading for the JSON setting definitions

Chrome disallows synchronous URL loading, so all functions requiring
the JSON definitions for the settings over MSPv2 need to be async.
This required rewriting MSPHelper._getSetting() and all its callers
using promises.

Fixes #284
This commit is contained in:
Alberto García Hierro 2017-10-17 19:49:50 +01:00
parent 244b646bd2
commit 850632bfee
2 changed files with 101 additions and 84 deletions

View file

@ -2246,18 +2246,28 @@ var mspHelper = (function (gui) {
};
self._getSetting = function(name) {
if (!this._settings) {
var promise;
if (this._settings) {
promise = Promise.resolve(this._settings);
} else {
promise = new Promise(function(resolve, reject) {
var $this = this;
$.ajax({
url: chrome.extension.getURL('/resources/settings.json'),
url: chrome.runtime.getURL('/resources/settings.json'),
dataType: 'json',
async: false,
error: function(jqXHR, text, error) {
reject(error);
},
success: function(data) {
$this._settings = data;
resolve(data);
}
});
});
}
return this._settings[name];
return promise.then(function (data) {
return data[name];
});
};
self._encodeSettingName = function(name, data) {
@ -2268,9 +2278,10 @@ var mspHelper = (function (gui) {
};
self.getSetting = function(name, callback) {
var setting = this._getSetting(name);
var $this = this;
return this._getSetting(name).then(function (setting) {
var data = [];
this._encodeSettingName(name, data);
$this._encodeSettingName(name, data);
MSP.send_message(MSPCodes.MSPV2_SETTING, data, false, function(resp) {
var value;
switch (setting.type) {
@ -2305,10 +2316,12 @@ var mspHelper = (function (gui) {
callback(value, setting);
}
});
});
};
self.encodeSetting = function(name, value) {
var setting = this._getSetting(name);
var $this = this;
return this._getSetting(name).then(function (setting) {
if (setting.table) {
var found = false;
for (var ii = 0; ii < setting.table.values.length; ii++) {
@ -2323,7 +2336,7 @@ var mspHelper = (function (gui) {
}
}
var data = [];
this._encodeSettingName(name, data);
$this._encodeSettingName(name, data);
switch (setting.type) {
case "uint8_t":
case "int8_t":
@ -2346,11 +2359,13 @@ var mspHelper = (function (gui) {
throw "Unknown setting type " + setting.type;
}
return data;
});
};
self.setSetting = function(name, value, callback) {
var data = this.encodeSetting(name, value);
this.encodeSetting(name, value).then(function (data) {
MSP.send_message(MSPCodes.MSPV2_SET_SETTING, data, false, callback);
});
};
return self;

View file

@ -531,7 +531,9 @@ TABS.profiles.initialize = function (callback, scrollPosition) {
var settings = presets.settings.get(currentPreset.type);
Object.keys(settings).forEach(function(key, ii) {
var value = settings[key];
promises[key] = MSP.promise(MSPCodes.MSPV2_SET_SETTING, mspHelper.encodeSetting(key, value));
promises[key] = mspHelper.encodeSetting(key, value).then(function(data) {
return MSP.promise(MSPCodes.MSPV2_SET_SETTING, data);
});
});
}
Promise.props(promises).then(function () {