feat(core): 将一些progress layer从layui调整为dialog-plus
This commit is contained in:
@@ -38,7 +38,6 @@ class Layer extends Component {
|
||||
const shadow = Layer.templates.getItem(shadowType);
|
||||
this.setContent($(shadow));
|
||||
this.#dialog_ = dialog({
|
||||
skin: 'min-dialog tips',
|
||||
padding: 0,
|
||||
...config
|
||||
});
|
||||
|
||||
@@ -1276,6 +1276,8 @@
|
||||
"Mixly.MString",
|
||||
"Mixly.Workspace",
|
||||
"Mixly.Serial",
|
||||
"Mixly.LayerProgress",
|
||||
"Mixly.Debug",
|
||||
"Mixly.Electron.Shell"
|
||||
],
|
||||
"provide": [
|
||||
@@ -1296,6 +1298,7 @@
|
||||
"Mixly.Debug",
|
||||
"Mixly.HTMLTemplate",
|
||||
"Mixly.LayerFirmware",
|
||||
"Mixly.LayerProgress",
|
||||
"Mixly.Electron.Serial"
|
||||
],
|
||||
"provide": [
|
||||
@@ -1574,6 +1577,7 @@
|
||||
"Mixly.HTMLTemplate",
|
||||
"Mixly.MString",
|
||||
"Mixly.LayerFirmware",
|
||||
"Mixly.LayerProgress",
|
||||
"Mixly.Web.Serial",
|
||||
"Mixly.Web.Ampy"
|
||||
],
|
||||
|
||||
@@ -14,6 +14,8 @@ goog.require('Mixly.Msg');
|
||||
goog.require('Mixly.MString');
|
||||
goog.require('Mixly.Workspace');
|
||||
goog.require('Mixly.Serial');
|
||||
goog.require('Mixly.LayerProgress');
|
||||
goog.require('Mixly.Debug');
|
||||
goog.require('Mixly.Electron.Shell');
|
||||
goog.provide('Mixly.Electron.ArduShell');
|
||||
|
||||
@@ -21,6 +23,7 @@ const {
|
||||
Env,
|
||||
Electron,
|
||||
LayerExt,
|
||||
Config,
|
||||
Title,
|
||||
Boards,
|
||||
MFile,
|
||||
@@ -29,7 +32,8 @@ const {
|
||||
MString,
|
||||
Workspace,
|
||||
Serial,
|
||||
Config
|
||||
LayerProgress,
|
||||
Debug
|
||||
} = Mixly;
|
||||
|
||||
const { BOARD, SOFTWARE, USER } = Config;
|
||||
@@ -46,14 +50,29 @@ const {
|
||||
} = Electron;
|
||||
|
||||
ArduShell.DEFAULT_CONFIG = goog.readJsonSync(path.join(Env.templatePath, 'json/arduino-cli-config.json'));
|
||||
|
||||
ArduShell.binFilePath = '';
|
||||
|
||||
ArduShell.shellPath = null;
|
||||
|
||||
ArduShell.shell = null;
|
||||
|
||||
ArduShell.ERROR_ENCODING = Env.currentPlatform == 'win32' ? 'cp936' : 'utf-8';
|
||||
ArduShell.binFilePath = '';
|
||||
ArduShell.shellPath = null;
|
||||
ArduShell.shell = null;
|
||||
ArduShell.compiling = false;
|
||||
ArduShell.uploading = false;
|
||||
ArduShell.killing = false;
|
||||
ArduShell.progressLayer = new LayerProgress({
|
||||
width: 200,
|
||||
cancelValue: Msg.Lang['nav.btn.stop'],
|
||||
skin: 'layui-anim layui-anim-scale',
|
||||
cancel: () => {
|
||||
if (ArduShell.killing) {
|
||||
return false;
|
||||
}
|
||||
ArduShell.progressLayer.title(`${Msg.Lang['shell.aborting']}...`);
|
||||
ArduShell.killing = true;
|
||||
ArduShell.cancel();
|
||||
return false;
|
||||
},
|
||||
cancelDisplay: false
|
||||
});
|
||||
|
||||
|
||||
ArduShell.updateShellPath = () => {
|
||||
let shellPath = path.join(Env.clientPath, 'arduino-cli');
|
||||
@@ -143,32 +162,12 @@ ArduShell.compile = (doFunc = () => {}) => {
|
||||
const code = editor.getCode();
|
||||
ArduShell.compiling = true;
|
||||
ArduShell.uploading = false;
|
||||
ArduShell.killing = false;
|
||||
const boardType = Boards.getSelectedBoardCommandParam();
|
||||
mainStatusBarTabs.show();
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.compiling'] + "...",
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: () => {
|
||||
$(".layui-layer-page").css("z-index", "198910151");
|
||||
$("#mixly-loader-btn").off("click").click(() => {
|
||||
$("#mixly-loader-btn").css('display', 'none');
|
||||
layer.title(Msg.Lang['shell.aborting'] + '...', layerNum);
|
||||
ArduShell.cancel();
|
||||
});
|
||||
},
|
||||
end: () => {
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$("layui-layer-shade" + layerNum).remove();
|
||||
$("#mixly-loader-btn").off("click");
|
||||
$("#mixly-loader-btn").css('display', 'inline-block');
|
||||
}
|
||||
});
|
||||
ArduShell.progressLayer.title(`${Msg.Lang['shell.compiling']}...`);
|
||||
ArduShell.progressLayer.show();
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.compiling'] + "...\n");
|
||||
|
||||
let myLibPath = path.join(Env.boardDirPath, "/libraries/myLib/");
|
||||
if (fs_plus.isDirectorySync(myLibPath))
|
||||
myLibPath += '\",\"';
|
||||
@@ -202,7 +201,7 @@ ArduShell.compile = (doFunc = () => {}) => {
|
||||
+ '\" \"'
|
||||
+ codePath
|
||||
+ '\" --no-color';
|
||||
ArduShell.runCmd(layerNum, 'compile', cmdStr, code, doFunc);
|
||||
ArduShell.runCmd('compile', cmdStr, code, doFunc);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,6 +213,7 @@ ArduShell.initUpload = () => {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
ArduShell.compiling = false;
|
||||
ArduShell.uploading = true;
|
||||
ArduShell.killing = false;
|
||||
const boardType = Boards.getSelectedBoardCommandParam();
|
||||
const uploadType = Boards.getSelectedBoardConfigParam('upload_method');
|
||||
let port = Serial.getSelectedPortName();
|
||||
@@ -256,28 +256,7 @@ ArduShell.upload = (boardType, port) => {
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.uploading'] + "...",
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: function () {
|
||||
$(".layui-layer-page").css("z-index", "198910151");
|
||||
$("#mixly-loader-btn").off("click").click(() => {
|
||||
$("#mixly-loader-btn").css('display', 'none');
|
||||
layer.title(Msg.Lang['shell.aborting'] + '...', layerNum);
|
||||
ArduShell.cancel();
|
||||
});
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$("layui-layer-shade" + layerNum).remove();
|
||||
$("#mixly-loader-btn").off("click");
|
||||
$("#mixly-loader-btn").css('display', 'inline-block');
|
||||
}
|
||||
});
|
||||
ArduShell.progressLayer.title(`${Msg.Lang['shell.uploading']}...`);
|
||||
mainStatusBarTabs.show();
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.uploading'] + "...\n");
|
||||
const configPath = path.join(ArduShell.shellPath, '../arduino-cli.json'),
|
||||
@@ -331,7 +310,7 @@ ArduShell.upload = (boardType, port) => {
|
||||
+ codePath
|
||||
+ '\" --no-color';
|
||||
}
|
||||
ArduShell.runCmd(layerNum, 'upload', cmdStr, code, () => {
|
||||
ArduShell.runCmd('upload', cmdStr, code, () => {
|
||||
if (!Serial.portIsLegal(port)) {
|
||||
return;
|
||||
}
|
||||
@@ -480,7 +459,7 @@ ArduShell.writeLibFiles = (inPath) => {
|
||||
* @param cmd {String} 输入的cmd命令
|
||||
* @return void
|
||||
*/
|
||||
ArduShell.runCmd = (layerNum, type, cmd, code, sucFunc) => {
|
||||
ArduShell.runCmd = (type, cmd, code, sucFunc) => {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
const testArduinoDirPath = path.join(Env.clientPath, 'testArduino');
|
||||
@@ -500,7 +479,7 @@ ArduShell.runCmd = (layerNum, type, cmd, code, sucFunc) => {
|
||||
return ArduShell.shell.exec(cmd);
|
||||
})
|
||||
.then((info) => {
|
||||
layer.close(layerNum);
|
||||
ArduShell.progressLayer.hide();
|
||||
let message = '';
|
||||
if (info.code) {
|
||||
message = (type === 'compile' ? Msg.Lang['shell.compileFailed'] : Msg.Lang['shell.uploadFailed']);
|
||||
@@ -513,8 +492,8 @@ ArduShell.runCmd = (layerNum, type, cmd, code, sucFunc) => {
|
||||
layer.msg(message, { time: 1000 });
|
||||
})
|
||||
.catch((error) => {
|
||||
layer.close(layerNum);
|
||||
console.log(error);
|
||||
ArduShell.progressLayer.hide();
|
||||
Debug.error(error);
|
||||
})
|
||||
.finally(() => {
|
||||
statusBarTerminal.scrollToBottom();
|
||||
@@ -530,74 +509,56 @@ ArduShell.writeFile = function (readPath, writePath) {
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
ArduShell.compile(function () {
|
||||
window.setTimeout(function () {
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.saving'] + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_ALL,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: function () {
|
||||
$(".layui-layer-page").css("z-index", "198910151");
|
||||
$("#mixly-loader-btn").off("click").click(() => {
|
||||
layer.close(layerNum);
|
||||
ArduShell.cancel();
|
||||
});
|
||||
window.setTimeout(function () {
|
||||
try {
|
||||
readPath = readPath.replace(/\\/g, "/");
|
||||
writePath = writePath.replace(/\\/g, "/");
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
try {
|
||||
let writeDirPath = writePath.substring(0, writePath.lastIndexOf("."));
|
||||
let writeFileName = writePath.substring(writePath.lastIndexOf("/") + 1, writePath.lastIndexOf("."));
|
||||
let writeFileType = writePath.substring(writePath.lastIndexOf(".") + 1);
|
||||
if (!fs.existsSync(writeDirPath)) {
|
||||
fs.mkdirSync(writeDirPath);
|
||||
}
|
||||
if (fs.existsSync(writePath)) {
|
||||
fs.unlinkSync(writePath);
|
||||
}
|
||||
let readBinFilePath = readPath + "/testArduino.ino." + writeFileType;
|
||||
let binFileData = fs.readFileSync(readBinFilePath);
|
||||
fs.writeFileSync(writePath, binFileData);
|
||||
let binFileType = [
|
||||
".eep",
|
||||
".hex",
|
||||
".with_bootloader.bin",
|
||||
".with_bootloader.hex",
|
||||
".bin",
|
||||
".elf",
|
||||
".map",
|
||||
".partitions.bin",
|
||||
".bootloader.bin"
|
||||
]
|
||||
for (let i = 0; i < binFileType.length; i++) {
|
||||
let readFilePath = readPath + "/testArduino.ino" + binFileType[i];
|
||||
let writeFilePath = writeDirPath + "/" + writeFileName + binFileType[i];
|
||||
if (fs.existsSync(readFilePath)) {
|
||||
let binData = fs.readFileSync(readFilePath);
|
||||
fs.writeFileSync(writeFilePath, binData);
|
||||
}
|
||||
}
|
||||
layer.msg(Msg.Lang['shell.saveSucc'], {
|
||||
time: 1000
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
statusBarTerminal.addValue(e + "\n");
|
||||
}
|
||||
layer.close(layerNum);
|
||||
}, 500);
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$("layui-layer-shade" + layerNum).remove();
|
||||
$("#mixly-loader-btn").off("click");
|
||||
ArduShell.progressLayer.title(`${Msg.Lang['shell.saving']}...`);
|
||||
ArduShell.progressLayer.show();
|
||||
window.setTimeout(function () {
|
||||
try {
|
||||
readPath = readPath.replace(/\\/g, "/");
|
||||
writePath = writePath.replace(/\\/g, "/");
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
}
|
||||
});
|
||||
try {
|
||||
let writeDirPath = writePath.substring(0, writePath.lastIndexOf("."));
|
||||
let writeFileName = writePath.substring(writePath.lastIndexOf("/") + 1, writePath.lastIndexOf("."));
|
||||
let writeFileType = writePath.substring(writePath.lastIndexOf(".") + 1);
|
||||
if (!fs.existsSync(writeDirPath)) {
|
||||
fs.mkdirSync(writeDirPath);
|
||||
}
|
||||
if (fs.existsSync(writePath)) {
|
||||
fs.unlinkSync(writePath);
|
||||
}
|
||||
let readBinFilePath = readPath + "/testArduino.ino." + writeFileType;
|
||||
let binFileData = fs.readFileSync(readBinFilePath);
|
||||
fs.writeFileSync(writePath, binFileData);
|
||||
let binFileType = [
|
||||
".eep",
|
||||
".hex",
|
||||
".with_bootloader.bin",
|
||||
".with_bootloader.hex",
|
||||
".bin",
|
||||
".elf",
|
||||
".map",
|
||||
".partitions.bin",
|
||||
".bootloader.bin"
|
||||
]
|
||||
for (let i = 0; i < binFileType.length; i++) {
|
||||
let readFilePath = readPath + "/testArduino.ino" + binFileType[i];
|
||||
let writeFilePath = writeDirPath + "/" + writeFileName + binFileType[i];
|
||||
if (fs.existsSync(readFilePath)) {
|
||||
let binData = fs.readFileSync(readFilePath);
|
||||
fs.writeFileSync(writeFilePath, binData);
|
||||
}
|
||||
}
|
||||
layer.msg(Msg.Lang['shell.saveSucc'], {
|
||||
time: 1000
|
||||
});
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(e + "\n");
|
||||
}
|
||||
ArduShell.progressLayer.hide();
|
||||
}, 500);
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ goog.require('Mixly.Workspace');
|
||||
goog.require('Mixly.Debug');
|
||||
goog.require('Mixly.HTMLTemplate');
|
||||
goog.require('Mixly.LayerFirmware');
|
||||
goog.require('Mixly.LayerProgress');
|
||||
goog.require('Mixly.Electron.Serial');
|
||||
goog.provide('Mixly.Electron.BU');
|
||||
|
||||
@@ -26,7 +27,8 @@ const {
|
||||
Serial,
|
||||
Debug,
|
||||
HTMLTemplate,
|
||||
LayerFirmware
|
||||
LayerFirmware,
|
||||
LayerProgress
|
||||
} = Mixly;
|
||||
|
||||
const { BU } = Electron;
|
||||
@@ -66,6 +68,22 @@ BU.firmwareLayer.bind('burn', (info) => {
|
||||
const port = Serial.getSelectedPortName();
|
||||
BU.burnWithPort(port, info);
|
||||
});
|
||||
BU.killing = false;
|
||||
BU.progressLayer = new LayerProgress({
|
||||
width: 200,
|
||||
cancelValue: Msg.Lang['nav.btn.stop'],
|
||||
skin: 'layui-anim layui-anim-scale',
|
||||
cancel: () => {
|
||||
if (BU.killing) {
|
||||
return false;
|
||||
}
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.aborting']}...`);
|
||||
BU.killing = true;
|
||||
BU.cancel();
|
||||
return false;
|
||||
},
|
||||
cancelDisplay: false
|
||||
});
|
||||
|
||||
/**
|
||||
* @function 根据传入的stdout判断磁盘数量并选择对应操作
|
||||
@@ -173,11 +191,10 @@ BU.checkNumOfDisks = function (type, stdout, startPath) {
|
||||
/**
|
||||
* @function 将文件或文件夹下所有文件拷贝到指定文件夹
|
||||
* @param type {string} 值为'burn' | 'upload'
|
||||
* @param layerNum {number} 烧录或上传加载弹窗的编号,用于关闭此弹窗
|
||||
* @param startPath {string} 需要拷贝的文件或文件夹的路径
|
||||
* @param desPath {string} 文件的目的路径
|
||||
**/
|
||||
BU.copyFiles = (type, layerNum, startPath, desPath) => {
|
||||
BU.copyFiles = async (type, startPath, desPath) => {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
const { burn, upload } = SELECTED_BOARD;
|
||||
@@ -193,9 +210,9 @@ BU.copyFiles = (type, layerNum, startPath, desPath) => {
|
||||
if (fs_plus.isFileSync(startPath)) {
|
||||
desPath = path.join(desPath, path.basename(startPath));
|
||||
}
|
||||
fs_extra.copy(startPath, desPath)
|
||||
.then(() => {
|
||||
layer.close(layerNum);
|
||||
try {
|
||||
await fs_extra.copy(startPath, desPath);
|
||||
BU.progressLayer.hide();
|
||||
const message = (type === 'burn'? Msg.Lang['shell.burnSucc'] : Msg.Lang['shell.uploadSucc']);
|
||||
layer.msg(message, {
|
||||
time: 1000
|
||||
@@ -210,16 +227,14 @@ BU.copyFiles = (type, layerNum, startPath, desPath) => {
|
||||
const statusBarSerial = mainStatusBarTabs.getStatusBarById(port);
|
||||
statusBarSerial.open();
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
layer.close(layerNum);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.setValue(error + '\n');
|
||||
console.log(error);
|
||||
})
|
||||
.finally(() => {
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
});
|
||||
}
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -231,43 +246,32 @@ BU.copyFiles = (type, layerNum, startPath, desPath) => {
|
||||
BU.initWithDropdownBox = function (type, startPath) {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: (type === 'burn'? Msg.Lang['shell.burning'] : Msg.Lang['shell.uploading']) + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_ALL,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: function (layero, index) {
|
||||
$(".layui-layer-page").css("z-index","198910151");
|
||||
$("#mixly-loader-btn").off("click").click(() => {
|
||||
layer.close(index);
|
||||
BU.cancel();
|
||||
const message = (type === 'burn'? Msg.Lang['shell.burning'] : Msg.Lang['shell.uploading']);
|
||||
BU.progressLayer.title(`${message}...`);
|
||||
const desPath = $('#mixly-selector-type option:selected').val();
|
||||
if (type === 'burn') {
|
||||
BU.copyFiles(type, startPath, desPath)
|
||||
.catch((error) => {
|
||||
BU.progressLayer.hide();
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
statusBarTerminal.setValue(error + '\n');
|
||||
});
|
||||
const desPath = $('#mixly-selector-type option:selected').val();
|
||||
if (type === 'burn') {
|
||||
BU.copyFiles(type, index, startPath, desPath);
|
||||
} else {
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
fs_extra.outputFile(startPath, code)
|
||||
.then(() => {
|
||||
BU.copyFiles(type, index, startPath, desPath);
|
||||
})
|
||||
.catch((error) => {
|
||||
layer.close(index);
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
statusBarTerminal.setValue(error + '\n');
|
||||
});
|
||||
}
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$(`#layui-layer-shade${layerNum}`).remove();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
fs_extra.outputFile(startPath, code)
|
||||
.then(() => {
|
||||
return BU.copyFiles(type, startPath, desPath);
|
||||
})
|
||||
.catch((error) => {
|
||||
BU.progressLayer.hide();
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
statusBarTerminal.setValue(error + '\n');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -506,26 +510,24 @@ BU.searchLibs = function (dirPath, code, libArr) {
|
||||
|
||||
/**
|
||||
* @function 通过cmd烧录
|
||||
* @param layerNum {number} 烧录或上传加载弹窗的编号,用于关闭此弹窗
|
||||
* @param port {string} 所选择的串口
|
||||
* @param command {string} 需要执行的指令
|
||||
* @return {void}
|
||||
*/
|
||||
BU.burnByCmd = function (layerNum, port, command) {
|
||||
BU.burnByCmd = function (port, command) {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.burning'] + '...\n');
|
||||
BU.runCmd(layerNum, 'burn', port, command);
|
||||
BU.runCmd('burn', port, command);
|
||||
}
|
||||
|
||||
/**
|
||||
* @function 通过cmd上传
|
||||
* @param layerNum {number} 烧录或上传加载弹窗的编号,用于关闭此弹窗
|
||||
* @param port {string} 所选择的串口
|
||||
* @param command {string} 需要执行的指令
|
||||
* @return {void}
|
||||
*/
|
||||
BU.uploadByCmd = async function (layerNum, port, command) {
|
||||
BU.uploadByCmd = async function (port, command) {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.uploading'] + '...\n');
|
||||
@@ -539,27 +541,26 @@ BU.uploadByCmd = async function (layerNum, port, command) {
|
||||
BU.copyLib(upload.filePath, '');
|
||||
}
|
||||
fs_extra.outputFile(upload.filePath, code)
|
||||
.then(() => {
|
||||
BU.runCmd(layerNum, 'upload', port, command);
|
||||
})
|
||||
.catch((error) => {
|
||||
statusBarTerminal.setValue(error.toString() + '\n');
|
||||
console.log(error);
|
||||
layer.close(layerNum);
|
||||
BU.uploading = false;
|
||||
});
|
||||
.then(() => {
|
||||
BU.runCmd('upload', port, command);
|
||||
})
|
||||
.catch((error) => {
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.setValue(error.toString() + '\n');
|
||||
Debug.error(error);
|
||||
BU.uploading = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @function 运行cmd
|
||||
* @param layerNum {number} 烧录或上传加载弹窗的编号,用于关闭此弹窗
|
||||
* @param type {string} 值为 'burn' | 'upload'
|
||||
* @param port {string} 所选择的串口
|
||||
* @param command {string} 需要执行的指令
|
||||
* @param sucFunc {function} 指令成功执行后所要执行的操作
|
||||
* @return {void}
|
||||
*/
|
||||
BU.runCmd = function (layerNum, type, port, command, sucFunc) {
|
||||
BU.runCmd = function (type, port, command, sucFunc) {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
mainStatusBarTabs.changeTo('output');
|
||||
@@ -567,7 +568,7 @@ BU.runCmd = function (layerNum, type, port, command, sucFunc) {
|
||||
let nowCommand = MString.tpl(command, { com: port });
|
||||
|
||||
BU.shell = child_process.exec(nowCommand, { encoding: 'binary' }, function (error, stdout, stderr) {
|
||||
layer.close(layerNum);
|
||||
BU.progressLayer.hide();
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
BU.shell = null;
|
||||
@@ -605,7 +606,7 @@ BU.runCmd = function (layerNum, type, port, command, sucFunc) {
|
||||
statusBarSerial.open().catch(Debug.error);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
BU.shell.stdout.on('data', function (data) {
|
||||
if (BU.uploading || BU.burning) {
|
||||
@@ -656,48 +657,23 @@ BU.operateWithPort = (type, port, command) => {
|
||||
return;
|
||||
}
|
||||
const title = (type === 'burn' ? Msg.Lang['shell.burning'] : Msg.Lang['shell.uploading']) + '...';
|
||||
const operate = () => {
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title,
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: function (layero, index) {
|
||||
$(".layui-layer-page").css("z-index","198910151");
|
||||
switch (type) {
|
||||
case 'burn':
|
||||
BU.burnByCmd(index, port, command);
|
||||
break;
|
||||
case 'upload':
|
||||
default:
|
||||
BU.uploadByCmd(index, port, command);
|
||||
}
|
||||
$("#mixly-loader-btn").off("click").click(() => {
|
||||
$("#mixly-loader-btn").css('display', 'none');
|
||||
layer.title(Msg.Lang['shell.aborting'] + '...', index);
|
||||
BU.cancel(type);
|
||||
});
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$("layui-layer-shade" + layerNum).remove();
|
||||
$("#mixly-loader-btn").off("click");
|
||||
$("#mixly-loader-btn").css('display', 'inline-block');
|
||||
}
|
||||
});
|
||||
}
|
||||
BU.progressLayer.title(title);
|
||||
BU.progressLayer.show();
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarSerial = mainStatusBarTabs.getStatusBarById(port);
|
||||
let serialClosePromise = null;
|
||||
if (statusBarSerial) {
|
||||
statusBarSerial.close()
|
||||
.finally(() => {
|
||||
operate();
|
||||
});
|
||||
serialClosePromise = statusBarSerial.close();
|
||||
} else {
|
||||
operate();
|
||||
serialClosePromise = Promise.resolve();
|
||||
}
|
||||
serialClosePromise.finally(() => {
|
||||
if (type === 'burn') {
|
||||
BU.burnByCmd(port, command);
|
||||
} else {
|
||||
BU.uploadByCmd(port, command);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,7 @@ goog.require('Mixly.Debug');
|
||||
goog.require('Mixly.HTMLTemplate');
|
||||
goog.require('Mixly.MString');
|
||||
goog.require('Mixly.LayerFirmware');
|
||||
goog.require('Mixly.LayerProgress');
|
||||
goog.require('Mixly.Web.Serial');
|
||||
goog.require('Mixly.Web.Ampy');
|
||||
goog.provide('Mixly.Web.BU');
|
||||
@@ -36,7 +37,8 @@ const {
|
||||
Debug,
|
||||
HTMLTemplate,
|
||||
MString,
|
||||
LayerFirmware
|
||||
LayerFirmware,
|
||||
LayerProgress
|
||||
} = Mixly;
|
||||
|
||||
const {
|
||||
@@ -71,6 +73,13 @@ BU.firmwareLayer.bind('burn', (info) => {
|
||||
BU.burnWithEsptool(info, web.burn.erase);
|
||||
}
|
||||
});
|
||||
BU.progressLayer = new LayerProgress({
|
||||
width: 200,
|
||||
cancelValue: false,
|
||||
skin: 'layui-anim layui-anim-scale',
|
||||
cancel: false,
|
||||
cancelDisplay: false
|
||||
});
|
||||
|
||||
const BAUD = goog.platform() === 'darwin' ? 460800 : 921600;
|
||||
|
||||
@@ -132,9 +141,9 @@ const readBinFileAsArrayBuffer = (path, offset) => {
|
||||
});
|
||||
}
|
||||
|
||||
BU.initBurn = () => {
|
||||
BU.initBurn = async () => {
|
||||
if (['BBC micro:bit', 'Mithon CC'].includes(BOARD.boardType)) {
|
||||
BU.burnByUSB();
|
||||
await BU.burnByUSB();
|
||||
} else {
|
||||
const { web } = SELECTED_BOARD;
|
||||
const boardKey = Boards.getSelectedBoardKey();
|
||||
@@ -148,9 +157,9 @@ BU.initBurn = () => {
|
||||
BU.burnWithSpecialBin();
|
||||
} else {
|
||||
if (boardKey.indexOf('micropython:esp32s2') !== -1) {
|
||||
BU.burnWithAdafruitEsptool(web.burn.binFile, web.burn.erase);
|
||||
await BU.burnWithAdafruitEsptool(web.burn.binFile, web.burn.erase);
|
||||
} else {
|
||||
BU.burnWithEsptool(web.burn.binFile, web.burn.erase);
|
||||
await BU.burnWithEsptool(web.burn.binFile, web.burn.erase);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -214,36 +223,23 @@ BU.burnByUSB = async () => {
|
||||
const rightStr = (new Array(50 - nowProgressLen).fill('-')).join('');
|
||||
statusBarTerminal.addValue(`[${leftStr}${rightStr}] ${nowPercent}%\n`);
|
||||
});
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: `${Msg.Lang['shell.burning']}...`,
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: async (layero, index) => {
|
||||
$('#mixly-loader-btn').hide();
|
||||
try {
|
||||
await dapLink.flash(buffer);
|
||||
layer.close(index);
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
layer.close(index);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
dapLink.removeAllListeners(DAPjs.DAPLink.EVENT_PROGRESS);
|
||||
await dapLink.disconnect();
|
||||
await webUSB.close();
|
||||
await port.close();
|
||||
}
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-btn').css('display', 'inline-block');
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
}
|
||||
});
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.burning']}...`);
|
||||
BU.progressLayer.show();
|
||||
try {
|
||||
await dapLink.flash(buffer);
|
||||
BU.progressLayer.hide();
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
dapLink.removeAllListeners(DAPjs.DAPLink.EVENT_PROGRESS);
|
||||
await dapLink.disconnect();
|
||||
await webUSB.close();
|
||||
await port.close();
|
||||
}
|
||||
}
|
||||
|
||||
BU.burnWithEsptool = async (binFile, erase) => {
|
||||
@@ -274,6 +270,8 @@ BU.burnWithEsptool = async (binFile, erase) => {
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.burning'] + '...\n');
|
||||
mainStatusBarTabs.show();
|
||||
mainStatusBarTabs.changeTo('output');
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.burning']}...`);
|
||||
BU.progressLayer.show();
|
||||
let esploader = null;
|
||||
let transport = null;
|
||||
try {
|
||||
@@ -298,6 +296,7 @@ BU.burnWithEsptool = async (binFile, erase) => {
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`\n${error.toString()}\n`);
|
||||
await transport.disconnect();
|
||||
BU.progressLayer.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -319,6 +318,7 @@ BU.burnWithEsptool = async (binFile, erase) => {
|
||||
statusBarTerminal.addValue("Failed!\n" + Msg.Lang['shell.bin.readFailed'] + "!\n");
|
||||
statusBarTerminal.addValue("\n" + e + "\n", true);
|
||||
await transport.disconnect();
|
||||
BU.progressLayer.hide();
|
||||
return;
|
||||
}
|
||||
statusBarTerminal.addValue("Done!\n");
|
||||
@@ -331,39 +331,18 @@ BU.burnWithEsptool = async (binFile, erase) => {
|
||||
compress: true,
|
||||
calculateMD5Hash: (image) => CryptoJS.MD5(CryptoJS.enc.Latin1.parse(image))
|
||||
};
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.burning'] + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: async function (layero, index) {
|
||||
let cancel = false;
|
||||
$("#mixly-loader-btn").off().click(async () => {
|
||||
cancel = true;
|
||||
try {
|
||||
await transport.disconnect();
|
||||
} catch (error) {
|
||||
layer.close(index);
|
||||
Debug.error(error);
|
||||
}
|
||||
});
|
||||
try {
|
||||
await esploader.writeFlash(flashOptions);
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
layer.close(index);
|
||||
if (!cancel) {
|
||||
await transport.disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
await esploader.writeFlash(flashOptions);
|
||||
BU.progressLayer.hide();
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
await transport.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
BU.burnWithAdafruitEsptool = async (binFile, erase) => {
|
||||
@@ -394,6 +373,8 @@ BU.burnWithAdafruitEsptool = async (binFile, erase) => {
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.burning'] + '...\n');
|
||||
mainStatusBarTabs.show();
|
||||
mainStatusBarTabs.changeTo('output');
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.burning']}...`);
|
||||
BU.progressLayer.show();
|
||||
let esploader = null;
|
||||
let transport = null;
|
||||
let espStub = null;
|
||||
@@ -416,6 +397,7 @@ BU.burnWithAdafruitEsptool = async (binFile, erase) => {
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`\n${error.toString()}\n`);
|
||||
await port.close();
|
||||
BU.progressLayer.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -438,55 +420,37 @@ BU.burnWithAdafruitEsptool = async (binFile, erase) => {
|
||||
statusBarTerminal.addValue("\n" + e + "\n", true);
|
||||
await espStub.disconnect();
|
||||
await espStub.port.close();
|
||||
BU.progressLayer.hide();
|
||||
return;
|
||||
}
|
||||
statusBarTerminal.addValue("Done!\n");
|
||||
BU.burning = true;
|
||||
BU.uploading = false;
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.burning'] + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: async function (layero, index) {
|
||||
let cancel = false;
|
||||
$("#mixly-loader-btn").hide();
|
||||
try {
|
||||
if (erase) {
|
||||
await espStub.eraseFlash();
|
||||
}
|
||||
for (let file of data) {
|
||||
await espStub.flashData(
|
||||
file.data,
|
||||
(bytesWritten, totalBytes) => {
|
||||
const percent = Math.floor((bytesWritten / totalBytes) * 100) + '%';
|
||||
statusBarTerminal.addValue(`Writing at 0x${(file.address + bytesWritten).toString(16)}... (${percent})\n`);
|
||||
},
|
||||
file.address, true
|
||||
);
|
||||
}
|
||||
await espStub.disconnect();
|
||||
await espStub.port.close();
|
||||
cancel = true;
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
layer.close(index);
|
||||
if (!cancel) {
|
||||
await espStub.disconnect();
|
||||
await espStub.port.close();
|
||||
}
|
||||
}
|
||||
},
|
||||
end: function () {
|
||||
$(`#layui-layer-shade${layerNum}`).remove();
|
||||
try {
|
||||
if (erase) {
|
||||
await espStub.eraseFlash();
|
||||
}
|
||||
});
|
||||
for (let file of data) {
|
||||
await espStub.flashData(
|
||||
file.data,
|
||||
(bytesWritten, totalBytes) => {
|
||||
const percent = Math.floor((bytesWritten / totalBytes) * 100) + '%';
|
||||
statusBarTerminal.addValue(`Writing at 0x${(file.address + bytesWritten).toString(16)}... (${percent})\n`);
|
||||
},
|
||||
file.address, true
|
||||
);
|
||||
}
|
||||
BU.progressLayer.hide();
|
||||
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
|
||||
} finally {
|
||||
await espStub.disconnect();
|
||||
await espStub.port.close();
|
||||
}
|
||||
}
|
||||
|
||||
BU.getImportModulesName = (code) => {
|
||||
@@ -562,9 +526,9 @@ BU.initUpload = async () => {
|
||||
}
|
||||
}
|
||||
if (['BBC micro:bit', 'Mithon CC'].includes(BOARD.boardType)) {
|
||||
BU.uploadByUSB(portName);
|
||||
await BU.uploadByUSB(portName);
|
||||
} else {
|
||||
BU.uploadWithAmpy(portName);
|
||||
await BU.uploadWithAmpy(portName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -618,58 +582,42 @@ BU.uploadByUSB = async (portName) => {
|
||||
const data = goog.readFileSync(importsMap[key]['__path__']);
|
||||
FSWrapper.writeFile(filename, data);
|
||||
}
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.uploading'] + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: async function (layero, index) {
|
||||
$('#mixly-loader-btn').hide();
|
||||
try {
|
||||
let prevPercent = 0;
|
||||
await partialFlashing.flashAsync(new BoardId(0x9900), FSWrapper, progress => {
|
||||
const nowPercent = Math.floor(progress * 100);
|
||||
if (nowPercent > prevPercent) {
|
||||
prevPercent = nowPercent;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
const nowProgressLen = Math.floor(nowPercent / 2);
|
||||
const leftStr = new Array(nowProgressLen).fill('=').join('');
|
||||
const rightStr = (new Array(50 - nowProgressLen).fill('-')).join('');
|
||||
statusBarTerminal.addValue(`[${leftStr}${rightStr}] ${nowPercent}%\n`);
|
||||
});
|
||||
layer.close(index);
|
||||
layer.msg(Msg.Lang['shell.uploadSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadSucc']}==\n`);
|
||||
if (!statusBarSerial) {
|
||||
mainStatusBarTabs.add('serial', portName);
|
||||
statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
|
||||
}
|
||||
statusBarSerial.setValue('');
|
||||
mainStatusBarTabs.changeTo(portName);
|
||||
await statusBarSerial.open();
|
||||
} catch (error) {
|
||||
await dapWrapper.disconnectAsync();
|
||||
layer.close(index);
|
||||
console.error(error);
|
||||
statusBarTerminal.addValue(`${error}\n`);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.uploading']}...`);
|
||||
BU.progressLayer.show();
|
||||
try {
|
||||
let prevPercent = 0;
|
||||
await partialFlashing.flashAsync(new BoardId(0x9900), FSWrapper, progress => {
|
||||
const nowPercent = Math.floor(progress * 100);
|
||||
if (nowPercent > prevPercent) {
|
||||
prevPercent = nowPercent;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-btn').css('display', 'inline-block');
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$(`#layui-layer-shade${layerNum}`).remove();
|
||||
const nowProgressLen = Math.floor(nowPercent / 2);
|
||||
const leftStr = new Array(nowProgressLen).fill('=').join('');
|
||||
const rightStr = (new Array(50 - nowProgressLen).fill('-')).join('');
|
||||
statusBarTerminal.addValue(`[${leftStr}${rightStr}] ${nowPercent}%\n`);
|
||||
});
|
||||
BU.progressLayer.hide();
|
||||
layer.msg(Msg.Lang['shell.uploadSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadSucc']}==\n`);
|
||||
if (!statusBarSerial) {
|
||||
mainStatusBarTabs.add('serial', portName);
|
||||
statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
|
||||
}
|
||||
});
|
||||
statusBarSerial.setValue('');
|
||||
mainStatusBarTabs.changeTo(portName);
|
||||
await statusBarSerial.open();
|
||||
} catch (error) {
|
||||
await dapWrapper.disconnectAsync();
|
||||
Debug.error(error);
|
||||
BU.progressLayer.hide();
|
||||
statusBarTerminal.addValue(`${error}\n`);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
|
||||
}
|
||||
}
|
||||
|
||||
BU.uploadWithAmpy = (portName) => {
|
||||
BU.uploadWithAmpy = async (portName) => {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
let statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
|
||||
@@ -681,83 +629,67 @@ BU.uploadWithAmpy = (portName) => {
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const port = Serial.getPort(portName);
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.uploading'] + '...',
|
||||
content: $('#mixly-loader-div'),
|
||||
shade: LayerExt.SHADE_NAV,
|
||||
resize: false,
|
||||
closeBtn: 0,
|
||||
success: async function (layero, index) {
|
||||
$('#mixly-loader-btn').hide();
|
||||
const serial = new Serial(portName);
|
||||
const ampy = new Ampy(serial);
|
||||
const code = editor.getCode();
|
||||
let closePromise = Promise.resolve();
|
||||
if (statusBarSerial) {
|
||||
closePromise = statusBarSerial.close();
|
||||
}
|
||||
try {
|
||||
/*const importsMap = BU.getImportModules(code);
|
||||
let libraries = {};
|
||||
for (let key in importsMap) {
|
||||
const filename = importsMap[key]['__name__'];
|
||||
const data = goog.readFileSync(importsMap[key]['__path__']);
|
||||
libraries[filename] = {
|
||||
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();
|
||||
const rootInfo = await ampy.ls(cwd);
|
||||
let rootMap = {};
|
||||
for (let item of rootInfo) {
|
||||
rootMap[item[0]] = item[1];
|
||||
}
|
||||
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`);
|
||||
continue;
|
||||
}
|
||||
statusBarTerminal.addValue(`Writing ${key} `);
|
||||
await ampy.put(key, libraries[key].data);
|
||||
statusBarTerminal.addValue('Done!\n');
|
||||
}
|
||||
}*/
|
||||
await ampy.exit();
|
||||
await ampy.dispose();
|
||||
layer.close(index);
|
||||
layer.msg(Msg.Lang['shell.uploadSucc'], { time: 1000 });
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadSucc']}==\n`);
|
||||
if (!statusBarSerial) {
|
||||
mainStatusBarTabs.add('serial', portName);
|
||||
statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
|
||||
}
|
||||
statusBarSerial.setValue('');
|
||||
mainStatusBarTabs.changeTo(portName);
|
||||
await statusBarSerial.open();
|
||||
} catch (error) {
|
||||
ampy.dispose();
|
||||
layer.close(index);
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`${error}\n`);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
|
||||
}
|
||||
BU.burning = false;
|
||||
BU.uploading = false;
|
||||
},
|
||||
end: function () {
|
||||
$('#mixly-loader-btn').css('display', 'inline-block');
|
||||
$('#mixly-loader-div').css('display', 'none');
|
||||
$(`#layui-layer-shade${layerNum}`).remove();
|
||||
BU.progressLayer.title(`${Msg.Lang['shell.uploading']}...`);
|
||||
BU.progressLayer.show();
|
||||
const serial = new Serial(portName);
|
||||
const ampy = new Ampy(serial);
|
||||
const code = editor.getCode();
|
||||
let closePromise = Promise.resolve();
|
||||
if (statusBarSerial) {
|
||||
closePromise = statusBarSerial.close();
|
||||
}
|
||||
try {
|
||||
/*const importsMap = BU.getImportModules(code);
|
||||
let libraries = {};
|
||||
for (let key in importsMap) {
|
||||
const filename = importsMap[key]['__name__'];
|
||||
const data = goog.readFileSync(importsMap[key]['__path__']);
|
||||
libraries[filename] = {
|
||||
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();
|
||||
const rootInfo = await ampy.ls(cwd);
|
||||
let rootMap = {};
|
||||
for (let item of rootInfo) {
|
||||
rootMap[item[0]] = item[1];
|
||||
}
|
||||
});
|
||||
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`);
|
||||
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`);
|
||||
if (!statusBarSerial) {
|
||||
mainStatusBarTabs.add('serial', portName);
|
||||
statusBarSerial = mainStatusBarTabs.getStatusBarById(portName);
|
||||
}
|
||||
statusBarSerial.setValue('');
|
||||
mainStatusBarTabs.changeTo(portName);
|
||||
await statusBarSerial.open();
|
||||
} catch (error) {
|
||||
ampy.dispose();
|
||||
BU.progressLayer.hide();
|
||||
Debug.error(error);
|
||||
statusBarTerminal.addValue(`${error}\n`);
|
||||
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
|
||||
}
|
||||
}
|
||||
|
||||
function hexToBuf (hex) {
|
||||
|
||||
Reference in New Issue
Block a user