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