/*global mspHelper,$,GUI,MSP,chrome*/ 'use strict'; var helper = helper || {}; var savingDefaultsModal; helper.defaultsDialog = (function (data) { let publicScope = {}, privateScope = {}; let $container; publicScope.init = function () { mspHelper.getSetting("applied_defaults").then(privateScope.onInitSettingReturned); $container = $("#defaults-wrapper"); }; privateScope.setFeaturesBits = function (selectedDefaultPreset) { if (selectedDefaultPreset.features && selectedDefaultPreset.features.length > 0) { helper.features.reset(); for (const feature of selectedDefaultPreset.features) { if (feature.state) { helper.features.set(feature.bit); } else { helper.features.unset(feature.bit); } } helper.features.execute(function () { privateScope.setSettings(selectedDefaultPreset); }); } else { privateScope.setSettings(selectedDefaultPreset); } }; privateScope.saveWizardStep = function (selectedDefaultPreset, wizardStep) { //TODO add saving logic privateScope.wizard(selectedDefaultPreset, wizardStep + 1); }; privateScope.handleTabLoadReceiver = function ($content) { console.log('ready to handle receiver'); }, privateScope.wizard = function (selectedDefaultPreset, wizardStep) { const steps = selectedDefaultPreset.wizardPages; const stepsCount = selectedDefaultPreset.wizardPages.length; const stepName = steps[wizardStep]; console.log(steps[wizardStep], wizardStep, stepsCount); if (wizardStep >= stepsCount) { //This is the last step, time to finalize $container.hide(); privateScope.saveAndReboot(); } else { const $content = $container.find('.defaults-dialog__wizard'); $content.unbind(); $.get("./wizard/" + stepName + ".html", function (data) { $content.html(""); $(data).appendTo($content); $.get("./wizard/buttons.html", function (data) { $(data).appendTo($content); $content.on('click', '#wizard-next', function () { privateScope.saveWizardStep(selectedDefaultPreset, wizardStep); }); $content.on('click', '#wizard-skip', function () { privateScope.wizard(selectedDefaultPreset, wizardStep + 1); }); if (stepName == "receiver") { privateScope.handleTabLoadReceiver($content); } Settings.configureInputs().then( function () { console.log('configure done'); $container.find('.defaults-dialog__content').hide(); $container.find('.defaults-dialog__wizard').show(); savingDefaultsModal.close(); $container.show(); } ); }); }); } }; privateScope.saveAndReboot = function () { GUI.tab_switch_cleanup(function () { MSP.send_message(MSPCodes.MSP_SET_REBOOT, false, false, function () { //noinspection JSUnresolvedVariable if (typeof savingDefaultsModal !== 'undefined') { savingDefaultsModal.close(); } GUI.log(chrome.i18n.getMessage('deviceRebooting')); GUI.handleReconnect(); }); }); }; privateScope.finalize = function (selectedDefaultPreset) { if (selectedDefaultPreset.wizardPages) { privateScope.wizard(selectedDefaultPreset, 0); } return; //FIXME enable real flow mspHelper.saveToEeprom(function () { //noinspection JSUnresolvedVariable GUI.log(chrome.i18n.getMessage('configurationEepromSaved')); if (selectedDefaultPreset.wizardPages) { privateScope.wizard(selectedDefaultPreset, 0); } else if (selectedDefaultPreset.reboot) { privateScope.saveAndReboot(); } }); }; privateScope.setSettings = function (selectedDefaultPreset) { var currentControlProfile = parseInt($("#profilechange").val()); var currentBatteryProfile = parseInt($("#batteryprofilechange").val()); var controlProfileSettings = []; var batterySettings = []; var miscSettings = []; selectedDefaultPreset.settings.forEach(input => { if (FC.isControlProfileParameter(input.key)) { controlProfileSettings.push(input); } else if (FC.isBatteryProfileParameter(input.key)) { batterySettings.push(input); } else { miscSettings.push(input); } }); //Save analytics googleAnalytics.sendEvent('Setting', 'Defaults', selectedDefaultPreset.title); var settingsChainer = MSPChainerClass(); var chain = []; miscSettings.forEach(input => { chain.push(function (callback) { mspHelper.setSetting(input.key, input.value, callback); }); }); for (var i = 0; i < 3; i++ ) { chain.push(function (callback) { MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [i], false, callback); }); controlProfileSettings.forEach(input => { chain.push(function (callback) { mspHelper.setSetting(input.key, input.value, callback); }); }); } for (var i = 0; i < 3; i++ ) { chain.push(function (callback) { MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [i], false, callback); }); batterySettings.forEach(input => { chain.push(function (callback) { mspHelper.setSetting(input.key, input.value, callback); }); }); } // Set Mixers if (selectedDefaultPreset.mixerToApply) { let currentMixerPreset = helper.mixer.getById(selectedDefaultPreset.mixerToApply); helper.mixer.loadServoRules(currentMixerPreset); helper.mixer.loadMotorRules(currentMixerPreset); MIXER_CONFIG.platformType = currentMixerPreset.platform; MIXER_CONFIG.appliedMixerPreset = selectedDefaultPreset.mixerToApply; MIXER_CONFIG.motorStopOnLow = (currentMixerPreset.motorStopOnLow === true) ? true : false; MIXER_CONFIG.hasFlaps = (currentMixerPreset.hasFlaps === true) ? true : false; SERVO_RULES.cleanup(); SERVO_RULES.inflate(); MOTOR_RULES.cleanup(); MOTOR_RULES.inflate(); chain = chain.concat([ mspHelper.saveMixerConfig, mspHelper.sendServoMixer, mspHelper.sendMotorMixer ]); } chain.push(function (callback) { MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [currentControlProfile], false, callback); }); chain.push(function (callback) { MSP.send_message(MSPCodes.MSP2_INAV_SELECT_BATTERY_PROFILE, [currentBatteryProfile], false, callback); }); settingsChainer.setChain(chain); settingsChainer.setExitPoint(function () { privateScope.finalize(selectedDefaultPreset); }); settingsChainer.execute(); } privateScope.onPresetClick = function (event) { savingDefaultsModal = new jBox('Modal', { width: 400, height: 100, animation: false, closeOnClick: false, closeOnEsc: false, content: $('#modal-saving-defaults') }).open(); $container.hide(); let selectedDefaultPreset = data[$(event.currentTarget).data("index")]; if (selectedDefaultPreset && selectedDefaultPreset.settings) { if (selectedDefaultPreset.id == 0) { // Close applying preset dialog if keeping current settings. savingDefaultsModal.close(); } mspHelper.loadFeatures(function () { privateScope.setFeaturesBits(selectedDefaultPreset) }); } else { savingDefaultsModal.close(); } }; privateScope.render = function () { $container.find('.defaults-dialog__content').show(); $container.find('.defaults-dialog__wizard').hide(); let $place = $container.find('.defaults-dialog__options'); $place.html(""); for (let i in data) { if (data.hasOwnProperty(i)) { let preset = data[i]; let $element = $("
") if (preset.notRecommended) { $element.addClass("defaults_btn--not-recommended"); } $element.find("a").html(preset.title); $element.data("index", i).click(privateScope.onPresetClick) $element.appendTo($place); } } } privateScope.onInitSettingReturned = function (promise) { if (promise.value > 0) { return; //Defaults were applied, we can just ignore } privateScope.render(); $container.show(); } return publicScope; })(helper.defaultsDialogData);