Added log file

This commit is contained in:
Pax1601 2024-01-04 12:10:01 +01:00
parent 38027b6ff3
commit 7686a60bfd
13 changed files with 135 additions and 106 deletions

26
.gitignore vendored
View File

@ -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

View File

@ -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">

View File

@ -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);
}
});

View File

@ -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();
});
}

View File

@ -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
}

View File

@ -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);
}
});

View File

@ -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);
}
});

View File

@ -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();

View File

@ -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);
}
});

View File

@ -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);

View File

@ -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);
}
});

View File

@ -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');
})

View File

@ -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!";
}
);
}