Как добавить имена приложений и пути к списку в файле JSON через магазин электроники - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь сделать простой игровой лаунчер. Запускает одну конкретную игру и приложения-инструменты из списка, который настраивается пользователем. Используя электронный магазин и showOpenDialog, я выбираю исполняемый файл инструмента, showOpenDialog берет полный путь из Dialog, а затем превращается в var_toolName (упрощенное имя файла, path.basename + regex + replace, чтобы вырезать часть перед первым не буквенным символом) иvar_toolPath (просто полный путь, зашифрованный с помощью join ()). Обе эти переменные хранятся в конфигурационном файле через магазин электроники. Одна проблема в том, что я не знаю, как добавить следующий исполняемый файл инструмента в список, вместо того, чтобы заменить, и я пытался в течение нескольких дней.

То, что я ожидаю, что список приложений JSON внутри config.json будетищу (просто идея, а не конкретное кодирование):

  • tools: (так что я знаю, что это часть 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 голосов
/ 23 октября 2019

Сначала необходимо получить доступные инструменты, добавить к нему новый инструмент и сохранить. См. Ниже,

let _tools = appConfig.get("tools");
if(!_tools){
    _tools = {};
}

_tools[var_toolName] = var_exeToolPath;

appConfig.set(
    "tools", _tools
)

Таким образом, ожидаемый результат будет

{
   .
   .
   .,
   "tools": {
       "tool1": "D:\\tool1.jar",
       "tool2": "D:\\tool2.jar",
       "tool3": "D:\\tool3.jar"
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...