mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
Added log file
This commit is contained in:
parent
38027b6ff3
commit
7686a60bfd
26
.gitignore
vendored
26
.gitignore
vendored
@ -1,32 +1,32 @@
|
||||
bin
|
||||
.vs
|
||||
x64
|
||||
/backend/vcpkg_installed
|
||||
*.user
|
||||
Output
|
||||
*.aps
|
||||
node_modules
|
||||
|
||||
/backend/vcpkg_installed
|
||||
|
||||
/client/TODO.txt
|
||||
/client/public/javascripts/bundle.js
|
||||
!client/bin
|
||||
/client/public/plugins
|
||||
/client/plugins/controltips/index.js
|
||||
hgt
|
||||
/client/public/databases/units/old
|
||||
/client/plugins/databasemanager/index.js
|
||||
|
||||
/src/html
|
||||
/src/latex
|
||||
client/public/stylesheets/leaflet/leaflet-gesture-handling.css
|
||||
client/public/javascripts/leaflet.nauticscale.js
|
||||
client/public/javascripts/L.Path.Drag.js
|
||||
/installer/archive/Scripts
|
||||
/installer/archive/Mods
|
||||
/installer/installer/DCSOlympus*.exe
|
||||
|
||||
/hgt
|
||||
/package
|
||||
/build
|
||||
/DCS Olympus backups
|
||||
|
||||
*.user
|
||||
*.aps
|
||||
|
||||
L.Path.Drag.js
|
||||
leaflet-gesture-handling.css
|
||||
leaflet.nauticscale.js
|
||||
package-lock.json
|
||||
|
||||
/package
|
||||
/build
|
||||
!client/bin
|
||||
@ -118,11 +118,11 @@
|
||||
|
||||
<div class="info success hide">
|
||||
You may now start DCS and use Olympus either with the shortcuts or the "View and manage instances" entry in the
|
||||
main menu
|
||||
main menu.
|
||||
</div>
|
||||
|
||||
<div class="info error hide">
|
||||
Please make sure DCS is not currently being executed
|
||||
Please make sure DCS is not currently being executed. Check <%= logLocation %> for more info.
|
||||
</div>
|
||||
|
||||
<div class="result">
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
/** Connections page, allows the user to set the ports and address for each Olympus instance
|
||||
*
|
||||
@ -43,7 +44,7 @@ class ConnectionsPage extends ManagerPage {
|
||||
this.setClientPort(this.instance.clientPort);
|
||||
this.setBackendPort(this.instance.backendPort);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ const { spawn } = require('child_process');
|
||||
const find = require('find-process');
|
||||
const { uninstallInstance } = require('./filesystem')
|
||||
const { showErrorPopup, showConfirmPopup } = require('./popup')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class DCSInstance {
|
||||
static instances = null;
|
||||
@ -51,7 +52,7 @@ class DCSInstance {
|
||||
|
||||
res(instances);
|
||||
} else {
|
||||
console.error("An error occured while trying to fetch the location of the DCS instances.")
|
||||
logger.error("An error occured while trying to fetch the location of the DCS instances.")
|
||||
rej("An error occured while trying to fetch the location of the DCS instances.");
|
||||
}
|
||||
}
|
||||
@ -92,7 +93,7 @@ class DCSInstance {
|
||||
this.backendAddress = config["server"]["address"];
|
||||
this.gameMasterPasswordHash = config["authentication"]["gameMasterPassword"];
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
logger.error(err)
|
||||
}
|
||||
|
||||
/* Compare the contents of the installed Olympus instance and the one in the root folder. Exclude the databases folder, which users can edit.
|
||||
@ -112,7 +113,7 @@ class DCSInstance {
|
||||
err1 = res1.differences !== 0;
|
||||
err2 = res2.differences !== 0;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
logger.log(e);
|
||||
}
|
||||
|
||||
if (err1 || err2) {
|
||||
@ -155,7 +156,7 @@ class DCSInstance {
|
||||
*/
|
||||
async setClientPort(newPort) {
|
||||
if (await this.checkClientPort(newPort)) {
|
||||
console.log(`Instance ${this.folder} client port set to ${newPort}`)
|
||||
logger.log(`Instance ${this.folder} client port set to ${newPort}`)
|
||||
this.clientPort = newPort;
|
||||
return true;
|
||||
}
|
||||
@ -167,7 +168,7 @@ class DCSInstance {
|
||||
*/
|
||||
async setBackendPort(newPort) {
|
||||
if (await this.checkBackendPort(newPort)) {
|
||||
console.log(`Instance ${this.folder} client port set to ${newPort}`)
|
||||
logger.log(`Instance ${this.folder} client port set to ${newPort}`)
|
||||
this.backendPort = newPort;
|
||||
return true;
|
||||
}
|
||||
@ -212,12 +213,12 @@ class DCSInstance {
|
||||
portFree = !(await DCSInstance.getInstances()).some((instance) => {
|
||||
if (instance !== this && instance.installed) {
|
||||
if (instance.clientPort === port || instance.backendPort === port) {
|
||||
console.log(`Port ${port} already selected by other instance`);
|
||||
logger.log(`Port ${port} already selected by other instance`);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (instance.backendPort === port) {
|
||||
console.log(`Port ${port} equal to backend port`);
|
||||
logger.log(`Port ${port} equal to backend port`);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -225,7 +226,7 @@ class DCSInstance {
|
||||
})
|
||||
}
|
||||
else {
|
||||
console.log(`Port ${port} currently in use`);
|
||||
logger.log(`Port ${port} currently in use`);
|
||||
}
|
||||
res(portFree);
|
||||
})
|
||||
@ -243,19 +244,19 @@ class DCSInstance {
|
||||
portFree = !(await DCSInstance.getInstances()).some((instance) => {
|
||||
if (instance !== this && instance.installed) {
|
||||
if (instance.clientPort === port || instance.backendPort === port) {
|
||||
console.log(`Port ${port} already selected by other instance`);
|
||||
logger.log(`Port ${port} already selected by other instance`);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (instance.clientPort === port) {
|
||||
console.log(`Port ${port} equal to client port`);
|
||||
logger.log(`Port ${port} equal to client port`);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
})
|
||||
} else {
|
||||
console.log(`Port ${port} currently in use`);
|
||||
logger.log(`Port ${port} currently in use`);
|
||||
}
|
||||
res(portFree);
|
||||
})
|
||||
@ -291,13 +292,15 @@ class DCSInstance {
|
||||
}, () => {
|
||||
this.backendOnline = false;
|
||||
}).then((text) => {
|
||||
var data = JSON.parse(text);
|
||||
this.fps = data.frameRate;
|
||||
this.load = data.load;
|
||||
if (text !== undefined) {
|
||||
var data = JSON.parse(text);
|
||||
this.fps = data.frameRate;
|
||||
this.load = data.load;
|
||||
}
|
||||
}, (err) => {
|
||||
console.warn(err);
|
||||
logger.warn(err);
|
||||
}).catch((err) => {
|
||||
console.warn(err);
|
||||
logger.warn(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -306,7 +309,7 @@ class DCSInstance {
|
||||
*
|
||||
*/
|
||||
startServer() {
|
||||
console.log(`Starting server for instance at ${this.folder}`)
|
||||
logger.log(`Starting server for instance at ${this.folder}`)
|
||||
const out = fs.openSync(`./${this.name}.log`, 'a');
|
||||
const err = fs.openSync(`./${this.name}.log`, 'a');
|
||||
const sub = spawn('cscript.exe', ['server.vbs', path.join(this.folder, "Config", "olympus.json")], {
|
||||
@ -322,7 +325,7 @@ class DCSInstance {
|
||||
*
|
||||
*/
|
||||
startClient() {
|
||||
console.log(`Starting client for instance at ${this.folder}`)
|
||||
logger.log(`Starting client for instance at ${this.folder}`)
|
||||
const out = fs.openSync(`./${this.name}.log`, 'a');
|
||||
const err = fs.openSync(`./${this.name}.log`, 'a');
|
||||
const sub = spawn('cscript.exe', ['client.vbs', path.join(this.folder, "Config", "olympus.json")], {
|
||||
@ -339,10 +342,10 @@ class DCSInstance {
|
||||
find('port', this.clientPort)
|
||||
.then((list) => {
|
||||
if (list.length !== 1) {
|
||||
list.length === 0 ? console.error("No processes found on the specified port") : console.error("Too many processes found on the specified port");
|
||||
list.length === 0 ? logger.error("No processes found on the specified port") : logger.error("Too many processes found on the specified port");
|
||||
} else {
|
||||
if (list[0].name.includes("node.exe")) {
|
||||
console.log(`Killing process ${list[0].name}`)
|
||||
logger.log(`Killing process ${list[0].name}`)
|
||||
try {
|
||||
process.kill(list[0].pid);
|
||||
process.kill(list[0].ppid);
|
||||
@ -351,12 +354,12 @@ class DCSInstance {
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log(list[0])
|
||||
console.error(`The process listening on the specified port has an incorrect name: ${list[0].name}`)
|
||||
logger.log(list[0])
|
||||
logger.error(`The process listening on the specified port has an incorrect name: ${list[0].name}`)
|
||||
}
|
||||
}
|
||||
}, () => {
|
||||
console.error("Error retrieving list of processes")
|
||||
logger.error("Error retrieving list of processes")
|
||||
})
|
||||
}
|
||||
|
||||
@ -368,8 +371,8 @@ class DCSInstance {
|
||||
location.reload();
|
||||
},
|
||||
(err) => {
|
||||
console.error(err)
|
||||
showErrorPopup("An error has occurred while uninstalling the Olympus instance. Make sure Olympus and DCS are not running.", () => {
|
||||
logger.error(err)
|
||||
showErrorPopup(`An error has occurred while uninstalling the Olympus instance. Make sure Olympus and DCS are not running. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`, () => {
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,22 +3,28 @@ const createShortcut = require('create-desktop-shortcuts');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { showWaitPopup } = require('./popup');
|
||||
const { Console } = require('console');
|
||||
const homeDir = require('os').homedir();
|
||||
|
||||
var output = fs.createWriteStream('./manager.log', {flags: 'a'});
|
||||
var logger = new Console(output, output);
|
||||
const date = new Date();
|
||||
output.write(` ======================= New log starting at ${date.toString()} =======================\n`);
|
||||
|
||||
/** Conveniency function to asynchronously delete a single file, with error catching
|
||||
*
|
||||
*/
|
||||
async function deleteFile(filePath) {
|
||||
console.log(`Deleting ${filePath}`);
|
||||
logger.log(`Deleting ${filePath}`);
|
||||
var promise = new Promise((res, rej) => {
|
||||
if (fs.existsSync(filePath)) {
|
||||
fs.rm(filePath, (err) => {
|
||||
if (err) {
|
||||
console.error(`Error removing ${filePath}: ${err}`)
|
||||
logger.error(`Error removing ${filePath}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Removed ${filePath}`)
|
||||
logger.log(`Removed ${filePath}`)
|
||||
res(true);
|
||||
}
|
||||
});
|
||||
@ -37,7 +43,7 @@ async function fixInstances(instances) {
|
||||
var promise = new Promise((res, rej) => {
|
||||
var instancePromises = instances.map((instance) => {
|
||||
var instancePromise = new Promise((instanceRes, instanceErr) => {
|
||||
console.log(`Fixing Olympus in ${instance.folder}`)
|
||||
logger.log(`Fixing Olympus in ${instance.folder}`)
|
||||
deleteMod(instance.folder, instance.name)
|
||||
.then(() => deleteHooks(instance.folder), (err) => { return Promise.reject(err); })
|
||||
.then(() => installMod(instance.folder, instance.name), (err) => { return Promise.reject(err); })
|
||||
@ -56,7 +62,7 @@ async function fixInstances(instances) {
|
||||
*
|
||||
*/
|
||||
async function uninstallInstance(folder, name) {
|
||||
console.log(`Uninstalling Olympus from ${folder}`)
|
||||
logger.log(`Uninstalling Olympus from ${folder}`)
|
||||
showWaitPopup("Please wait while the Olympus installation is being uninstalled.")
|
||||
var promise = new Promise((res, rej) => {
|
||||
deleteMod(folder, name)
|
||||
@ -72,15 +78,15 @@ async function uninstallInstance(folder, name) {
|
||||
*
|
||||
*/
|
||||
async function installHooks(folder) {
|
||||
console.log(`Installing hooks in ${folder}`)
|
||||
logger.log(`Installing hooks in ${folder}`)
|
||||
var promise = new Promise((res, rej) => {
|
||||
fs.cp(path.join("..", "scripts", "OlympusHook.lua"), path.join(folder, "Scripts", "Hooks", "OlympusHook.lua"), (err) => {
|
||||
if (err) {
|
||||
console.log(`Error installing hooks in ${folder}: ${err}`)
|
||||
logger.log(`Error installing hooks in ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Hooks succesfully installed in ${folder}`)
|
||||
logger.log(`Hooks succesfully installed in ${folder}`)
|
||||
res(true);
|
||||
}
|
||||
});
|
||||
@ -92,31 +98,31 @@ async function installHooks(folder) {
|
||||
*
|
||||
*/
|
||||
async function installMod(folder, name) {
|
||||
console.log(`Installing mod in ${folder}`)
|
||||
logger.log(`Installing mod in ${folder}`)
|
||||
var promise = new Promise((res, rej) => {
|
||||
fs.cp(path.join("..", "mod"), path.join(folder, "Mods", "Services", "Olympus"), { recursive: true }, (err) => {
|
||||
if (err) {
|
||||
console.log(`Error installing mod in ${folder}: ${err}`)
|
||||
logger.log(`Error installing mod in ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Mod succesfully installed in ${folder}`)
|
||||
logger.log(`Mod succesfully installed in ${folder}`)
|
||||
|
||||
/* Check if backup user-editable files exist. If true copy them over */
|
||||
try {
|
||||
console.log(__dirname)
|
||||
console.log(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"));
|
||||
logger.log(__dirname)
|
||||
logger.log(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"));
|
||||
if (fs.existsSync(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"))) {
|
||||
console.log("Backup databases found, copying over");
|
||||
fs.cpSync(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"), path.join(folder, "Mods", "Services", "Olympus", "databases"));
|
||||
logger.log("Backup databases found, copying over");
|
||||
fs.cpSync(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"), path.join(folder, "Mods", "Services", "Olympus", "databases"), {recursive: true});
|
||||
}
|
||||
|
||||
if (fs.existsSync(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "scripts", "mods.lua"))) {
|
||||
console.log("Backup mods.lua found, copying over");
|
||||
logger.log("Backup mods.lua found, copying over");
|
||||
fs.cpSync(path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "scripts", "mods.lua"), path.join(folder, "Mods", "Services", "Olympus", "scripts", "mods.lua"));
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(`Error installing mod in ${folder}: ${err}`)
|
||||
logger.log(`Error installing mod in ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
|
||||
@ -131,15 +137,15 @@ async function installMod(folder, name) {
|
||||
*
|
||||
*/
|
||||
async function installJSON(folder) {
|
||||
console.log(`Installing config in ${folder}`)
|
||||
logger.log(`Installing config in ${folder}`)
|
||||
var promise = new Promise((res, rej) => {
|
||||
fs.cp(path.join("..", "olympus.json"), path.join(folder, "Config", "olympus.json"), (err) => {
|
||||
if (err) {
|
||||
console.log(`Error installing config in ${folder}: ${err}`)
|
||||
logger.log(`Error installing config in ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Config succesfully installed in ${folder}`)
|
||||
logger.log(`Config succesfully installed in ${folder}`)
|
||||
res(true);
|
||||
}
|
||||
});
|
||||
@ -151,7 +157,7 @@ async function installJSON(folder) {
|
||||
*
|
||||
*/
|
||||
async function installShortCuts(folder, name) {
|
||||
console.log(`Installing shortcuts for Olympus in ${folder}`);
|
||||
logger.log(`Installing shortcuts for Olympus in ${folder}`);
|
||||
var promise = new Promise((res, rej) => {
|
||||
var res1 = createShortcut({
|
||||
windows: {
|
||||
@ -208,7 +214,7 @@ async function installShortCuts(folder, name) {
|
||||
*
|
||||
*/
|
||||
async function applyConfiguration(folder, instance) {
|
||||
console.log(`Applying configuration to Olympus in ${folder}`);
|
||||
logger.log(`Applying configuration to Olympus in ${folder}`);
|
||||
var promise = new Promise((res, rej) => {
|
||||
if (fs.existsSync(path.join(folder, "Config", "olympus.json"))) {
|
||||
var config = JSON.parse(fs.readFileSync(path.join(folder, "Config", "olympus.json")));
|
||||
@ -222,11 +228,11 @@ async function applyConfiguration(folder, instance) {
|
||||
|
||||
fs.writeFile(path.join(folder, "Config", "olympus.json"), JSON.stringify(config, null, 4), (err) => {
|
||||
if (err) {
|
||||
console.log(`Error applying config in ${folder}: ${err}`)
|
||||
logger.log(`Error applying config in ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Config succesfully applied in ${folder}`)
|
||||
logger.log(`Config succesfully applied in ${folder}`)
|
||||
res(true);
|
||||
}
|
||||
});
|
||||
@ -243,7 +249,7 @@ async function applyConfiguration(folder, instance) {
|
||||
*
|
||||
*/
|
||||
async function deleteHooks(folder) {
|
||||
console.log(`Deleting hooks from ${folder}`);
|
||||
logger.log(`Deleting hooks from ${folder}`);
|
||||
return deleteFile(path.join(folder, "Scripts", "Hooks", "OlympusHook.lua"));
|
||||
}
|
||||
|
||||
@ -251,21 +257,28 @@ async function deleteHooks(folder) {
|
||||
*
|
||||
*/
|
||||
async function deleteMod(folder, name) {
|
||||
console.log(`Deleting mod from ${folder}`);
|
||||
logger.log(`Deleting mod from ${folder}`);
|
||||
var promise = new Promise((res, rej) => {
|
||||
if (fs.existsSync(path.join(folder, "Mods", "Services", "Olympus"))) {
|
||||
/* Make a copy of the user-editable files */
|
||||
fs.cpSync(path.join(folder, "Mods", "Services", "Olympus", "databases"), path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"));
|
||||
fs.cpSync(path.join(folder, "Mods", "Services", "Olympus", "scripts", "mods.lua"), path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "scripts", "mods.lua"));
|
||||
if (fs.existsSync(path.join(folder, "Mods", "Services", "Olympus", "databases")))
|
||||
fs.cpSync(path.join(folder, "Mods", "Services", "Olympus", "databases"), path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "databases"), {recursive: true});
|
||||
else
|
||||
logger.warn(`No database folder found in ${folder}, skipping backup...`)
|
||||
|
||||
if (fs.existsSync(path.join(folder, "Mods", "Services", "Olympus", "scripts", "mods.lua")))
|
||||
fs.cpSync(path.join(folder, "Mods", "Services", "Olympus", "scripts", "mods.lua"), path.join(__dirname, "..", "..", "..", "DCS Olympus backups", name, "scripts", "mods.lua"));
|
||||
else
|
||||
logger.warn(`No mods.lua found in ${folder}, skipping backup...`)
|
||||
|
||||
/* Remove the mod folder */
|
||||
fs.rmdir(path.join(folder, "Mods", "Services", "Olympus"), { recursive: true, force: true }, (err) => {
|
||||
if (err) {
|
||||
console.log(`Error removing mod from ${folder}: ${err}`)
|
||||
logger.log(`Error removing mod from ${folder}: ${err}`)
|
||||
rej(err);
|
||||
}
|
||||
else {
|
||||
console.log(`Mod succesfully removed from ${folder}`)
|
||||
logger.log(`Mod succesfully removed from ${folder}`)
|
||||
res(true);
|
||||
}
|
||||
})
|
||||
@ -280,7 +293,7 @@ async function deleteMod(folder, name) {
|
||||
*
|
||||
*/
|
||||
async function deleteJSON(folder) {
|
||||
console.log(`Deleting JSON from ${folder}`);
|
||||
logger.log(`Deleting JSON from ${folder}`);
|
||||
return deleteFile(path.join(folder, "Config", "olympus.json"));
|
||||
}
|
||||
|
||||
@ -288,7 +301,7 @@ async function deleteJSON(folder) {
|
||||
*
|
||||
*/
|
||||
async function deleteShortCuts(folder, name) {
|
||||
console.log(`Deleting ShortCuts from ${folder}`);
|
||||
logger.log(`Deleting ShortCuts from ${folder}`);
|
||||
var promise = new Promise((res, rej) => {
|
||||
deleteFile(path.join(folder, `DCS Olympus Server (${name}).lnk`))
|
||||
.then(deleteFile(path.join(folder, `DCS Olympus Client (${name}).lnk`)), (err) => { return Promise.reject(err); })
|
||||
@ -310,5 +323,6 @@ module.exports = {
|
||||
deleteJSON: deleteJSON,
|
||||
deleteMod: deleteMod,
|
||||
deleteShortCuts: deleteShortCuts,
|
||||
uninstallInstance: uninstallInstance
|
||||
uninstallInstance: uninstallInstance,
|
||||
logger: logger
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
const DCSInstance = require("./dcsinstance");
|
||||
const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class InstallationsPage extends ManagerPage {
|
||||
onCancelClicked;
|
||||
@ -30,7 +31,7 @@ class InstallationsPage extends ManagerPage {
|
||||
if (!err) {
|
||||
this.render(str);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs');
|
||||
const { showErrorPopup } = require("./popup");
|
||||
const { exec } = require("child_process");
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class InstancesPage extends ManagerPage {
|
||||
onCancelClicked;
|
||||
@ -40,7 +41,7 @@ class InstancesPage extends ManagerPage {
|
||||
}
|
||||
|
||||
async onEditClicked(e) {
|
||||
console.log(e.target.dataset.folder)
|
||||
logger.log(e.target.dataset.folder)
|
||||
this.setSelectedInstance((await DCSInstance.getInstances()).find((instance) => {return instance.folder === e.target.closest('.option').dataset.folder}));
|
||||
}
|
||||
|
||||
@ -64,7 +65,7 @@ class InstancesPage extends ManagerPage {
|
||||
if (!err) {
|
||||
this.render(str);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -8,6 +8,8 @@ const InstancesPage = require('./instances');
|
||||
const DCSInstance = require('./dcsinstance');
|
||||
const { showErrorPopup, showWaitPopup } = require('./popup');
|
||||
const { fixInstances } = require('./filesystem');
|
||||
const { logger } = require("./filesystem")
|
||||
const path = require("path")
|
||||
|
||||
class Manager {
|
||||
simplified = true;
|
||||
@ -36,7 +38,10 @@ class Manager {
|
||||
return instance.installed && instance.error;
|
||||
})).then(
|
||||
() => { location.reload() },
|
||||
() => { showErrorPopup("An error occurred while trying to fix your installations. Please reinstall Olympus manually."); }
|
||||
(err) => {
|
||||
logger.error(err);
|
||||
showErrorPopup(`An error occurred while trying to fix your installations. Please reinstall Olympus manually. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`);
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
@ -175,7 +180,7 @@ class Manager {
|
||||
showErrorPopup("Please make sure the selected ports are not already in use.")
|
||||
}
|
||||
} else {
|
||||
showErrorPopup("An error has occurred, please restart the Olympus Manager.")
|
||||
showErrorPopup(`An error has occurred, please restart the Olympus Manager. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`)
|
||||
}
|
||||
}
|
||||
connectionsPage.onCancelClicked = (e) => {
|
||||
@ -193,7 +198,7 @@ class Manager {
|
||||
passwordsPage.hide();
|
||||
connectionsPage.show();
|
||||
} else {
|
||||
showErrorPopup("An error has occurred, please restart the Olympus Manager.")
|
||||
showErrorPopup(`An error has occurred, please restart the Olympus Manager. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`)
|
||||
}
|
||||
}
|
||||
passwordsPage.onNextClicked = (e) => {
|
||||
@ -211,7 +216,7 @@ class Manager {
|
||||
resultPage.startInstallation();
|
||||
}
|
||||
} else {
|
||||
showErrorPopup("An error has occurred, please restart the Olympus Manager.")
|
||||
showErrorPopup(`An error has occurred, please restart the Olympus Manager. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`)
|
||||
}
|
||||
|
||||
}
|
||||
@ -222,7 +227,7 @@ class Manager {
|
||||
}
|
||||
|
||||
/* Result */
|
||||
var resultPage = new ResultPage();
|
||||
var resultPage = new ResultPage({logLocation: path.join(__dirname, "..", "manager.log")});
|
||||
resultPage.onBackClicked = (e) => {
|
||||
/* Reload the page to apply changes */
|
||||
resultPage.hide();
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class MenuPage extends ManagerPage {
|
||||
onInstallClicked;
|
||||
@ -26,7 +27,7 @@ class MenuPage extends ManagerPage {
|
||||
if (!err) {
|
||||
this.render(str);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
const portfinder = require('portfinder')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
/** Checks if a port is already in use
|
||||
*
|
||||
@ -6,7 +7,7 @@ const portfinder = require('portfinder')
|
||||
function checkPort(port, callback) {
|
||||
portfinder.getPort({ port: port, stopPort: port }, (err, res) => {
|
||||
if (err !== null) {
|
||||
console.error(`Port ${port} already in use`);
|
||||
logger.error(`Port ${port} already in use`);
|
||||
callback(false);
|
||||
} else {
|
||||
callback(true);
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class PasswordsPage extends ManagerPage {
|
||||
onBackClicked;
|
||||
@ -35,7 +36,7 @@ class PasswordsPage extends ManagerPage {
|
||||
if (!err) {
|
||||
this.render(str);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -10,11 +10,11 @@ const https = require('follow-redirects').https;
|
||||
const fs = require('fs');
|
||||
const AdmZip = require("adm-zip");
|
||||
const { Octokit } = require('octokit');
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
const VERSION = "v2.0.0";
|
||||
console.log(`Running in ${__dirname}`);
|
||||
logger.log(`Running in ${__dirname}`);
|
||||
function checkVersion() {
|
||||
|
||||
/* Check if we are running the latest version */
|
||||
const request = new Request("https://raw.githubusercontent.com/Pax1601/DCSOlympus/main/version.json");
|
||||
fetch(request).then((response) => {
|
||||
@ -26,7 +26,7 @@ function checkVersion() {
|
||||
}).then((res) => {
|
||||
/* If we are running a development version of the script (not from a compiled package), skip version checking */
|
||||
if (VERSION.includes("OLYMPUS_VERSION_NUMBER")) {
|
||||
console.log("Development build detected, skipping version checks...")
|
||||
logger.log("Development build detected, skipping version checks...")
|
||||
} else {
|
||||
/* Check if there is a newer version available */
|
||||
var reg1 = res["version"].match(/\d+/g).map((str) => { return Number(str) });
|
||||
@ -34,22 +34,22 @@ function checkVersion() {
|
||||
|
||||
/* If a newer version is available update Olympus in Release mode */
|
||||
if (reg1[0] > reg2[0] || (reg1[0] == reg2[0] && reg1[1] > reg2[1]) || (reg1[0] == reg2[0] && reg1[1] == reg2[1] && reg1[2] > reg2[2])) {
|
||||
console.log(`New version available: ${res["version"]}`);
|
||||
logger.log(`New version available: ${res["version"]}`);
|
||||
showConfirmPopup(`You are currently running DCS Olympus ${VERSION}, but ${res["version"]} is available. Do you want to update DCS Olympus automatically? <div style="max-width: 100%; color: orange">Note: DCS and Olympus MUST be stopped before proceeding.</div>`,
|
||||
() => {
|
||||
updateOlympusRelease();
|
||||
}, () => {
|
||||
console.log("Update canceled");
|
||||
logger.log("Update canceled");
|
||||
})
|
||||
}
|
||||
/* If the current version is newer than the latest release, the user is probably a developer. Ask for a beta update */
|
||||
else if (reg2[0] > reg1[0] || (reg2[0] == reg1[0] && reg2[1] > reg1[1]) || (reg2[0] == reg1[0] && reg2[1] == reg1[1] && reg2[2] > reg1[2])) {
|
||||
console.log(`Beta version detected: ${res["version"]}`);
|
||||
logger.log(`Beta version detected: ${res["version"]} vs ${VERSION}`);
|
||||
showConfirmPopup(`You are currently running DCS Olympus ${VERSION}, which is newer than the latest release version. Do you want to download the latest beta version? <div style="max-width: 100%; color: orange">Note: DCS and Olympus MUST be stopped before proceeding.</div>`,
|
||||
() => {
|
||||
updateOlympusBeta();
|
||||
}, () => {
|
||||
console.log("Update canceled");
|
||||
logger.log("Update canceled");
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -89,11 +89,11 @@ async function updateOlympusBeta() {
|
||||
}
|
||||
},
|
||||
() => {
|
||||
console.log("Update canceled");
|
||||
logger.log("Update canceled");
|
||||
});
|
||||
},
|
||||
() => {
|
||||
console.log("Update canceled");
|
||||
logger.log("Update canceled");
|
||||
})
|
||||
}
|
||||
|
||||
@ -120,9 +120,9 @@ function updateOlympus(location) {
|
||||
|
||||
/* If the location is a string, it is interpreted as a download url. Else, it is interpreted as a File (on disk)*/
|
||||
if (typeof location === "string") {
|
||||
console.log(`Updating Olympus with package from ${location}`)
|
||||
logger.log(`Updating Olympus with package from ${location}`)
|
||||
} else {
|
||||
console.log(`Updating Olympus with package from ${location.path}`)
|
||||
logger.log(`Updating Olympus with package from ${location.path}`)
|
||||
}
|
||||
|
||||
let tmpDir;
|
||||
@ -135,7 +135,7 @@ function updateOlympus(location) {
|
||||
if (typeof location === "string") {
|
||||
/* Download the file */
|
||||
const file = fs.createWriteStream(path.join(tmpDir, "temp.zip"));
|
||||
console.log(`Downloading update package in ${path.join(tmpDir, "temp.zip")}`)
|
||||
logger.log(`Downloading update package in ${path.join(tmpDir, "temp.zip")}`)
|
||||
const request = https.get(location, (response) => {
|
||||
if (response.statusCode === 200) {
|
||||
response.pipe(file);
|
||||
@ -143,14 +143,14 @@ function updateOlympus(location) {
|
||||
/* Either on success or on error close the file stream */
|
||||
file.on("finish", () => {
|
||||
file.close();
|
||||
console.log("Download completed");
|
||||
logger.log("Download completed");
|
||||
|
||||
/* Extract and copy the files */
|
||||
extractAndCopy(tmpDir);
|
||||
});
|
||||
file.on("error", (err) => {
|
||||
file.close();
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
throw Error(err);
|
||||
})
|
||||
} else {
|
||||
@ -169,7 +169,7 @@ function updateOlympus(location) {
|
||||
catch (err) {
|
||||
/* Show the failed update message */
|
||||
failUpdate();
|
||||
console.error(err)
|
||||
logger.error(err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,9 +186,9 @@ function extractAndCopy(folder) {
|
||||
2) deletes the existing installation;
|
||||
3) copies the new installation;
|
||||
4) cds into the new installation;
|
||||
5) runs the install.bat script */
|
||||
5) runs the installer.bat script */
|
||||
fs.writeFileSync(path.join(folder, 'update.bat'),
|
||||
`timeout /t 5 \nrmdir "${path.join(__dirname, "..", "..")}" /s /q \necho D|xcopy /Y /S /E "${path.join(folder, "temp")}" "${path.join(__dirname, "..", "..")}" \ncd "${path.join(__dirname, "..", "..")}" \ninstall.bat`
|
||||
`timeout /t 5 \nrmdir "${path.join(__dirname, "..", "..")}" /s /q \necho D|xcopy /Y /S /E "${path.join(folder, "temp")}" "${path.join(__dirname, "..", "..")}" \ncd "${path.join(__dirname, "..", "..")}" \ncall installer.bat`
|
||||
)
|
||||
|
||||
/* Launch the update script then close gracefully */
|
||||
@ -201,7 +201,7 @@ function extractAndCopy(folder) {
|
||||
*
|
||||
*/
|
||||
function failUpdate() {
|
||||
showErrorPopup("An error has occurred while updating Olympus. Please delete Olympus and update it manually. A browser window will open automatically on the download page.", () => {
|
||||
showErrorPopup(`An error has occurred while updating Olympus. Please delete Olympus and update it manually. A browser window will open automatically on the download page. <br><br> You can find more info in ${path.join(__dirname, "..", "manager.log")}`, () => {
|
||||
exec(`start https://github.com/Pax1601/DCSOlympus/releases`, () => {
|
||||
ipcRenderer.send('window:close');
|
||||
})
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
const { installMod, installHooks, installJSON, applyConfiguration, installShortCuts } = require("./filesystem");
|
||||
const ManagerPage = require("./managerpage");
|
||||
const ejs = require('ejs')
|
||||
const { logger } = require("./filesystem")
|
||||
|
||||
class ResultPage extends ManagerPage {
|
||||
onBackClicked;
|
||||
@ -25,7 +26,7 @@ class ResultPage extends ManagerPage {
|
||||
if (!err) {
|
||||
this.render(str);
|
||||
} else {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
@ -85,15 +86,15 @@ class ResultPage extends ManagerPage {
|
||||
this.element.querySelector(".result .success").classList.remove("hide");
|
||||
this.element.querySelector(".result .error").classList.add("hide");
|
||||
this.element.querySelector(".result .wait").classList.add("hide");
|
||||
this.element.querySelector(".page-header").innerText = "Install successfull!";
|
||||
},
|
||||
() => {
|
||||
this.element.querySelector(".summary.success").classList.add("hide");
|
||||
this.element.querySelector(".summary.error").classList.remove("hide");
|
||||
this.element.querySelector(".info.success").classList.add("hide");
|
||||
this.element.querySelector(".info.error").classList.remove("hide");
|
||||
this.element.querySelector(".result .success").classList.add("hide");
|
||||
this.element.querySelector(".result .error").classList.remove("hide");
|
||||
this.element.querySelector(".result .wait").classList.add("hide");
|
||||
this.element.querySelector(".page-header").innerText = "Install error!";
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user