我正在尝试制作一个简单的游戏启动器。从用户可自定义的列表中启动一个特定的游戏和工具应用程序。使用electron-store和showOpenDialog,我选择了一个工具可执行文件,showOpenDialog从Dialog获取了完整路径,然后将其制成var_toolName(简化的文件名,path.basename + regex + replace,以在第一个非字母字符之前切出一部分), var_toolPath(只是用join()字符串化的完整路径)。这两个变量都通过电子商店存储在配置文件中。一个问题是我不知道如何将下一个工具可执行文件追加到列表中,而是替换了它,而我已经尝试了几天。
我希望config.json中的应用程序的JSON列表看起来像什么(只是一个主意,而不是特定的编码):
等,
此JSON列表的两个作用是在电子应用程序中创建一个HTMl列表(因此用户知道将与游戏一起启动哪些工具,并且可以选择打开/关闭特定工具并删除,我没有到现在为止,我猜测这需要在电子商店和ipcMain / Renderer上进行一些工作。第二个角色将包括与游戏可执行文件一起启动的工具的完整路径
用于选择工具可执行文件并将内容保存到config.json的脚本:
const AppConfig = require('electron-store')
const appConfig = new AppConfig()
const path = require('path') //for executable/game folder path manipulations
//*****************************
// add tools
//*****************************
// 1. detect button click
document.getElementById('add').addEventListener('click', addTool);
//2. select tool exe + save path
function addTool() {
dialog.showOpenDialog({
title: 'Select tool executable.',
filters: [{
name: 'Tool start file',
extensions: ['exe', 'jar']
}],
properties: ['openFile']
},
(exeFromDialog) => {
var var_exeToolPath = exeFromDialog.join(); //removes square brackets
var var_toolName = path.basename(var_exeToolPath).split(/[/._-]/g)[0];
//path.basename removes path until file, split+regex takes only first part until first character (one of ._/)
appConfig.set(
"tools", {
"toolName": var_toolName,
"toolPath": var_exeToolPath
}
)
})
}
当前config.json的外观(“工具”部分只是被替换,而不是附加)
{
"winPosition": {
"x": 1130,
"y": 480,
"width": 202,
"height": 602
},
"exePOEPath": [
"C:\\Program Files (x86)\\Grinding Gear Games\\Path of Exile\\PathOfExile_x64.exe"
],
"tools": {
"toolName": "tool3",
"toolPath": "D:\\tool3.jar"
}
}
应用程序的当前外观(列表只是假冒的填充物):
答案 0 :(得分:0)
您需要先获取可用工具,然后将新工具附加到该工具并保存 见下面,
0 1 0
1 0 1
0 1 0
因此预期的输出将是
let _tools = appConfig.get("tools");
if(!_tools){
_tools = {};
}
_tools[var_toolName] = var_exeToolPath;
appConfig.set(
"tools", _tools
)