diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 60b50b734..dcbd055a8 100644
--- a/UI/data/locale/en-US.ini
+++ b/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
diff --git a/UI/forms/OBSLogReply.ui b/UI/forms/OBSLogReply.ui
index 63fb7c041..6d4b7f430 100644
--- a/UI/forms/OBSLogReply.ui
+++ b/UI/forms/OBSLogReply.ui
@@ -14,6 +14,13 @@
LogReturnDialog
+ -
+
+
+ LogReturnDialog.Description
+
+
+
-
-
@@ -33,6 +40,13 @@
+ -
+
+
+ LogReturnDialog.AnalyzeURL
+
+
+
-
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index 34be5a7f0..40bf403cf 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -5035,7 +5035,7 @@ static BPtr 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 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,7 @@ 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(
@@ -5132,13 +5139,32 @@ void OBSBasic::logUploadFinished(const QString &text, const QString &error)
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(
+ this, QTStr("LogReturnDialog.ErrorUploadingLog"),
+ 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();
}
diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp
index 8874d2cfb..f44d89a04 100644
--- a/UI/window-basic-main.hpp
+++ b/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();
diff --git a/UI/window-log-reply.cpp b/UI/window-log-reply.cpp
index 7be665e47..099f85765 100644
--- a/UI/window-log-reply.cpp
+++ b/UI/window-log-reply.cpp
@@ -16,14 +16,23 @@
******************************************************************************/
#include
+#include
+#include
+#include
#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);
+}
diff --git a/UI/window-log-reply.hpp b/UI/window-log-reply.hpp
index 9fcab20c1..746d1f466 100644
--- a/UI/window-log-reply.hpp
+++ b/UI/window-log-reply.hpp
@@ -27,8 +27,9 @@ private:
std::unique_ptr 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();
};