mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
Added ability to retain user-editable files
This commit is contained in:
parent
8865ded4bd
commit
1a8a19ae5c
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user