From e9d57a0f4ab70e164d1f751171b1ef3ab51eda9b Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Wed, 30 Apr 2025 22:22:05 +0200 Subject: [PATCH] Refactor log helpers and add option to disable logging --- data/locale/de-DE.ini | 1 - data/locale/en-US.ini | 2 +- data/locale/es-ES.ini | 1 - data/locale/fr-FR.ini | 1 - data/locale/ja-JP.ini | 1 - data/locale/pt-BR.ini | 1 - data/locale/ru-RU.ini | 1 - data/locale/tr-TR.ini | 1 - data/locale/zh-CN.ini | 1 - forms/advanced-scene-switcher.ui | 20 ------ lib/general.cpp | 32 +++------ lib/switcher-data.hpp | 3 - lib/utils/log-helper.cpp | 89 +++++++++++++++++++++--- lib/utils/log-helper.hpp | 18 ++++- lib/utils/websocket-api.cpp | 4 +- plugins/base/utils/websocket-helpers.cpp | 4 +- 16 files changed, 112 insertions(+), 68 deletions(-) diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index baf68671..7349ed3d 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -26,7 +26,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchToRandom="Wechsle zu AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Wechsle zu:" AdvSceneSwitcher.generalTab.generalBehavior.cooldown="Nach Ausführen von Aktionen überspringe das Ausführen von Aktionen für" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="In diesem Zeitraum werden potentielle erfüllte Bedingungen ignoriert!" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Ausführliches Logging" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Fensterposition und -größe speichern" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Benachrichtigungen im System-Tray anzeigen" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Deaktiviere UI Tipps" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 6e94a970..55ba257d 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -29,11 +29,11 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Switch to:" AdvSceneSwitcher.generalTab.generalBehavior.cooldown="After performing actions skip performing actions for" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="During this time potential matches will be ignored!" AdvSceneSwitcher.generalTab.generalBehavior.logLevel="Log level:" +AdvSceneSwitcher.generalTab.generalBehavior.logLevel.disable="Disable logging" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default="Default" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logMacro="Log executed macros" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction="Log performed actions" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose="Verbose logging" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Enable verbose logging" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position and size" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Show system tray notifications" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints" diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 93530ee0..a2b0790f 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -25,7 +25,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.dontSwitch="No cambiar" AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchToRandom="Cambiar a una escena aleatoria" AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Cambiar a:" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="¡Durante este tiempo, se ignorarán las posibles coincidencias!" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Habilitar el registro detallado" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Guardar la posición y el tamaño de la ventana" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Mostrar notificaciones del sistema" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Deshabilitar sugerencias de interfaz de usuario" diff --git a/data/locale/fr-FR.ini b/data/locale/fr-FR.ini index a2bb2d17..d764b8df 100644 --- a/data/locale/fr-FR.ini +++ b/data/locale/fr-FR.ini @@ -26,7 +26,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchToRandom="Basculer v AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Basculer vers :" AdvSceneSwitcher.generalTab.generalBehavior.cooldown="Après avoir effectué des actions, sauter l'exécution d'actions pendant" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="Pendant cette période, les correspondances potentielles seront ignorées !" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Activer les journaux détaillés" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Enregistrer la position et la taille de la fenêtre" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Afficher les notifications dans la zone de notification système" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Désactiver les indications de l'interface utilisateur" diff --git a/data/locale/ja-JP.ini b/data/locale/ja-JP.ini index 4e70581c..b2764db7 100644 --- a/data/locale/ja-JP.ini +++ b/data/locale/ja-JP.ini @@ -30,7 +30,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.logLevel="ログレベル:" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default="デフォルト" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction="実行されたアクションのログ" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose="詳細ログ(Verbose)" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="詳細ログを有効にする(生成されるログファイルのサイズが増加します)" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="ウィンドウのサイズと位置を記憶する" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="システムトレイ通知を表示" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="UIヒントを無効にする" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index 68308fc4..c9773d7d 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -30,7 +30,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.logLevel="Nível de log:" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default="Padrão" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction="Registrar ações executadas" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose="Registro detalhado" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Ativar registro detalhado" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Salvar posição e tamanho da janela" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Mostrar notificações na área de notificação" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Desativar dicas de interface" diff --git a/data/locale/ru-RU.ini b/data/locale/ru-RU.ini index c7565584..f266370b 100644 --- a/data/locale/ru-RU.ini +++ b/data/locale/ru-RU.ini @@ -25,7 +25,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.dontSwitch="Не пере AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchToRandom="Переключиться на любую сцену на вкладке Random" AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Переключиться на:" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="В течение этого времени потенциальные совпадения будут игнорироваться!" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Включить ведение подробного журнала" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Сохранять положение и размер окна" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Отключить подсказки пользовательского интерфейса" AdvSceneSwitcher.generalTab.priority="Приоритет" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index 4fdd4600..a3fae935 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -26,7 +26,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchToRandom="Rastgele s AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.switchTo="Değiştirmek:" AdvSceneSwitcher.generalTab.generalBehavior.cooldown="Bir eşleşmeden sonra aşağıdakiler için işlem yapmayın:" AdvSceneSwitcher.generalTab.generalBehavior.cooldownHint="Bu süre zarfında olası eşleşmeler göz ardı edilecektir!" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Ayrıntılı günlük kaydını etkinleştir" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Pencere konumunu ve boyutunu kaydet" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Sistem tepsisi bildirimlerini göster" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="UI ipuçlarını devre dışı bırak" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index 1c6c46e4..4feeca03 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -33,7 +33,6 @@ AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default="默认" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logMacro="记录已执行的宏" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction="记录已执行的操作" AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose="记录所有信息" -AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="详细日志输出" AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="保存窗口位置和大小" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="显示系统托盘通知" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="禁用UI提示" diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 18afc21f..050257f8 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -182,26 +182,6 @@ - - - AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default - - - - - AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logMacro - - - - - AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction - - - - - AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose - - diff --git a/lib/general.cpp b/lib/general.cpp index 05c529d7..26c97dea 100644 --- a/lib/general.cpp +++ b/lib/general.cpp @@ -113,12 +113,12 @@ void AdvSceneSwitcher::on_startupBehavior_currentIndexChanged(int index) static_cast(index); } -void AdvSceneSwitcher::on_logLevel_currentIndexChanged(int value) +void AdvSceneSwitcher::on_logLevel_currentIndexChanged(int idx) { if (loading) { return; } - switcher->logLevel = static_cast(value); + SetLogLevel(static_cast(ui->logLevel->itemData(idx).toInt())); } void AdvSceneSwitcher::on_autoStartEvent_currentIndexChanged(int index) @@ -529,8 +529,8 @@ void SwitcherData::SaveGeneralSettings(obs_data_t *obj) obs_data_set_int(obj, "autoStartEvent", static_cast(autoStartEvent)); - obs_data_set_int(obj, "logLevel", static_cast(logLevel)); - obs_data_set_int(obj, "logLevelVersion", 1); + SaveLogLevel(obj); + obs_data_set_bool(obj, "showSystemTrayNotifications", showSystemTrayNotifications); obs_data_set_bool(obj, "disableHints", disableHints); @@ -586,25 +586,7 @@ void SwitcherData::LoadGeneralSettings(obs_data_t *obj) autoStartEvent = static_cast(obs_data_get_int(obj, "autoStartEvent")); - logLevel = static_cast(obs_data_get_int(obj, "logLevel")); - if (obs_data_get_int(obj, "logLevelVersion") < 1) { - enum OldLogLevel { DEFAULT, LOG_ACTION, VERBOSE }; - OldLogLevel oldLogLevel = static_cast( - obs_data_get_int(obj, "logLevel")); - switch (oldLogLevel) { - case DEFAULT: - logLevel = LogLevel::DEFAULT; - break; - case LOG_ACTION: - logLevel = LogLevel::LOG_ACTION; - break; - case VERBOSE: - logLevel = LogLevel::VERBOSE; - break; - default: - break; - } - } + LoadLogLevel(obj); showSystemTrayNotifications = obs_data_get_bool(obj, "showSystemTrayNotifications"); @@ -894,7 +876,9 @@ void AdvSceneSwitcher::SetupGeneralTab() SIGNAL(DurationChanged(const Duration &)), this, SLOT(CooldownDurationChanged(const Duration &))); - ui->logLevel->setCurrentIndex(static_cast(switcher->logLevel)); + PopulateLogLevelSelection(ui->logLevel); + ui->logLevel->setCurrentIndex( + ui->logLevel->findData(static_cast(GetLogLevel()))); ui->saveWindowGeo->setChecked(switcher->saveWindowGeo); ui->showTrayNotifications->setChecked( diff --git a/lib/switcher-data.hpp b/lib/switcher-data.hpp index 756f1631..d70aca9d 100644 --- a/lib/switcher-data.hpp +++ b/lib/switcher-data.hpp @@ -132,9 +132,6 @@ public: bool transitionOverrideOverride = false; bool adjustActiveTransitionType = true; - enum class LogLevel { DEFAULT, LOG_MACRO, LOG_ACTION, VERBOSE }; - LogLevel logLevel = LogLevel::DEFAULT; - /* --- End of General tab section --- */ std::string lastTitle; diff --git a/lib/utils/log-helper.cpp b/lib/utils/log-helper.cpp index 5a5192c0..a61d4bef 100644 --- a/lib/utils/log-helper.cpp +++ b/lib/utils/log-helper.cpp @@ -1,26 +1,97 @@ #include "log-helper.hpp" -#include "switcher-data.hpp" +#include "obs-module-helper.hpp" + +#include +#include +#include +#include namespace advss { +static LogLevel logLevel = LogLevel::DEFAULT; + bool VerboseLoggingEnabled() { - return GetSwitcher() && - GetSwitcher()->logLevel == SwitcherData::LogLevel::VERBOSE; + return logLevel == LogLevel::VERBOSE; } bool ActionLoggingEnabled() { - return GetSwitcher() && - (GetSwitcher()->logLevel == SwitcherData::LogLevel::LOG_ACTION || - VerboseLoggingEnabled()); + return logLevel == LogLevel::LOG_ACTION || VerboseLoggingEnabled(); } bool MacroLoggingEnabled() { - return GetSwitcher() && - (GetSwitcher()->logLevel == SwitcherData::LogLevel::LOG_MACRO || - ActionLoggingEnabled()); + return logLevel == LogLevel::LOG_MACRO || ActionLoggingEnabled(); +} + +bool LoggingEnabled() +{ + return logLevel != LogLevel::DISABLE; +} + +void SetLogLevel(LogLevel newLogLevel) +{ + logLevel = newLogLevel; +} + +LogLevel GetLogLevel() +{ + return logLevel; +} + +void SaveLogLevel(void *data) +{ + auto obj = static_cast(data); + obs_data_set_int(obj, "logLevel", static_cast(logLevel)); + obs_data_set_int(obj, "logLevelVersion", 1); +} + +void LoadLogLevel(void *data) +{ + auto obj = static_cast(data); + logLevel = static_cast(obs_data_get_int(obj, "logLevel")); + if (obs_data_get_int(obj, "logLevelVersion") < 1) { + enum OldLogLevel { DEFAULT, LOG_ACTION, VERBOSE }; + OldLogLevel oldLogLevel = static_cast( + obs_data_get_int(obj, "logLevel")); + switch (oldLogLevel) { + case DEFAULT: + logLevel = LogLevel::DEFAULT; + break; + case LOG_ACTION: + logLevel = LogLevel::LOG_ACTION; + break; + case VERBOSE: + logLevel = LogLevel::VERBOSE; + break; + default: + break; + } + } +} + +void PopulateLogLevelSelection(void *sel) +{ + auto selection = static_cast(sel); + static const std::map logLevels = { + {LogLevel::DISABLE, + "AdvSceneSwitcher.generalTab.generalBehavior.logLevel.disable"}, + {LogLevel::DEFAULT, + "AdvSceneSwitcher.generalTab.generalBehavior.logLevel.default"}, + {LogLevel::LOG_MACRO, + "AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logMacro"}, + {LogLevel::LOG_ACTION, + "AdvSceneSwitcher.generalTab.generalBehavior.logLevel.logAction"}, + {LogLevel::VERBOSE, + "AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose"}, + }; + + selection->clear(); + for (const auto &[value, name] : logLevels) { + selection->addItem(obs_module_text(name.c_str()), + static_cast(value)); + } } } // namespace advss diff --git a/lib/utils/log-helper.hpp b/lib/utils/log-helper.hpp index 861c164f..011a6eee 100644 --- a/lib/utils/log-helper.hpp +++ b/lib/utils/log-helper.hpp @@ -12,7 +12,13 @@ namespace advss { #else // Print log with "[adv-ss] " prefix -#define blog(level, msg, ...) blog(level, "[adv-ss] " msg, ##__VA_ARGS__) +#define blog(level, msg, ...) \ + do { \ + if (LoggingEnabled()) { \ + blog(level, "[adv-ss] " msg, ##__VA_ARGS__); \ + } \ + } while (0) + // Print log with "[adv-ss] " if log level is set to "verbose" #define vblog(level, msg, ...) \ do { \ @@ -43,5 +49,15 @@ EXPORT bool VerboseLoggingEnabled(); EXPORT bool ActionLoggingEnabled(); // Returns true if log level is set to "macro", "action" or "verbose" EXPORT bool MacroLoggingEnabled(); +// Returns true if logging is enabled and false otherwise +EXPORT bool LoggingEnabled(); + +enum class LogLevel { DISABLE = -1, DEFAULT, LOG_MACRO, LOG_ACTION, VERBOSE }; + +void SetLogLevel(LogLevel); +LogLevel GetLogLevel(); +void SaveLogLevel(void *data); +void LoadLogLevel(void *data); +void PopulateLogLevelSelection(void *); } // namespace advss diff --git a/lib/utils/websocket-api.cpp b/lib/utils/websocket-api.cpp index c3580d08..3d06813a 100644 --- a/lib/utils/websocket-api.cpp +++ b/lib/utils/websocket-api.cpp @@ -1,8 +1,10 @@ #include "websocket-api.hpp" -#include "log-helper.hpp" #include "obs-websocket-api.h" #include "plugin-state-helpers.hpp" +// Must be after "obs-websocket-api.h" to avoid logging function conflict +#include "log-helper.hpp" + #include namespace advss { diff --git a/plugins/base/utils/websocket-helpers.cpp b/plugins/base/utils/websocket-helpers.cpp index ee844fb0..9c2ac797 100644 --- a/plugins/base/utils/websocket-helpers.cpp +++ b/plugins/base/utils/websocket-helpers.cpp @@ -1,6 +1,5 @@ #include "websocket-helpers.hpp" #include "connection-manager.hpp" -#include "log-helper.hpp" #include "plugin-state-helpers.hpp" #include "sync-helpers.hpp" #include "websocket-api.hpp" @@ -8,6 +7,9 @@ #include #include +// Must be after "obs-websocket-api.h" to avoid logging function conflict +#include "log-helper.hpp" + namespace advss { using websocketpp::lib::placeholders::_1;