mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-29 04:36:21 -05:00
Compare commits
1 Commits
record-pat
...
recording
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21a00d47cc |
@@ -295,6 +295,7 @@ AdvSceneSwitcher.condition.record="Recording"
|
|||||||
AdvSceneSwitcher.condition.record.state.start="Recording running"
|
AdvSceneSwitcher.condition.record.state.start="Recording running"
|
||||||
AdvSceneSwitcher.condition.record.state.pause="Recording paused"
|
AdvSceneSwitcher.condition.record.state.pause="Recording paused"
|
||||||
AdvSceneSwitcher.condition.record.state.stop="Recording stopped"
|
AdvSceneSwitcher.condition.record.state.stop="Recording stopped"
|
||||||
|
AdvSceneSwitcher.condition.record.state.saveDone="Recording saved"
|
||||||
AdvSceneSwitcher.condition.record.entry="{{recordState}}"
|
AdvSceneSwitcher.condition.record.entry="{{recordState}}"
|
||||||
AdvSceneSwitcher.condition.process="Process"
|
AdvSceneSwitcher.condition.process="Process"
|
||||||
AdvSceneSwitcher.condition.process.entry="{{processes}}is running{{focused}}and is focused"
|
AdvSceneSwitcher.condition.process.entry="{{processes}}is running{{focused}}and is focused"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "macro-condition-recording.hpp"
|
#include "macro-condition-recording.hpp"
|
||||||
|
#include "macro.hpp"
|
||||||
#include "utility.hpp"
|
#include "utility.hpp"
|
||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
@@ -10,45 +11,91 @@ bool MacroConditionRecord::_registered = MacroConditionFactory::Register(
|
|||||||
{MacroConditionRecord::Create, MacroConditionRecordEdit::Create,
|
{MacroConditionRecord::Create, MacroConditionRecordEdit::Create,
|
||||||
"AdvSceneSwitcher.condition.record"});
|
"AdvSceneSwitcher.condition.record"});
|
||||||
|
|
||||||
const static std::map<RecordState, std::string> recordStates = {
|
const static std::map<MacroConditionRecord::Condition, std::string>
|
||||||
{RecordState::STOP, "AdvSceneSwitcher.condition.record.state.stop"},
|
recordStates = {
|
||||||
{RecordState::PAUSE, "AdvSceneSwitcher.condition.record.state.pause"},
|
{MacroConditionRecord::Condition::STOP,
|
||||||
{RecordState::START, "AdvSceneSwitcher.condition.record.state.start"},
|
"AdvSceneSwitcher.condition.record.state.stop"},
|
||||||
|
{MacroConditionRecord::Condition::PAUSE,
|
||||||
|
"AdvSceneSwitcher.condition.record.state.pause"},
|
||||||
|
{MacroConditionRecord::Condition::START,
|
||||||
|
"AdvSceneSwitcher.condition.record.state.start"},
|
||||||
|
{MacroConditionRecord::Condition::SAVE_DONE,
|
||||||
|
"AdvSceneSwitcher.condition.record.state.saveDone"},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MacroConditionRecord::MacroConditionRecord(Macro *m) : MacroCondition(m)
|
||||||
|
{
|
||||||
|
OBSOutputAutoRelease output = obs_frontend_get_recording_output();
|
||||||
|
if (!output) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto sh = obs_output_get_signal_handler(output);
|
||||||
|
signal_handler_connect(sh, "stop", StopSignal, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
MacroConditionRecord::~MacroConditionRecord()
|
||||||
|
{
|
||||||
|
OBSOutputAutoRelease output = obs_frontend_get_recording_output();
|
||||||
|
if (!output) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto sh = obs_output_get_signal_handler(output);
|
||||||
|
signal_handler_disconnect(sh, "stop", StopSignal, this);
|
||||||
|
}
|
||||||
|
|
||||||
bool MacroConditionRecord::CheckCondition()
|
bool MacroConditionRecord::CheckCondition()
|
||||||
{
|
{
|
||||||
bool stateMatch = false;
|
switch (_condition) {
|
||||||
switch (_recordState) {
|
case Condition::STOP:
|
||||||
case RecordState::STOP:
|
return !obs_frontend_recording_active();
|
||||||
stateMatch = !obs_frontend_recording_active();
|
case Condition::PAUSE:
|
||||||
break;
|
return obs_frontend_recording_paused();
|
||||||
case RecordState::PAUSE:
|
case Condition::START:
|
||||||
stateMatch = obs_frontend_recording_paused();
|
return obs_frontend_recording_active();
|
||||||
break;
|
case Condition::SAVE_DONE:
|
||||||
case RecordState::START:
|
if (_recordingSaveDone) {
|
||||||
stateMatch = obs_frontend_recording_active();
|
_recordingSaveDone = false;
|
||||||
break;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return stateMatch;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionRecord::Save(obs_data_t *obj) const
|
bool MacroConditionRecord::Save(obs_data_t *obj) const
|
||||||
{
|
{
|
||||||
MacroCondition::Save(obj);
|
MacroCondition::Save(obj);
|
||||||
obs_data_set_int(obj, "state", static_cast<int>(_recordState));
|
obs_data_set_int(obj, "state", static_cast<int>(_condition));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionRecord::Load(obs_data_t *obj)
|
bool MacroConditionRecord::Load(obs_data_t *obj)
|
||||||
{
|
{
|
||||||
MacroCondition::Load(obj);
|
MacroCondition::Load(obj);
|
||||||
_recordState = static_cast<RecordState>(obs_data_get_int(obj, "state"));
|
_condition = static_cast<Condition>(obs_data_get_int(obj, "state"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacroConditionRecord::StopSignal(void *c, calldata_t *data)
|
||||||
|
{
|
||||||
|
auto condition = static_cast<MacroConditionRecord *>(c);
|
||||||
|
const auto macro = condition->GetMacro();
|
||||||
|
if (macro && macro->Paused()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long code = 0;
|
||||||
|
if (!calldata_get_int(data, "code", &code)) {
|
||||||
|
condition->_recordingSaveDone = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code == OBS_OUTPUT_SUCCESS) {
|
||||||
|
condition->_recordingSaveDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void populateStateSelection(QComboBox *list)
|
static inline void populateStateSelection(QComboBox *list)
|
||||||
{
|
{
|
||||||
for (auto entry : recordStates) {
|
for (auto entry : recordStates) {
|
||||||
@@ -89,7 +136,8 @@ void MacroConditionRecordEdit::StateChanged(int value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto lock = LockContext();
|
auto lock = LockContext();
|
||||||
_entryData->_recordState = static_cast<RecordState>(value);
|
_entryData->_condition =
|
||||||
|
static_cast<MacroConditionRecord::Condition>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroConditionRecordEdit::UpdateEntryData()
|
void MacroConditionRecordEdit::UpdateEntryData()
|
||||||
@@ -98,8 +146,7 @@ void MacroConditionRecordEdit::UpdateEntryData()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_recordState->setCurrentIndex(
|
_recordState->setCurrentIndex(static_cast<int>(_entryData->_condition));
|
||||||
static_cast<int>(_entryData->_recordState));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace advss
|
} // namespace advss
|
||||||
|
|||||||
@@ -6,15 +6,10 @@
|
|||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
enum class RecordState {
|
|
||||||
STOP,
|
|
||||||
PAUSE,
|
|
||||||
START,
|
|
||||||
};
|
|
||||||
|
|
||||||
class MacroConditionRecord : public MacroCondition {
|
class MacroConditionRecord : public MacroCondition {
|
||||||
public:
|
public:
|
||||||
MacroConditionRecord(Macro *m) : MacroCondition(m) {}
|
MacroConditionRecord(Macro *m);
|
||||||
|
~MacroConditionRecord();
|
||||||
bool CheckCondition();
|
bool CheckCondition();
|
||||||
bool Save(obs_data_t *obj) const;
|
bool Save(obs_data_t *obj) const;
|
||||||
bool Load(obs_data_t *obj);
|
bool Load(obs_data_t *obj);
|
||||||
@@ -24,9 +19,18 @@ public:
|
|||||||
return std::make_shared<MacroConditionRecord>(m);
|
return std::make_shared<MacroConditionRecord>(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordState _recordState = RecordState::STOP;
|
enum class Condition {
|
||||||
|
STOP,
|
||||||
|
PAUSE,
|
||||||
|
START,
|
||||||
|
SAVE_DONE,
|
||||||
|
};
|
||||||
|
Condition _condition = Condition::STOP;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static void StopSignal(void *condition, calldata_t *);
|
||||||
|
bool _recordingSaveDone = false;
|
||||||
|
|
||||||
static bool _registered;
|
static bool _registered;
|
||||||
static const std::string id;
|
static const std::string id;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user