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(); };