diff options
Diffstat (limited to 'app/lib')
| -rw-r--r-- | app/lib/problem-report.js | 71 |
1 files changed, 21 insertions, 50 deletions
diff --git a/app/lib/problem-report.js b/app/lib/problem-report.js index 32acb32b93..df302bd908 100644 --- a/app/lib/problem-report.js +++ b/app/lib/problem-report.js @@ -1,71 +1,42 @@ // @flow -import { resolveBin } from './proc'; -import { execFile } from 'child_process'; import { ipcRenderer } from 'electron'; -import { log } from './platform'; import uuid from 'uuid'; const collectProblemReport = (toRedact: Array<string>): Promise<string> => { return new Promise((resolve, reject) => { const requestId = uuid.v4(); - let responseListener: Function; - - const removeResponseListener = () => { - ipcRenderer.removeListener('collect-logs-reply', responseListener); - }; - - // timeout after 10 seconds if no ipc response received - const requestTimeout = setTimeout(() => { - removeResponseListener(); - log.error('Timed out when collecting a problem report'); - reject(new Error('Timed out')); - }, 10000); - - responseListener = (_event, id, error, reportPath) => { - if (id !== requestId) { - return; - } - - clearTimeout(requestTimeout); - removeResponseListener(); - - if (error) { - log.error(`Cannot collect a problem report: ${error.err}`); - log.error(`Stdout: ${error.stdout}`); - reject(error); - } else { - resolve(reportPath); + const responseListener = (_event, responseId, result) => { + if (responseId === requestId) { + ipcRenderer.removeListener('collect-logs-reply', responseListener); + if (result.success) { + resolve(result.reportPath); + } else { + reject(new Error(result.error)); + } } }; - // add ipc response listener ipcRenderer.on('collect-logs-reply', responseListener); - - // send ipc request ipcRenderer.send('collect-logs', requestId, toRedact); }); }; -const sendProblemReport = (email: string, message: string, savedReport: string) => { - const args = ['send', '--email', email, '--message', message, '--report', savedReport]; - - const binPath = resolveBin('problem-report'); - +const sendProblemReport = (email: string, message: string, savedReport: string): Promise<void> => { return new Promise((resolve, reject) => { - execFile(binPath, args, { windowsHide: true }, (err, stdout, stderr) => { - if (err) { - reject({ err, stdout, stderr }); - } else { - log.debug('Report sent'); - resolve(); + const requestId = uuid.v4(); + const responseListener = (_event, responseId, result) => { + if (requestId === responseId) { + ipcRenderer.removeListener('send-problem-report-reply', responseListener); + if (result.success) { + resolve(); + } else { + reject(new Error(result.error)); + } } - }); - }).catch((e) => { - const { err, stdout } = e; - log.error('Failed sending problem report', err); - log.error(' stdout: ' + stdout); + }; - throw e; + ipcRenderer.on('send-problem-report-reply', responseListener); + ipcRenderer.send('send-problem-report', requestId, email, message, savedReport); }); }; |
