Save and restore settings, including profiles.
This commit is contained in:
parent
b99491909b
commit
8bd505da36
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
|
@ -17,7 +19,6 @@ settings.state = {
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.checkDir = async function () {
|
settings.checkDir = async function () {
|
||||||
'use strict';
|
|
||||||
const dir = path.join(os.homedir(), '.mcopy/');
|
const dir = path.join(os.homedir(), '.mcopy/');
|
||||||
const exists = await fs.exists(dir)
|
const exists = await fs.exists(dir)
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
|
@ -32,7 +33,6 @@ settings.checkDir = async function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.save = async function () {
|
settings.save = async function () {
|
||||||
'use strict';
|
|
||||||
const str = JSON.stringify(settings.state, null, '\t');
|
const str = JSON.stringify(settings.state, null, '\t');
|
||||||
settings.checkDir();
|
settings.checkDir();
|
||||||
try {
|
try {
|
||||||
|
@ -42,22 +42,18 @@ settings.save = async function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settings.update = function (key, val) {
|
settings.update = function (key, val) {
|
||||||
'use strict';
|
|
||||||
settings.state[key] = val;
|
settings.state[key] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.get = function (key) {
|
settings.get = function (key) {
|
||||||
'use strict';
|
|
||||||
return settings.state[key];
|
return settings.state[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.all = function () {
|
settings.all = function () {
|
||||||
'use strict';
|
|
||||||
return settings.state;
|
return settings.state;
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.restore = async function () {
|
settings.restore = async function () {
|
||||||
'use strict';
|
|
||||||
let exists;
|
let exists;
|
||||||
let str;
|
let str;
|
||||||
|
|
||||||
|
@ -73,7 +69,6 @@ settings.restore = async function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.reset = async function () {
|
settings.reset = async function () {
|
||||||
'use strict';
|
|
||||||
const exists = await fs.exists(settings.file);
|
const exists = await fs.exists(settings.file);
|
||||||
if (exists) {
|
if (exists) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
|
|
||||||
var devices = {};
|
var devices = {};
|
||||||
|
|
||||||
devices.init = function () {
|
devices.init = function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
devices.listen();;
|
devices.listen();
|
||||||
devices.profiles();
|
devices.profiles();
|
||||||
gui.overlay(true);
|
gui.overlay(true);
|
||||||
gui.spinner(true, 'Checking for connected devices...');
|
gui.spinner(true, 'Checking for connected devices...');
|
||||||
};
|
};
|
||||||
devices.profiles = function () {
|
devices.profiles = function () {
|
||||||
|
'use strict';
|
||||||
const keys = Object.keys(mcopy.cfg.profiles);
|
const keys = Object.keys(mcopy.cfg.profiles);
|
||||||
const elem = $('#profile')
|
const elem = $('#profile')
|
||||||
let opt;
|
let opt;
|
||||||
|
@ -21,10 +21,10 @@ devices.profiles = function () {
|
||||||
}
|
}
|
||||||
elem.on('change', (t) => {
|
elem.on('change', (t) => {
|
||||||
devices.profile($('#profile').val());
|
devices.profile($('#profile').val());
|
||||||
})
|
});
|
||||||
devices.profile(keys[0]);
|
|
||||||
};
|
};
|
||||||
devices.profile = function (profile) {
|
devices.profile = function (profile) {
|
||||||
|
'use strict';
|
||||||
log.info(`Changed configuration profile to "${profile}"`, 'DEVICES', true, true);
|
log.info(`Changed configuration profile to "${profile}"`, 'DEVICES', true, true);
|
||||||
const p = mcopy.cfg.profiles[profile];
|
const p = mcopy.cfg.profiles[profile];
|
||||||
const keys = Object.keys(p);
|
const keys = Object.keys(p);
|
||||||
|
|
13
app/main.js
13
app/main.js
|
@ -23,6 +23,7 @@ const Server = require('server')
|
||||||
const Intval = require('intval')
|
const Intval = require('intval')
|
||||||
const delay = require('delay')
|
const delay = require('delay')
|
||||||
|
|
||||||
|
//Objects
|
||||||
const mcopy = {}
|
const mcopy = {}
|
||||||
const log = {}
|
const log = {}
|
||||||
const proj = {}
|
const proj = {}
|
||||||
|
@ -48,6 +49,12 @@ let ffprobe
|
||||||
mcopy.cfg = require('./data/cfg.json')
|
mcopy.cfg = require('./data/cfg.json')
|
||||||
mcopy.settings = {}
|
mcopy.settings = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
dev.init = function () {
|
dev.init = function () {
|
||||||
dev.listen()
|
dev.listen()
|
||||||
}
|
}
|
||||||
|
@ -798,6 +805,9 @@ var init = async function () {
|
||||||
createWindow()
|
createWindow()
|
||||||
createMenu()
|
createMenu()
|
||||||
|
|
||||||
|
await settings.restore()
|
||||||
|
mcopy.settings = await settings.all()
|
||||||
|
|
||||||
log.init()
|
log.init()
|
||||||
light.init()
|
light.init()
|
||||||
proj.init()
|
proj.init()
|
||||||
|
@ -816,8 +826,7 @@ var init = async function () {
|
||||||
arduino = require('./lib/arduino')(mcopy.cfg, ee)
|
arduino = require('./lib/arduino')(mcopy.cfg, ee)
|
||||||
mscript = require('./lib/mscript')
|
mscript = require('./lib/mscript')
|
||||||
|
|
||||||
settings.restore()
|
|
||||||
mcopy.settings = settings.all()
|
|
||||||
|
|
||||||
await delay(2000)
|
await delay(2000)
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -329,6 +329,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"argparse": {
|
||||||
|
"version": "1.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||||
|
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||||
|
"requires": {
|
||||||
|
"sprintf-js": "~1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"argv-tools": {
|
"argv-tools": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
|
||||||
|
@ -656,8 +664,15 @@
|
||||||
"bluebird": {
|
"bluebird": {
|
||||||
"version": "3.5.3",
|
"version": "3.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
|
||||||
"integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
|
"integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
|
||||||
"dev": true
|
},
|
||||||
|
"bluebird-lst": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==",
|
||||||
|
"requires": {
|
||||||
|
"bluebird": "^3.5.2"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"bplist-creator": {
|
"bplist-creator": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.7",
|
||||||
|
@ -738,14 +753,34 @@
|
||||||
"buffer-from": {
|
"buffer-from": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
||||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
|
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"buffers": {
|
"buffers": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
|
||||||
"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
|
"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
|
||||||
},
|
},
|
||||||
|
"builder-util-runtime": {
|
||||||
|
"version": "8.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz",
|
||||||
|
"integrity": "sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==",
|
||||||
|
"requires": {
|
||||||
|
"bluebird-lst": "^1.0.6",
|
||||||
|
"debug": "^4.1.1",
|
||||||
|
"fs-extra-p": "^7.0.0",
|
||||||
|
"sax": "^1.2.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"builtin-modules": {
|
"builtin-modules": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
||||||
|
@ -1983,6 +2018,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"electron-updater": {
|
||||||
|
"version": "4.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.0.6.tgz",
|
||||||
|
"integrity": "sha512-JPGLME6fxJcHG8hX7HWFl6Aew6iVm0DkcrENreKa5SUJCHG+uUaAhxDGDt+YGcNkyx1uJ6eBGMvFxDTLUv67pg==",
|
||||||
|
"requires": {
|
||||||
|
"bluebird-lst": "^1.0.6",
|
||||||
|
"builder-util-runtime": "~8.1.0",
|
||||||
|
"fs-extra-p": "^7.0.0",
|
||||||
|
"js-yaml": "^3.12.0",
|
||||||
|
"lazy-val": "^1.0.3",
|
||||||
|
"lodash.isequal": "^4.5.0",
|
||||||
|
"pako": "^1.0.7",
|
||||||
|
"semver": "^5.6.0",
|
||||||
|
"source-map-support": "^0.5.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
"electron-wix-msi": {
|
"electron-wix-msi": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/electron-wix-msi/-/electron-wix-msi-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/electron-wix-msi/-/electron-wix-msi-2.1.1.tgz",
|
||||||
|
@ -2082,6 +2133,11 @@
|
||||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"esprima": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||||
|
},
|
||||||
"exec": {
|
"exec": {
|
||||||
"version": "file:lib/exec"
|
"version": "file:lib/exec"
|
||||||
},
|
},
|
||||||
|
@ -2596,6 +2652,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fs-extra-p": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==",
|
||||||
|
"requires": {
|
||||||
|
"bluebird-lst": "^1.0.6",
|
||||||
|
"fs-extra": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fs-minipass": {
|
"fs-minipass": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
|
||||||
|
@ -3972,6 +4037,15 @@
|
||||||
"integrity": "sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs=",
|
"integrity": "sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"js-yaml": {
|
||||||
|
"version": "3.12.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
|
||||||
|
"integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
|
||||||
|
"requires": {
|
||||||
|
"argparse": "^1.0.7",
|
||||||
|
"esprima": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"js2xmlparser": {
|
"js2xmlparser": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
|
||||||
|
@ -4132,6 +4206,11 @@
|
||||||
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
|
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"lazy-val": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg=="
|
||||||
|
},
|
||||||
"lcid": {
|
"lcid": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
|
||||||
|
@ -4340,6 +4419,11 @@
|
||||||
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
|
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"lodash.isequal": {
|
||||||
|
"version": "4.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||||
|
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
|
||||||
|
},
|
||||||
"lodash.keys": {
|
"lodash.keys": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
|
||||||
|
@ -5304,6 +5388,11 @@
|
||||||
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
|
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"pako": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA=="
|
||||||
|
},
|
||||||
"parse-author": {
|
"parse-author": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
|
||||||
|
@ -6461,6 +6550,22 @@
|
||||||
"urix": "^0.1.0"
|
"urix": "^0.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"source-map-support": {
|
||||||
|
"version": "0.5.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
|
||||||
|
"integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
|
||||||
|
"requires": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"source-map-url": {
|
"source-map-url": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
||||||
|
@ -6551,6 +6656,11 @@
|
||||||
"extend-shallow": "^3.0.0"
|
"extend-shallow": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sprintf-js": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
|
||||||
|
},
|
||||||
"sqlite3": {
|
"sqlite3": {
|
||||||
"version": "4.0.4",
|
"version": "4.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.4.tgz",
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
"capture": "file:lib/capture",
|
"capture": "file:lib/capture",
|
||||||
"delay": "file:lib/delay",
|
"delay": "file:lib/delay",
|
||||||
"display": "file:lib/display",
|
"display": "file:lib/display",
|
||||||
|
"electron-updater": "^4.0.6",
|
||||||
"exec": "file:lib/exec",
|
"exec": "file:lib/exec",
|
||||||
"exit": "file:lib/exit",
|
"exit": "file:lib/exit",
|
||||||
"ffmpeg": "file:lib/ffmpeg",
|
"ffmpeg": "file:lib/ffmpeg",
|
||||||
|
|
Loading…
Reference in New Issue