feat(core): 优化在线版下ampy和kflash的进度显示

This commit is contained in:
王立帮
2025-11-02 19:18:11 +08:00
parent e82a2bd791
commit 535abbc8e1
5 changed files with 131 additions and 34 deletions

View File

@@ -418,9 +418,7 @@ BU.burnWithKFlash = async (binFile, erase) => {
mainStatusBarTabs.changeTo('output');
BU.progressLayer.title(`${Msg.Lang['shell.burning']}...`);
BU.progressLayer.show();
statusBarTerminal.addValue(Msg.Lang['shell.bin.reading'] + "...");
statusBarTerminal.addValue("\n");
let data = [];
try {
for (let i of binFile) {
@@ -437,30 +435,32 @@ BU.burnWithKFlash = async (binFile, erase) => {
}
}
} catch (error) {
statusBarTerminal.addValue("Failed!\n" + Msg.Lang['shell.bin.readFailed'] + "\n");
statusBarTerminal.addValue("\n" + error + "\n", true);
statusBarTerminal.addValue(`\n[ERROR] ${error}\n`, true);
BU.progressLayer.hide();
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
return;
}
statusBarTerminal.addValue("Done!\n");
let serial = null;
try {
serial = new Serial(portName);
const kflash = new KFlash(serial, (message) => {
const kflash = new KFlash(serial);
kflash.bind('message', (message) => {
statusBarTerminal.addValue(message);
});
kflash.bind('replaceMessage', (lineNumber, message) => {
statusBarTerminal.replaceLine(lineNumber, message);
});
await kflash.enter();
for (let item of data) {
await kflash.write(item.data, item.address, item.sha256Prefix ?? true, item?.filename ?? 'main.bin');
}
BU.progressLayer.hide();
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
statusBarTerminal.appendLine(`==${Msg.Lang['shell.burnSucc']}==\n`);
} catch (error) {
statusBarTerminal.addValue(`[ERROR] ${error.message}\n`);
statusBarTerminal.appendLine(`[ERROR] ${error.message}\n`);
BU.progressLayer.hide();
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
statusBarTerminal.appendLine(`==${Msg.Lang['shell.burnFailed']}==\n`);
} finally {
try {
serial && await serial.close();
@@ -640,7 +640,7 @@ BU.uploadWithAmpy = async (portName) => {
let statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
BU.burning = false;
BU.uploading = true;
statusBarTerminal.setValue(Msg.Lang['shell.uploading'] + '...\n');
statusBarTerminal.setValue(`${Msg.Lang['shell.uploading']}...\n`);
mainStatusBarTabs.show();
mainStatusBarTabs.changeTo('output');
const mainWorkspace = Workspace.getMain();
@@ -650,12 +650,21 @@ BU.uploadWithAmpy = async (portName) => {
BU.progressLayer.show();
const serial = new Serial(portName);
const ampy = new Ampy(serial);
ampy.bind('message', (message) => {
statusBarTerminal.addValue(message);
});
ampy.bind('replaceMessage', (lineNumber, message) => {
statusBarTerminal.replaceLine(lineNumber, message);
});
const code = editor.getCode();
let closePromise = Promise.resolve();
if (statusBarSerial) {
closePromise = statusBarSerial.close();
}
try {
await closePromise;
await ampy.enter();
await ampy.put('main.py', code);
/*const importsMap = BU.getImportModules(code);
let libraries = {};
for (let key in importsMap) {
@@ -665,13 +674,8 @@ BU.uploadWithAmpy = async (portName) => {
data,
size: importsMap[key]['__size__']
};
}*/
await closePromise;
await ampy.enter();
statusBarTerminal.addValue('Writing main.py ');
await ampy.put('main.py', code);
statusBarTerminal.addValue('Done!\n');
/*const cwd = await ampy.cwd();
}
let cwd = await ampy.cwd();
const rootInfo = await ampy.ls(cwd);
let rootMap = {};
for (let item of rootInfo) {
@@ -683,19 +687,17 @@ BU.uploadWithAmpy = async (portName) => {
if (libraries && libraries instanceof Object) {
for (let key in libraries) {
if (rootMap[`${cwd}/${key}`] !== undefined && rootMap[`${cwd}/${key}`] === libraries[key].size) {
statusBarTerminal.addValue(`Skip ${key}\n`);
statusBarTerminal.addValue(`Writing ${key} (Skipped)\n`);
continue;
}
statusBarTerminal.addValue(`Writing ${key} `);
await ampy.put(key, libraries[key].data);
statusBarTerminal.addValue('Done!\n');
}
}*/
await ampy.exit();
await ampy.dispose();
BU.progressLayer.hide();
layer.msg(Msg.Lang['shell.uploadSucc'], { time: 1000 });
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadSucc']}==\n`);
statusBarTerminal.appendLine(`==${Msg.Lang['shell.uploadSucc']}==\n`);
if (!statusBarSerial) {
mainStatusBarTabs.add('serial', portName);
statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
@@ -707,8 +709,8 @@ BU.uploadWithAmpy = async (portName) => {
ampy.dispose();
BU.progressLayer.hide();
Debug.error(error);
statusBarTerminal.addValue(`${error}\n`);
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
statusBarTerminal.appendLine(`[ERROR] ${error.message}\n`);
statusBarTerminal.appendLine(`==${Msg.Lang['shell.uploadFailed']}==\n`);
}
}