rageshake: factor out submission to a separate file

This will mean we can load it asyncronously in future, if we want.
This commit is contained in:
Richard van der Hoff 2017-04-11 18:59:22 +01:00
parent 4efb2b6750
commit 6423f7ce03
3 changed files with 83 additions and 63 deletions

View file

@ -16,7 +16,7 @@ limitations under the License.
import React from 'react'; import React from 'react';
import sdk from 'matrix-react-sdk'; import sdk from 'matrix-react-sdk';
import rageshake from '../../../vector/rageshake'; import submit_rageshake from '../../../vector/submit-rageshake';
import SdkConfig from 'matrix-react-sdk/lib/SdkConfig'; import SdkConfig from 'matrix-react-sdk/lib/SdkConfig';
export default class BugReportDialog extends React.Component { export default class BugReportDialog extends React.Component {
@ -48,7 +48,7 @@ export default class BugReportDialog extends React.Component {
return; return;
} }
this.setState({ busy: true, err: null }); this.setState({ busy: true, err: null });
rageshake.sendBugReport( submit_rageshake(
SdkConfig.get().bug_report_endpoint_url, userText, sendLogs, SdkConfig.get().bug_report_endpoint_url, userText, sendLogs,
).then(() => { ).then(() => {
this.setState({ busy: false }); this.setState({ busy: false });

View file

@ -14,8 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
import request from "browser-request";
import q from "q"; import q from "q";
// This module contains all the code needed to log the console, persist it to // This module contains all the code needed to log the console, persist it to
@ -454,63 +452,4 @@ module.exports = {
}]; }];
} }
}, },
/**
* Send a bug report.
* @param {string} bugReportEndpoint HTTP url to send the report to
* @param {string} userText Any additional user input.
* @param {boolean} sendLogs True to send logs
* @return {Promise} Resolved when the bug report is sent.
*/
sendBugReport: async function(bugReportEndpoint, userText, sendLogs) {
if (!bugReportEndpoint) {
throw new Error("No bug report endpoint has been set.");
}
let version = "UNKNOWN";
try {
version = await PlatformPeg.get().getAppVersion();
}
catch (err) {} // PlatformPeg already logs this.
let userAgent = "UNKNOWN";
if (window.navigator && window.navigator.userAgent) {
userAgent = window.navigator.userAgent;
}
console.log("Sending bug report.");
let logs = [];
if (sendLogs) {
logs = await this.getLogsForReport();
}
await q.Promise((resolve, reject) => {
request({
method: "POST",
url: bugReportEndpoint,
body: {
logs: logs,
text: (
userText || "User did not supply any additional text."
),
app: 'riot-web',
version: version,
user_agent: userAgent,
},
json: true,
timeout: 5 * 60 * 1000,
}, (err, res) => {
if (err) {
reject(err);
return;
}
if (res.status < 200 || res.status >= 400) {
reject(new Error(`HTTP ${res.status}`));
return;
}
resolve();
})
});
}
}; };

View file

@ -0,0 +1,81 @@
/*
Copyright 2017 OpenMarket Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import q from "q";
import request from "browser-request";
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
import rageshake from './rageshake'
/**
* Send a bug report.
* @param {string} bugReportEndpoint HTTP url to send the report to
* @param {string} userText Any additional user input.
* @param {boolean} sendLogs True to send logs
* @return {Promise} Resolved when the bug report is sent.
*/
export default async function sendBugReport(bugReportEndpoint, userText, sendLogs) {
if (!bugReportEndpoint) {
throw new Error("No bug report endpoint has been set.");
}
let version = "UNKNOWN";
try {
version = await PlatformPeg.get().getAppVersion();
}
catch (err) {} // PlatformPeg already logs this.
let userAgent = "UNKNOWN";
if (window.navigator && window.navigator.userAgent) {
userAgent = window.navigator.userAgent;
}
console.log("Sending bug report.");
let logs = [];
if (sendLogs) {
logs = await rageshake.getLogsForReport();
}
await q.Promise((resolve, reject) => {
request({
method: "POST",
url: bugReportEndpoint,
body: {
logs: logs,
text: (
userText || "User did not supply any additional text."
),
app: 'riot-web',
version: version,
user_agent: userAgent,
},
json: true,
timeout: 5 * 60 * 1000,
}, (err, res) => {
if (err) {
reject(err);
return;
}
if (res.status < 200 || res.status >= 400) {
reject(new Error(`HTTP ${res.status}`));
return;
}
resolve();
})
});
}