Add warning if inline script file is invalid
Some checks failed
debian-build / build (push) Has been cancelled
Check locale / ubuntu64 (push) Has been cancelled
Push to master / Check Formatting 🔍 (push) Has been cancelled
Push to master / Build Project 🧱 (push) Has been cancelled
Push to master / Create Release 🛫 (push) Has been cancelled

This commit is contained in:
WarmUpTill
2025-09-15 21:45:45 +02:00
committed by WarmUpTill
parent 3c355ac6fe
commit ea4a951554
3 changed files with 68 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
#include "ui-helpers.hpp"
#include <QDesktopServices>
#include <QFile>
namespace advss {
@@ -57,6 +58,7 @@ MacroSegmentScriptInlineEdit::MacroSegmentScriptInlineEdit(
_openFile(new QPushButton(
obs_module_text("AdvSceneSwitcher.script.file.open"), this)),
_fileLayout(new QHBoxLayout()),
_contentIssueWarning(new QLabel(this)),
_entryData(entryData)
{
SetupLayout();
@@ -127,6 +129,8 @@ void MacroSegmentScriptInlineEdit::PathChanged(const QString &path)
const QSignalBlocker b(_path);
_path->SetPath(pathAdjusted);
_entryData->SetPath(pathAdjusted.toStdString());
SetupContentIssueWarning();
}
void MacroSegmentScriptInlineEdit::PopulateWidgets()
@@ -182,6 +186,7 @@ void MacroSegmentScriptInlineEdit::SetupLayout()
layout->addLayout(languageLayout);
layout->addLayout(_fileLayout);
layout->addWidget(_script);
layout->addWidget(_contentIssueWarning);
setLayout(layout);
}
@@ -191,8 +196,66 @@ void MacroSegmentScriptInlineEdit::SetWidgetVisibility()
InlineScript::Type::INLINE);
SetLayoutVisible(_fileLayout,
_entryData->GetType() == InlineScript::Type::FILE);
SetupContentIssueWarning();
adjustSize();
updateGeometry();
}
void MacroSegmentScriptInlineEdit::SetupContentIssueWarning() const
{
if (_entryData->GetType() == InlineScript::Type::INLINE) {
_contentIssueWarning->hide();
return;
}
const auto path = QString::fromStdString(_entryData->GetPath());
QFile file(path);
if (!file.exists()) {
_contentIssueWarning->setText(obs_module_text(
"AdvSceneSwitcher.script.file.warning.notFound"));
_contentIssueWarning->show();
return;
}
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
_contentIssueWarning->setText(obs_module_text(
"AdvSceneSwitcher.script.file.warning.openFail"));
_contentIssueWarning->show();
return;
}
QTextStream in(&file);
QStringList fileLines;
while (!in.atEnd()) {
QString line = in.readLine().trimmed();
fileLines << line.trimmed();
}
file.close();
static const QStringList requiredLinesLUA = {
"function script_load(settings)"};
static const QStringList requiredLinesPython = {
"def script_load(settings):"};
const auto &requiredLines = _entryData->GetLanguage() ==
OBS_SCRIPT_LANG_PYTHON
? requiredLinesPython
: requiredLinesLUA;
for (const QString &required : requiredLines) {
if (fileLines.contains(required)) {
_contentIssueWarning->hide();
return;
}
}
_contentIssueWarning->setText(obs_module_text(
"AdvSceneSwitcher.script.file.warning.loadMissing"));
_contentIssueWarning->show();
}
} // namespace advss

View File

@@ -42,6 +42,7 @@ protected:
void SetupWidgetConnections();
void SetupLayout();
void SetWidgetVisibility();
void SetupContentIssueWarning() const;
QComboBox *_scriptType;
QComboBox *_language;
@@ -49,6 +50,7 @@ protected:
FileSelection *_path;
QPushButton *_openFile;
QHBoxLayout *_fileLayout;
QLabel *_contentIssueWarning;
std::shared_ptr<MacroSegmentScriptInline> _entryData;
bool _loading = true;