Skip to content

Commit

Permalink
Add "Log" action
Browse files Browse the repository at this point in the history
This action will allow you to write custom messages to the OBS log
  • Loading branch information
WarmUpTill committed Mar 2, 2024
1 parent 4213e4e commit 074d734
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 0 deletions.
3 changes: 3 additions & 0 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,9 @@ AdvSceneSwitcher.action.window.type.maximizeWindow="Maximize window"
AdvSceneSwitcher.action.window.type.minimizeWindow="Minimize window"
AdvSceneSwitcher.action.window.type.closeWindow="Close window"
AdvSceneSwitcher.action.window.entry="{{actions}}{{windows}}{{regex}}"
AdvSceneSwitcher.action.log="Log"
AdvSceneSwitcher.action.log.placeholder="My log message!"
AdvSceneSwitcher.action.log.entry="Write to OBS log:{{logMessage}}"

; Hotkey
AdvSceneSwitcher.hotkey.startSwitcherHotkey="Start the Advanced Scene Switcher"
Expand Down
2 changes: 2 additions & 0 deletions plugins/base/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ target_sources(
macro-action-hotkey.hpp
macro-action-http.cpp
macro-action-http.hpp
macro-action-log.cpp
macro-action-log.hpp
macro-action-media.cpp
macro-action-media.hpp
macro-action-osc.cpp
Expand Down
89 changes: 89 additions & 0 deletions plugins/base/macro-action-log.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#include "macro-action-log.hpp"
#include "layout-helpers.hpp"

namespace advss {

const std::string MacroActionLog::id = "log";

bool MacroActionLog::_registered = MacroActionFactory::Register(
MacroActionLog::id, {MacroActionLog::Create, MacroActionLogEdit::Create,
"AdvSceneSwitcher.action.log"});

bool MacroActionLog::PerformAction()
{
blog(LOG_INFO, "%s", std::string(_logMessage).c_str());
return true;
}

bool MacroActionLog::Save(obs_data_t *obj) const
{
MacroAction::Save(obj);
_logMessage.Save(obj, "logMessage");
return true;
}

bool MacroActionLog::Load(obs_data_t *obj)
{
MacroAction::Load(obj);
_logMessage.Load(obj, "logMessage");
return true;
}

std::shared_ptr<MacroAction> MacroActionLog::Create(Macro *m)
{
return std::make_shared<MacroActionLog>(m);
}

std::shared_ptr<MacroAction> MacroActionLog::Copy() const
{
return std::make_shared<MacroActionLog>(*this);
}

void MacroActionLog::ResolveVariablesToFixedValues()
{
_logMessage.ResolveVariables();
}

MacroActionLogEdit::MacroActionLogEdit(
QWidget *parent, std::shared_ptr<MacroActionLog> entryData)
: QWidget(parent),
_logMessage(new VariableTextEdit(this, 5, 1, 1))
{
QWidget::connect(_logMessage, SIGNAL(textChanged()), this,
SLOT(LogMessageChanged()));

auto layout = new QHBoxLayout();
PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.log.entry"),
layout, {{"{{logMessage}}", _logMessage}}, false);
setLayout(layout);

_entryData = entryData;
UpdateEntryData();
_loading = false;
}

void MacroActionLogEdit::UpdateEntryData()
{
if (!_entryData) {
return;
}

_logMessage->setPlainText(_entryData->_logMessage);
adjustSize();
updateGeometry();
}

void MacroActionLogEdit::LogMessageChanged()
{
if (_loading || !_entryData) {
return;
}

auto lock = LockContext();
_entryData->_logMessage = _logMessage->toPlainText().toStdString();

adjustSize();
updateGeometry();
}

} // namespace advss
50 changes: 50 additions & 0 deletions plugins/base/macro-action-log.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#pragma once
#include "macro-action-edit.hpp"
#include "variable-text-edit.hpp"

namespace advss {

class MacroActionLog : public MacroAction {
public:
MacroActionLog(Macro *m) : MacroAction(m) {}
bool PerformAction();
bool Save(obs_data_t *obj) const;
bool Load(obs_data_t *obj);
std::string GetId() const { return id; };
static std::shared_ptr<MacroAction> Create(Macro *m);
std::shared_ptr<MacroAction> Copy() const;
void ResolveVariablesToFixedValues();

StringVariable _logMessage =
obs_module_text("AdvSceneSwitcher.action.log.placeholder");

private:
static bool _registered;
static const std::string id;
};

class MacroActionLogEdit : public QWidget {
Q_OBJECT

public:
MacroActionLogEdit(QWidget *parent,
std::shared_ptr<MacroActionLog> entryData = nullptr);
void UpdateEntryData();
static QWidget *Create(QWidget *parent,
std::shared_ptr<MacroAction> action)
{
return new MacroActionLogEdit(
parent,
std::dynamic_pointer_cast<MacroActionLog>(action));
}

private slots:
void LogMessageChanged();

private:
VariableTextEdit *_logMessage;
std::shared_ptr<MacroActionLog> _entryData;
bool _loading = true;
};

} // namespace advss

0 comments on commit 074d734

Please sign in to comment.