Browse Source

Merge pull request #2662 from WizardCM/log-dialog

Enhance Log dialog with description and Analyze button
Jim 5 years ago
parent
commit
695f3c1f33

+ 3 - 0
UI/data/locale/en-US.ini

@@ -330,7 +330,10 @@ Output.BadPath.Text="The configured file output path is invalid. Please check yo
 
 # log upload dialog text and messages
 LogReturnDialog="Log Upload Successful"
+LogReturnDialog.Description="Your log file has been uploaded. You can now share the URL for debugging or support purposes."
+LogReturnDialog.Description.Crash="Your crash report has been uploaded. You can now share the URL for debugging purposes."
 LogReturnDialog.CopyURL="Copy URL"
+LogReturnDialog.AnalyzeURL="Analyze"
 LogReturnDialog.ErrorUploadingLog="Error uploading log file"
 
 # remux dialog

+ 14 - 0
UI/forms/OBSLogReply.ui

@@ -14,6 +14,13 @@
    <string>LogReturnDialog</string>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="description">
+     <property name="text">
+      <string>LogReturnDialog.Description</string>
+     </property>
+    </widget>
+   </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
@@ -33,6 +40,13 @@
        </property>
       </widget>
      </item>
+     <item>
+      <widget class="QPushButton" name="analyzeURL">
+       <property name="text">
+        <string>LogReturnDialog.AnalyzeURL</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>

+ 33 - 7
UI/window-basic-main.cpp

@@ -5035,7 +5035,7 @@ static BPtr<char> ReadLogFile(const char *subdir, const char *log)
 	return file;
 }
 
-void OBSBasic::UploadLog(const char *subdir, const char *file)
+void OBSBasic::UploadLog(const char *subdir, const char *file, const bool crash)
 {
 	BPtr<char> fileString{ReadLogFile(subdir, file)};
 
@@ -5046,6 +5046,7 @@ void OBSBasic::UploadLog(const char *subdir, const char *file)
 		return;
 
 	ui->menuLogFiles->setEnabled(false);
+	ui->menuCrashLogs->setEnabled(false);
 
 	stringstream ss;
 	ss << "OBS " << App()->GetVersionString() << " log file uploaded at "
@@ -5061,8 +5062,13 @@ void OBSBasic::UploadLog(const char *subdir, const char *file)
 				     "text/plain", ss.str().c_str());
 
 	logUploadThread.reset(thread);
-	connect(thread, &RemoteTextThread::Result, this,
-		&OBSBasic::logUploadFinished);
+	if (crash) {
+		connect(thread, &RemoteTextThread::Result, this,
+			&OBSBasic::crashUploadFinished);
+	} else {
+		connect(thread, &RemoteTextThread::Result, this,
+			&OBSBasic::logUploadFinished);
+	}
 	logUploadThread->start();
 }
 
@@ -5078,12 +5084,12 @@ void OBSBasic::on_actionShowLogs_triggered()
 
 void OBSBasic::on_actionUploadCurrentLog_triggered()
 {
-	UploadLog("obs-studio/logs", App()->GetCurrentLog());
+	UploadLog("obs-studio/logs", App()->GetCurrentLog(), false);
 }
 
 void OBSBasic::on_actionUploadLastLog_triggered()
 {
-	UploadLog("obs-studio/logs", App()->GetLastLog());
+	UploadLog("obs-studio/logs", App()->GetLastLog(), false);
 }
 
 void OBSBasic::on_actionViewCurrentLog_triggered()
@@ -5114,7 +5120,7 @@ void OBSBasic::on_actionShowCrashLogs_triggered()
 
 void OBSBasic::on_actionUploadLastCrashLog_triggered()
 {
-	UploadLog("obs-studio/crashes", App()->GetLastCrashLog());
+	UploadLog("obs-studio/crashes", App()->GetLastCrashLog(), true);
 }
 
 void OBSBasic::on_actionCheckForUpdates_triggered()
