diff --git a/manager/javascripts/dcsinstance.js b/manager/javascripts/dcsinstance.js index b65d5405..a738a16a 100644 --- a/manager/javascripts/dcsinstance.js +++ b/manager/javascripts/dcsinstance.js @@ -3,7 +3,6 @@ const shellFoldersKey = 'HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Exp const saveGamesKey = '{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}' var fs = require('fs') var path = require('path') -const vi = require('win-version-info'); const { checkPort, fetchWithTimeout } = require('./net') const dircompare = require('dir-compare'); const { spawn } = require('child_process'); @@ -101,7 +100,7 @@ class DCSInstance { this.installed = true; const options = { compareContent: true, - excludeFilter: "databases" + excludeFilter: "databases, mods.lua" }; var err1 = true; var err2 = true; diff --git a/manager/javascripts/filesystem.js b/manager/javascripts/filesystem.js index ae108e44..6a5a7b70 100644 --- a/manager/javascripts/filesystem.js +++ b/manager/javascripts/filesystem.js @@ -38,9 +38,9 @@ async function fixInstances(instances) { var instancePromises = instances.map((instance) => { var instancePromise = new Promise((instanceRes, instanceErr) => { console.log(`Fixing Olympus in ${instance.folder}`) - deleteMod(instance.folder) + deleteMod(instance.folder, instance.name) .then(() => deleteHooks(instance.folder), (err) => { return Promise.reject(err); }) - .then(() => installMod(instance.folder), (err) => { return Promise.reject(err); }) + .then(() => installMod(instance.folder, instance.name), (err) => { return Promise.reject(err); }) .then(() => installHooks(instance.folder), (err) => { return Promise.reject(err); }) .then(() => installShortCuts(instance.folder, instance.name), (err) => { return Promise.reject(err); }) .then(() => instanceRes(true), (err) => { instanceErr(err) }) @@ -59,7 +59,7 @@ async function uninstallInstance(folder, name) { console.log(`Uninstalling Olympus from ${folder}`) showWaitPopup("Please wait while the Olympus installation is being uninstalled.") var promise = new Promise((res, rej) => { - deleteMod(folder) + deleteMod(folder, name) .then(() => deleteHooks(folder), (err) => { return Promise.reject(err); }) .then(() => deleteJSON(folder), (err) => { return Promise.reject(err); }) .then(() => deleteShortCuts(folder, name), (err) => { return Promise.reject(err); }) @@ -91,8 +91,7 @@ async function installHooks(folder) { /** Installs the Mod folder * */ -// TODO: add option to not copy over databases -async function installMod(folder) { +async function installMod(folder, name) { console.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) => { @@ -102,6 +101,23 @@ async function installMod(folder) { } else { console.log(`Mod succesfully installed in ${folder}`) + + /* Check if backup user-editable files exist. If true copy them over */ + try { + 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")); + } + + if (fs.existsSync(path.join(__dirname, "..", "..", "DCS Olympus backups", name, "scripts", "mods.lua"))) { + console.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}`) + rej(err); + } + res(true); } }); @@ -232,10 +248,15 @@ async function deleteHooks(folder) { /** Deletes the Mod folder * */ -async function deleteMod(folder) { +async function deleteMod(folder, name) { console.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")); + + /* 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}`) @@ -268,10 +289,10 @@ async function deleteShortCuts(folder, name) { console.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); }) - .then(deleteFile(path.join(homeDir, "Desktop", `DCS Olympus Server (${name}).lnk`)), (err) => { return Promise.reject(err); }) - .then(deleteFile(path.join(homeDir, "Desktop", `DCS Olympus Client (${name}).lnk`)), (err) => { return Promise.reject(err); }) - .then(() => {res(true)}, (err) => { rej(err) }) + .then(deleteFile(path.join(folder, `DCS Olympus Client (${name}).lnk`)), (err) => { return Promise.reject(err); }) + .then(deleteFile(path.join(homeDir, "Desktop", `DCS Olympus Server (${name}).lnk`)), (err) => { return Promise.reject(err); }) + .then(deleteFile(path.join(homeDir, "Desktop", `DCS Olympus Client (${name}).lnk`)), (err) => { return Promise.reject(err); }) + .then(() => { res(true) }, (err) => { rej(err) }) }); return promise; } diff --git a/manager/javascripts/preload.js b/manager/javascripts/preload.js index baa2b9e6..eff89afd 100644 --- a/manager/javascripts/preload.js +++ b/manager/javascripts/preload.js @@ -11,7 +11,7 @@ const fs = require('fs'); const AdmZip = require("adm-zip"); const { Octokit } = require('octokit'); -const VERSION = "{{OLYMPUS_VERSION_NUMBER}}"; +const VERSION = "v2.0.0"; function checkVersion() { /* Check if we are running the latest version */ diff --git a/manager/stylesheets/style.css b/manager/stylesheets/style.css index a5b139ed..525f8fa8 100644 --- a/manager/stylesheets/style.css +++ b/manager/stylesheets/style.css @@ -280,13 +280,13 @@ input { } #popup { - width: 300px; + width: 400px; height: fit-content; min-height: 200px; position: absolute; background-color: var(--background); border-radius: 5px; - left: calc(50% - 150px); + left: calc(50% - 200px); top: calc(50% - 100px); display: flex; flex-direction: column;