如何通过电子商店

时间:2019-10-23 06:22:11

标签: javascript json electron

我正在尝试制作一个简单的游戏启动器。从用户可自定义的列表中启动一个特定的游戏和工具应用程序。使用electron-store和showOpenDialog,我选择了一个工具可执行文件,showOpenDialog从Dialog获取了完整路径,然后将其制成var_toolName(简化的文件名,path.basename + regex + replace,以在第一个非字母字符之前切出一部分), var_toolPath(只是用join()字符串化的完整路径)。这两个变量都通过电子商店存储在配置文件中。一个问题是我不知道如何将下一个工具可执行文件追加到列表中,而是替换了它,而我已经尝试了几天。

我希望config.json中的应用程序的JSON列表看起来像什么(只是一个主意,而不是特定的编码):

  • 工具:(所以我知道它是config.json的一部分,与应用程序列表有关,整个config.json很少存储一些简单的内容,例如窗口位置,游戏可执行路径)
    • toolName1
      • toolPath1
    • toolName2
      • toolPath2
    • toolName3
      • toolPath3

等,

此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"
    }
}

应用程序的当前外观(列表只是假冒的填充物):

enter image description here

1 个答案:

答案 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
)