diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index edda5821c..cae4f1a9d 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -743,9 +743,10 @@ AdvSceneSwitcher.action.recording.type.unpause="Unpause recording" AdvSceneSwitcher.action.recording.type.split="Split recording file" AdvSceneSwitcher.action.recording.type.changeOutputFolder="Change output folder" AdvSceneSwitcher.action.recording.type.changeOutputFileFormat="Change filename formatting" +AdvSceneSwitcher.action.recording.type.addChapter="Add chapter" AdvSceneSwitcher.action.recording.pause.hint="Note that depending on your recording settings you might not be able to pause recording" AdvSceneSwitcher.action.recording.split.hint="Make sure to enable automatic file splitting in the OBS settings first!" -AdvSceneSwitcher.action.recording.entry="{{actions}}{{recordFolder}}{{recordFileFormat}}{{pauseHint}}{{splitHint}}" +AdvSceneSwitcher.action.recording.entry="{{actions}}{{recordFolder}}{{recordFileFormat}}{{chapterName}}{{pauseHint}}{{splitHint}}" AdvSceneSwitcher.action.replay="Replay buffer" AdvSceneSwitcher.action.replay.saveWarn="Warning: Saving too frequently might result in the replay buffer not actually being saved!" AdvSceneSwitcher.action.replay.durationWarn="Warning: Changing the maximum replay time will only apply the next time the replay buffer is started!" diff --git a/plugins/base/macro-action-recording.cpp b/plugins/base/macro-action-recording.cpp index 0feec5d3e..8b5445094 100644 --- a/plugins/base/macro-action-recording.cpp +++ b/plugins/base/macro-action-recording.cpp @@ -22,12 +22,18 @@ const static std::map actionTypes = { "AdvSceneSwitcher.action.recording.type.pause"}, {MacroActionRecord::Action::UNPAUSE, "AdvSceneSwitcher.action.recording.type.unpause"}, +#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(28, 0, 0) {MacroActionRecord::Action::SPLIT, "AdvSceneSwitcher.action.recording.type.split"}, +#endif {MacroActionRecord::Action::FOLDER, "AdvSceneSwitcher.action.recording.type.changeOutputFolder"}, {MacroActionRecord::Action::FILE_FORMAT, "AdvSceneSwitcher.action.recording.type.changeOutputFileFormat"}, +#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(30, 2, 0) + {MacroActionRecord::Action::ADD_CHAPTER, + "AdvSceneSwitcher.action.recording.type.addChapter"}, +#endif }; bool MacroActionRecord::PerformAction() @@ -86,6 +92,13 @@ bool MacroActionRecord::PerformAction() "failed to set recoding file format string"); } break; +#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(30, 2, 0) + case Action::ADD_CHAPTER: + if (!obs_frontend_recording_add_chapter(_chapterName.c_str())) { + blog(LOG_WARNING, "failed to add recoding chapter!"); + } + break; +#endif } default: break; @@ -110,6 +123,7 @@ bool MacroActionRecord::Save(obs_data_t *obj) const obs_data_set_int(obj, "action", static_cast(_action)); _folder.Save(obj, "folder"); _fileFormat.Save(obj, "format"); + _chapterName.Save(obj, "chapterName"); return true; } @@ -119,6 +133,7 @@ bool MacroActionRecord::Load(obs_data_t *obj) _action = static_cast(obs_data_get_int(obj, "action")); _folder.Load(obj, "folder"); _fileFormat.Load(obj, "format"); + _chapterName.Load(obj, "chapterName"); return true; } @@ -136,6 +151,7 @@ void MacroActionRecord::ResolveVariablesToFixedValues() { _folder.ResolveVariables(); _fileFormat.ResolveVariables(); + _chapterName.ResolveVariables(); } static inline void populateActionSelection(QComboBox *list) @@ -154,7 +170,8 @@ MacroActionRecordEdit::MacroActionRecordEdit( _splitHint(new QLabel(obs_module_text( "AdvSceneSwitcher.action.recording.split.hint"))), _recordFolder(new FileSelection(FileSelection::Type::FOLDER, this)), - _recordFileFormat(new VariableLineEdit(this)) + _recordFileFormat(new VariableLineEdit(this)), + _chapterName(new VariableLineEdit(this)) { populateActionSelection(_actions); @@ -164,6 +181,8 @@ MacroActionRecordEdit::MacroActionRecordEdit( this, SLOT(FolderChanged(const QString &))); QWidget::connect(_recordFileFormat, SIGNAL(editingFinished()), this, SLOT(FormatStringChanged())); + QWidget::connect(_chapterName, SIGNAL(editingFinished()), this, + SLOT(ChapterNameChanged())); auto mainLayout = new QHBoxLayout; PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.recording.entry"), @@ -172,7 +191,8 @@ MacroActionRecordEdit::MacroActionRecordEdit( {"{{pauseHint}}", _pauseHint}, {"{{splitHint}}", _splitHint}, {"{{recordFolder}}", _recordFolder}, - {"{{recordFileFormat}}", _recordFileFormat}}); + {"{{recordFileFormat}}", _recordFileFormat}, + {"{{chapterName}}", _chapterName}}); setLayout(mainLayout); _entryData = entryData; @@ -188,6 +208,7 @@ void MacroActionRecordEdit::UpdateEntryData() _actions->setCurrentIndex(static_cast(_entryData->_action)); _recordFolder->SetPath(_entryData->_folder); _recordFileFormat->setText(_entryData->_fileFormat); + _chapterName->setText(_entryData->_chapterName); SetWidgetVisibility(); } @@ -199,24 +220,22 @@ static bool isPauseAction(MacroActionRecord::Action a) void MacroActionRecordEdit::FolderChanged(const QString &folder) { - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); + GUARD_LOADING_AND_LOCK(); _entryData->_folder = folder.toStdString(); } void MacroActionRecordEdit::FormatStringChanged() { - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); + GUARD_LOADING_AND_LOCK(); _entryData->_fileFormat = _recordFileFormat->text().toStdString(); } +void MacroActionRecordEdit::ChapterNameChanged() +{ + GUARD_LOADING_AND_LOCK(); + _entryData->_chapterName = _chapterName->text().toStdString(); +} + void MacroActionRecordEdit::SetWidgetVisibility() { _pauseHint->setVisible(isPauseAction(_entryData->_action)); @@ -226,6 +245,8 @@ void MacroActionRecordEdit::SetWidgetVisibility() MacroActionRecord::Action::FOLDER); _recordFileFormat->setVisible(_entryData->_action == MacroActionRecord::Action::FILE_FORMAT); + _chapterName->setVisible(_entryData->_action == + MacroActionRecord::Action::ADD_CHAPTER); } void MacroActionRecordEdit::ActionChanged(int value) diff --git a/plugins/base/macro-action-recording.hpp b/plugins/base/macro-action-recording.hpp index c8d0d96c5..af8e7d3eb 100644 --- a/plugins/base/macro-action-recording.hpp +++ b/plugins/base/macro-action-recording.hpp @@ -29,11 +29,13 @@ class MacroActionRecord : public MacroAction { SPLIT, FOLDER, FILE_FORMAT, + ADD_CHAPTER, }; Action _action = Action::STOP; StringVariable _folder = QDir::homePath().toStdString() + "/Videos"; StringVariable _fileFormat = "%CCYY-%MM-%DD %hh-%mm-%ss"; + StringVariable _chapterName = ""; private: static bool _registered; @@ -60,6 +62,7 @@ private slots: void ActionChanged(int value); void FolderChanged(const QString &); void FormatStringChanged(); + void ChapterNameChanged(); protected: QComboBox *_actions; @@ -67,6 +70,7 @@ private slots: QLabel *_splitHint; FileSelection *_recordFolder; VariableLineEdit *_recordFileFormat; + VariableLineEdit *_chapterName; std::shared_ptr _entryData; private: