diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 9ed218448..89bd0b1c8 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -535,6 +535,9 @@ Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload &Current Log File" Basic.MainMenu.Help.Logs.UploadLastLog="Upload &Last Log File" Basic.MainMenu.Help.Logs.ViewCurrentLog="&View Current Log" Basic.MainMenu.Help.CheckForUpdates="Check For Updates" +Basic.MainMenu.Help.CrashLogs="Crash &Reports" +Basic.MainMenu.Help.CrashLogs.ShowLogs="&Show Crash Reports" +Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload &Last Crash Report" # basic mode settings dialog Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect." diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui index f6a7c32ac..55e66c4da 100644 --- a/UI/forms/OBSBasic.ui +++ b/UI/forms/OBSBasic.ui @@ -137,10 +137,19 @@ + + + Basic.MainMenu.Help.CrashLogs + + + + + + @@ -185,7 +194,7 @@ - + Copy @@ -1582,6 +1591,16 @@ Basic.MainMenu.Help.HelpPortal + + + Basic.MainMenu.Help.CrashLogs.ShowLogs + + + + + Basic.MainMenu.Help.CrashLogs.UploadLastLog + + diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 4cb276caf..503e5e113 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -60,6 +60,7 @@ static log_handler_t def_log_handler; static string currentLogFile; static string lastLogFile; +static string lastCrashLogFile; bool portable_mode = false; static bool multi = false; @@ -1051,6 +1052,11 @@ const char *OBSApp::GetCurrentLog() const return currentLogFile.c_str(); } +const char *OBSApp::GetLastCrashLog() const +{ + return lastCrashLogFile.c_str(); +} + bool OBSApp::TranslateString(const char *lookupVal, const char **out) const { for (obs_frontend_translate_ui_cb cb : translatorHooks) { @@ -1249,6 +1255,9 @@ static void create_log_file(fstream &logFile) stringstream dst; get_last_log(false, "obs-studio/logs", lastLogFile); +#ifdef _WIN32 + get_last_log(true, "obs-studio/crashes", lastCrashLogFile); +#endif currentLogFile = GenerateTimeDateFilename("txt"); dst << "obs-studio/logs/" << currentLogFile.c_str(); diff --git a/UI/obs-app.hpp b/UI/obs-app.hpp index 53043ac3f..87d6a1c63 100644 --- a/UI/obs-app.hpp +++ b/UI/obs-app.hpp @@ -116,6 +116,8 @@ public: const char *GetLastLog() const; const char *GetCurrentLog() const; + const char *GetLastCrashLog() const; + std::string GetVersionString() const; bool IsPortableMode(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index b8d65ed36..f1e23a348 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1655,7 +1655,13 @@ void OBSBasic::OBSInit() this, SLOT(OpenMultiviewWindow())); #if !defined(_WIN32) && !defined(__APPLE__) + delete ui->actionShowCrashLogs; + delete ui->actionUploadLastCrashLog; + delete ui->menuCrashLogs; delete ui->actionCheckForUpdates; + ui->actionShowCrashLogs = nullptr; + ui->actionUploadLastCrashLog = nullptr; + ui->menuCrashLogs = nullptr; ui->actionCheckForUpdates = nullptr; #endif } @@ -4317,6 +4323,21 @@ void OBSBasic::on_actionViewCurrentLog_triggered() QDesktopServices::openUrl(url); } +void OBSBasic::on_actionShowCrashLogs_triggered() +{ + char logDir[512]; + if (GetConfigPath(logDir, sizeof(logDir), "obs-studio/crashes") <= 0) + return; + + QUrl url = QUrl::fromLocalFile(QT_UTF8(logDir)); + QDesktopServices::openUrl(url); +} + +void OBSBasic::on_actionUploadLastCrashLog_triggered() +{ + UploadLog("obs-studio/crashes", App()->GetLastCrashLog()); +} + void OBSBasic::on_actionCheckForUpdates_triggered() { CheckForUpdates(true); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 7b814ec7a..9b4302fa1 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -589,6 +589,9 @@ private slots: void on_actionViewCurrentLog_triggered(); void on_actionCheckForUpdates_triggered(); + void on_actionShowCrashLogs_triggered(); + void on_actionUploadLastCrashLog_triggered(); + void on_actionEditTransform_triggered(); void on_actionCopyTransform_triggered(); void on_actionPasteTransform_triggered();