From 20e61be50f89af1d4e87547dc6ade525fa598d9a Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 11 Jun 2020 20:26:43 -0500 Subject: [PATCH] #46: Fix Mount Manager unmount and mount detection --- CHANGELOG.md | 5 +-- src/helpers.js | 105 +++++++++++++++++++++++++++---------------------- 2 files changed, 59 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e803128..7c9ab8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog ## 1.3.0 +* \#38: Enhance new repertory release available notification +* \#46: Fix Mount Manager unmount and mount detection * Skynet support * Synchronize UI major/minor version with `repertory` major/minor version * Added `Password` component @@ -10,9 +12,6 @@ * Debian 9 ARM64 * Debian 10 ARM64 * Solus - -## 1.1.5 -* \#38: Enhance new repertory release available notification * Added `FocusTrap` to modals ## 1.1.4 diff --git a/src/helpers.js b/src/helpers.js index 80b35b1..69d128f 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -62,6 +62,62 @@ const _vcRuntimeExists = () => { }); }; +const _detectRepertoryMounts = (version, providerList) => { + return new Promise((resolve, reject) => { + 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 repertoryExec = _getRepertoryExec(version); + const processOptions = { + cwd: repertoryExec.working, + detached: true, + shell: false, + windowsHide: true, + }; + + const args = _getDefaultRepertoryArgs(provider, !Constants.PROVIDER_LIST.includes(provider)); + args.push('-status'); + + const process = new spawn(repertoryExec.cmd, 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]; + if (mountState[provider].Active && + ((mountState[provider].Location === 'elevating') || (mountState[provider].Location === ''))) { + setTimeout(() => { + grabStatus(index); + }, 2000); + } else { + grabStatus(++index); + } + }); + process.unref(); + } + }; + grabStatus(0); + }); +}; + const _executeProcess = (command, working, args=[]) => { return new Promise((resolve, reject) => { let processOptions = { @@ -253,54 +309,7 @@ module.exports.createSignatureFiles = (signature, publicKey) => { }; }; -module.exports.detectRepertoryMounts = (version, providerList) => { - return new Promise((resolve, reject) => { - 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 repertoryExec = _getRepertoryExec(version); - const processOptions = { - cwd: repertoryExec.working, - detached: true, - shell: false, - windowsHide: true, - }; - - const args = _getDefaultRepertoryArgs(provider, !Constants.PROVIDER_LIST.includes(provider)); - args.push('-status'); - - const process = new spawn(repertoryExec.cmd, 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(); - } - }; - grabStatus(0); - }); -}; +module.exports.detectRepertoryMounts = _detectRepertoryMounts; module.exports.downloadFile = (url, destination, progressCallback, completeCallback) => { try {