From 7686a60bfd8d6af3f98066b386969e16b7915fa3 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 4 Jan 2024 12:10:01 +0100 Subject: [PATCH] Added log file --- .gitignore | 26 ++++----- manager/ejs/result.ejs | 4 +- manager/javascripts/connections.js | 3 +- manager/javascripts/dcsinstance.js | 53 +++++++++--------- manager/javascripts/filesystem.js | 80 ++++++++++++++++------------ manager/javascripts/installations.js | 3 +- manager/javascripts/instances.js | 5 +- manager/javascripts/manager.js | 15 ++++-- manager/javascripts/menu.js | 3 +- manager/javascripts/net.js | 3 +- manager/javascripts/passwords.js | 3 +- manager/javascripts/preload.js | 36 ++++++------- manager/javascripts/result.js | 7 +-- 13 files changed, 135 insertions(+), 106 deletions(-) diff --git a/.gitignore b/.gitignore index b0c4c8ef..ad58063c 100644 --- a/.gitignore +++ b/.gitignore @@ -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 \ No newline at end of file +!client/bin \ No newline at end of file diff --git a/manager/ejs/result.ejs b/manager/ejs/result.ejs index d644ade4..0e8ca129 100644 --- a/manager/ejs/result.ejs +++ b/manager/ejs/result.ejs @@ -118,11 +118,11 @@
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.
- Please make sure DCS is not currently being executed + Please make sure DCS is not currently being executed. Check <%= logLocation %> for more info.
diff --git a/manager/javascripts/connections.js b/manager/javascripts/connections.js index 1e36bfaa..9383f6ab 100644 --- a/manager/javascripts/connections.js +++ b/manager/javascripts/connections.js @@ -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); } }); diff --git a/manager/javascripts/dcsinstance.js b/manager/javascripts/dcsinstance.js index e983e2e2..0a8842ab 100644 --- a/manager/javascripts/dcsinstance.js +++ b/manager/javascripts/dcsinstance.js @@ -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.

You can find more info in ${path.join(__dirname, "..", "manager.log")}`, () => { location.reload(); }); } diff --git a/manager/javascripts/filesystem.js b/manager/javascripts/filesystem.js index ece7bd6e..b876ddf3 100644 --- a/manager/javascripts/filesystem.js +++ b/manager/javascripts/filesystem.js @@ -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 } diff --git a/manager/javascripts/installations.js b/manager/javascripts/installations.js index 7042668f..2cab3b9e 100644 --- a/manager/javascripts/installations.js +++ b/manager/javascripts/installations.js @@ -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); } }); diff --git a/manager/javascripts/instances.js b/manager/javascripts/instances.js index 9da58f5c..f93e576e 100644 --- a/manager/javascripts/instances.js +++ b/manager/javascripts/instances.js @@ -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); } }); diff --git a/manager/javascripts/manager.js b/manager/javascripts/manager.js index 567506f7..77d2ad60 100644 --- a/manager/javascripts/manager.js +++ b/manager/javascripts/manager.js @@ -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.

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.

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.

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.

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(); diff --git a/manager/javascripts/menu.js b/manager/javascripts/menu.js index c4e255a9..1b534c10 100644 --- a/manager/javascripts/menu.js +++ b/manager/javascripts/menu.js @@ -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); } }); diff --git a/manager/javascripts/net.js b/manager/javascripts/net.js index 8248e2c9..bde54435 100644 --- a/manager/javascripts/net.js +++ b/manager/javascripts/net.js @@ -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); diff --git a/manager/javascripts/passwords.js b/manager/javascripts/passwords.js index ecc0767b..fda5ca6d 100644 --- a/manager/javascripts/passwords.js +++ b/manager/javascripts/passwords.js @@ -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); } }); diff --git a/manager/javascripts/preload.js b/manager/javascripts/preload.js index 8fd2d73e..a0b574c6 100644 --- a/manager/javascripts/preload.js +++ b/manager/javascripts/preload.js @@ -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?
Note: DCS and Olympus MUST be stopped before proceeding.
`, () => { 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?
Note: DCS and Olympus MUST be stopped before proceeding.
`, () => { 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.

You can find more info in ${path.join(__dirname, "..", "manager.log")}`, () => { exec(`start https://github.com/Pax1601/DCSOlympus/releases`, () => { ipcRenderer.send('window:close'); }) diff --git a/manager/javascripts/result.js b/manager/javascripts/result.js index b4524324..f58ab34c 100644 --- a/manager/javascripts/result.js +++ b/manager/javascripts/result.js @@ -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!"; } ); }