summaryrefslogtreecommitdiffhomepage
path: root/app/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/problem-report.js71
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);
});
};