diff --git a/index.html b/index.html
index 81f2e35..6d8b0bd 100644
--- a/index.html
+++ b/index.html
@@ -131,8 +131,9 @@
RoC Folder
-
-
+
+
+
Mods
diff --git a/install.js b/install.js
index cdecd56..b4e6274 100644
--- a/install.js
+++ b/install.js
@@ -34,9 +34,11 @@ function unionByName(a, b) {
return r;
}
+var forks = [];
+var canceling = true;
module.exports.install = function(swgPath, emuPath, mods, fullScan) {
const child_process = require('child_process');
-
+ canceling = false;
module.exports.getManifest(mods, fullScan, emuPath, checkFiles);
var fileIndex = 0;
@@ -57,6 +59,7 @@ module.exports.install = function(swgPath, emuPath, mods, fullScan) {
let fork = child_process.fork(__filename, {env});
fork.on('message', m => installedCallback(fork, m));
fork.send(files[fileIndex++]);
+ forks.push(fork);
}
}
function installedCallback(fork, message) {
@@ -64,6 +67,7 @@ module.exports.install = function(swgPath, emuPath, mods, fullScan) {
completedBytes += message.complete;
progress(completedBytes, totalBytes);
if (fileIndex == files.length) {
+ forks.splice(forks.indexOf(fork), 1);
fork.kill();
console.log("killing fork");
}
@@ -76,10 +80,16 @@ module.exports.install = function(swgPath, emuPath, mods, fullScan) {
}
}
function progress(completed, total) {
- if (module.exports.progress) module.exports.progress(completed, total);
+ if (module.exports.progress && !canceling) module.exports.progress(completed, total);
}
}
+module.exports.cancel = function() {
+ canceling = true;
+ for (var fork of forks) fork.kill();
+ forks = [];
+}
+
if (process.send) {
const AdmZip = require('adm-zip');
diff --git a/package.json b/package.json
index a154564..7e9f2eb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "roc-launcher",
- "version": "0.0.14",
+ "version": "0.0.15",
"description": "Relics of Corbantis Official SWGEMU Launcher",
"main": "main.js",
"scripts": {
diff --git a/renderer.js b/renderer.js
index ccc6db6..32136f1 100644
--- a/renderer.js
+++ b/renderer.js
@@ -19,6 +19,7 @@ const folderBox = document.getElementById('folder');
const browseBtn = document.getElementById('browse');
const installBtn = document.getElementById('install');
const fullscanBtn = document.getElementById('fullscan');
+const cancelBtn = document.getElementById('cancel');
const modListBox = document.getElementById('modlist');
const progressBox = document.getElementById('progressbox');
const progressBar = document.getElementById('progress');
@@ -108,6 +109,12 @@ installBtn.addEventListener('click', function(event) {
ipc.send('open-directory-dialog', 'install-selected');
});
+cancelBtn.addEventListener('click', function(event) {
+ install.cancel();
+ enableAll();
+ progressBox.style.display = 'none';
+})
+
ipc.on('install-selected', function (event, path) {
disableAll();
install.install(path, config.folder, config.mods);