@@ -5125,6 +5131,21 @@ void OBSBasic::on_actionCheckForUpdates_triggered()
 void OBSBasic::logUploadFinished(const QString &text, const QString &error)
 {
 	ui->menuLogFiles->setEnabled(true);
+	ui->menuCrashLogs->setEnabled(true);
+
+	if (text.isEmpty()) {
+		OBSMessageBox::critical(
+			this, QTStr("LogReturnDialog.ErrorUploadingLog"),
+			error);
+		return;
+	}
+	openLogDialog(text, false);
+}
+
+void OBSBasic::crashUploadFinished(const QString &text, const QString &error)
+{
+	ui->menuLogFiles->setEnabled(true);
+	ui->menuCrashLogs->setEnabled(true);
 
 	if (text.isEmpty()) {
 		OBSMessageBox::critical(
@@ -5132,13 +5153,18 @@ void OBSBasic::logUploadFinished(const QString &text, const QString &error)
 			error);
 		return;
 	}
+	openLogDialog(text, true);
+}
+
+void OBSBasic::openLogDialog(const QString &text, const bool crash)
+{
 
 	obs_data_t *returnData = obs_data_create_from_json(QT_TO_UTF8(text));
 	string resURL = obs_data_get_string(returnData, "url");
 	QString logURL = resURL.c_str();
 	obs_data_release(returnData);
 
-	OBSLogReply logDialog(this, logURL);
+	OBSLogReply logDialog(this, logURL, crash);
 	logDialog.exec();
 }
 

+ 3 - 1
UI/window-basic-main.hpp

@@ -301,7 +301,7 @@ private:
 	void UpdateVolumeControlsPeakMeterType();
 	void ClearVolumeControls();
 
-	void UploadLog(const char *subdir, const char *file);
+	void UploadLog(const char *subdir, const char *file, const bool crash);
 
 	void Save(const char *file);
 	void Load(const char *file);
@@ -935,6 +935,8 @@ private slots:
 	void PauseToggled();
 
 	void logUploadFinished(const QString &text, const QString &error);
+	void crashUploadFinished(const QString &text, const QString &error);
+	void openLogDialog(const QString &text, const bool crash);
 
 	void updateCheckFinished();
 

+ 20 - 1
UI/window-log-reply.cpp

@@ -16,14 +16,23 @@
 ******************************************************************************/
 
 #include <QClipboard>
+#include <QUrl>
+#include <QUrlQuery>
+#include <QDesktopServices>
 #include "window-log-reply.hpp"
 #include "obs-app.hpp"
 
-OBSLogReply::OBSLogReply(QWidget *parent, const QString &url)
+OBSLogReply::OBSLogReply(QWidget *parent, const QString &url, const bool crash)
 	: QDialog(parent), ui(new Ui::OBSLogReply)
 {
+	setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
 	ui->setupUi(this);
 	ui->urlEdit->setText(url);
+	if (crash) {
+		ui->analyzeURL->hide();
+		ui->description->setText(
+			Str("LogReturnDialog.Description.Crash"));
+	}
 
 	installEventFilter(CreateShortcutFilter());
 }
@@ -33,3 +42,13 @@ void OBSLogReply::on_copyURL_clicked()
 	QClipboard *clipboard = QApplication::clipboard();
 	clipboard->setText(ui->urlEdit->text());
 }
+
+void OBSLogReply::on_analyzeURL_clicked()
+{
+	QUrlQuery param;
+	param.addQueryItem("log_url",
+			   QUrl::toPercentEncoding(ui->urlEdit->text()));
+	QUrl url("https://obsproject.com/tools/analyzer", QUrl::TolerantMode);
+	url.setQuery(param);
+	QDesktopServices::openUrl(url);
+}

+ 2 - 1
UI/window-log-reply.hpp

@@ -27,8 +27,9 @@ private:
 	std::unique_ptr<Ui::OBSLogReply> ui;
 
 public:
-	OBSLogReply(QWidget *parent, const QString &url);
+	OBSLogReply(QWidget *parent, const QString &url, const bool crash);
 
 private slots:
 	void on_copyURL_clicked();
+	void on_analyzeURL_clicked();
 };