From caa8cd32d03a298d8dee1a003c4578aa9a19a70b Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 5 Oct 2019 23:27:25 -0500 Subject: [PATCH] Fix mount detection --- src/helpers.js | 79 +++++++++++++++++++++-------------- src/renderer/ipc/MountsIPC.js | 2 +- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/helpers.js b/src/helpers.js index 8027e2b..c84907c 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -132,39 +132,56 @@ module.exports.createSignatureFiles = (signature, publicKey) => { module.exports.detectRepertoryMounts = (version, providerList) => { return new Promise((resolve, reject) => { - const processOptions = { - detached: true, - shell: false, - windowsHide: true, - }; - - const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory'); - const args = []; - args.push('-status'); - - const process = new spawn(command, args, processOptions); - let result = ''; - - process.on('error', (err) => { - reject(err); - }); - - process.stdout.on('data', (d)=> { - result += d; - }); - - process.on('exit', () => { - let defaultData = {}; - for (const provider of providerList) { - defaultData[provider] = { - Active: false, - Location: '', - PID: -1, + let mountState = {}; + const defaultData = {}; + for (const provider of providerList) { + defaultData[provider] = { + Active: false, + Location: '', + PID: -1, + }; + } + const grabStatus = index => { + if (index >= providerList.length) { + resolve(mountState); + } else { + const provider = providerList[index]; + const processOptions = { + detached: true, + shell: false, + windowsHide: true, }; + + const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory'); + const args = []; + args.push('-status'); + if (Constants.PROVIDER_LIST.includes(provider)) { + if (provider !== 'Sia') { + args.push('-sp'); + } + } else { + args.push('-rm'); + args.push(provider.substr(6)); + } + const process = new spawn(command, args, processOptions); + let result = ''; + + process.on('error', (err) => { + reject(err); + }); + + process.stdout.on('data', (d) => { + result += d; + }); + + process.on('exit', () => { + mountState[provider] = tryParse(result, defaultData)[provider]; + grabStatus(++index); + }); + process.unref(); } - resolve(tryParse(result, defaultData)); - }); - process.unref(); + }; + grabStatus(0); }); }; diff --git a/src/renderer/ipc/MountsIPC.js b/src/renderer/ipc/MountsIPC.js index edf386d..dd224c6 100644 --- a/src/renderer/ipc/MountsIPC.js +++ b/src/renderer/ipc/MountsIPC.js @@ -89,7 +89,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => { let driveLetters = {}; const providerList = [ ...Constants.PROVIDER_LIST, - data.RemoteMounts, + ...data.RemoteMounts, ]; for (const provider of providerList) { driveLetters[provider] = [];