diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index 50003fe5..1870001e 100644 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -58,7 +58,7 @@ export function initializeSerialBackend() { EventBus.$on('port-handler:auto-select-serial-device', function(device) { if (!GUI.connected_to && !GUI.connecting_to && GUI.active_tab !== 'firmware_flasher' - && ((PortHandler.portPicker.autoConnect && !["manual", "virtual"].includes(device)) + && ((PortHandler.portPicker.autoConnect && !["manual", "virtual"].includes(device)) || Date.now() - rebootTimestamp < REBOOT_CONNECT_MAX_TIME_MS)) { connectDisconnect(); } diff --git a/src/js/tabs/cli.js b/src/js/tabs/cli.js index 91e6c8c3..826c486f 100644 --- a/src/js/tabs/cli.js +++ b/src/js/tabs/cli.js @@ -546,6 +546,7 @@ cli.cleanup = function (callback) { return; } + this.send(getCliCommand('exit\r', this.cliBuffer), function () { // we could handle this "nicely", but this will do for now // (another approach is however much more complicated): diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js index 1173e977..d66a918f 100644 --- a/src/js/tabs/firmware_flasher.js +++ b/src/js/tabs/firmware_flasher.js @@ -987,7 +987,15 @@ firmware_flasher.initialize = function (callback) { text: i18n.getMessage('firmwareFlasherRemindBackup'), buttonYesText: i18n.getMessage('firmwareFlasherBackup'), buttonNoText: i18n.getMessage('firmwareFlasherBackupIgnore'), - buttonYesCallback: () => AutoBackup.execute(initiateFlashing), + buttonYesCallback: () => { + // prevent connection while backup is in progress + GUI.connect_lock = true; + AutoBackup.execute(() => { + GUI.connect_lock = false; + initiateFlashing(); + }); + }, + buttonNoCallback: initiateFlashing, }, ); diff --git a/src/js/utils/AutoBackup.js b/src/js/utils/AutoBackup.js index d619448b..9543a1f6 100644 --- a/src/js/utils/AutoBackup.js +++ b/src/js/utils/AutoBackup.js @@ -51,17 +51,16 @@ class AutoBackup { serial.disconnect(); } - async save() { + async save(data) { console.log('Saving backup'); const prefix = 'cli_backup'; const suffix = 'txt'; - const text = this.outputHistory; const filename = generateFilename(prefix, suffix); FileSystem.pickSaveFile(filename, i18n.getMessage('fileSystemPickerFiles', { types: suffix.toUpperCase() }), `.${suffix}`) .then((file) => { console.log("Saving config to:", file.name); - FileSystem.writeFile(file, text); + FileSystem.writeFile(file, data); }) .catch((error) => { console.error("Error saving config:", error); @@ -81,7 +80,9 @@ class AutoBackup { setTimeout(async () => { this.sendCommand("exit", this.onClose); - await this.save(this.outputHistory); + // remove the command from the output + const data = this.outputHistory.split("\n").slice(1).join("\n"); + await this.save(data); }, 1500); }