Skip to content

Commit

Permalink
engine: fix Script V4 total time, function and fixture list
Browse files Browse the repository at this point in the history
  • Loading branch information
mcallegari committed Jul 3, 2018
1 parent ed452da commit aee977c
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 29 deletions.
17 changes: 12 additions & 5 deletions engine/src/scriptrunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ void ScriptRunner::stop()
m_startedFunctions.clear();
}

QList<int> ScriptRunner::syntaxErrorsLines()
QList<int> ScriptRunner::collectScriptData()
{
QList<int> syntaxErrorList;
QJSEngine *engine = new QJSEngine();
Expand Down Expand Up @@ -130,6 +130,11 @@ QList<int> ScriptRunner::syntaxErrorsLines()
return syntaxErrorList;
}

int ScriptRunner::currentWaitTime()
{
return m_waitCount * MasterTimer::tick();
}

GenericFader *ScriptRunner::fader()
{
// Create a fader if it doesn't exist yet
Expand Down Expand Up @@ -186,6 +191,8 @@ bool ScriptRunner::write(MasterTimer *timer, QList<Universe *> universes)

void ScriptRunner::run()
{
m_waitCount = 0;

m_engine = new QJSEngine();
QJSValue objectValue = m_engine->newQObject(this);
m_engine->globalObject().setProperty("Engine", objectValue);
Expand Down Expand Up @@ -369,13 +376,13 @@ bool ScriptRunner::systemCommand(QString command)

bool ScriptRunner::waitTime(uint ms)
{
m_waitCount += ms / MasterTimer::tick();

if (m_running == false)
return false;

qDebug() << Q_FUNC_INFO;

m_waitCount = ms / MasterTimer::tick();

while (m_waitCount > 0)
{
if (m_running == false)
Expand All @@ -389,13 +396,13 @@ bool ScriptRunner::waitTime(uint ms)

bool ScriptRunner::waitTime(QString time)
{
m_waitCount += Function::stringToSpeed(time) / MasterTimer::tick();

if (m_running == false)
return false;

qDebug() << Q_FUNC_INFO;

m_waitCount = Function::stringToSpeed(time) / MasterTimer::tick();

while (m_waitCount > 0)
{
if (m_running == false)
Expand Down
4 changes: 3 additions & 1 deletion engine/src/scriptrunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ class ScriptRunner : public QThread

void stop();

QList<int> syntaxErrorsLines();
QList<int> collectScriptData();

int currentWaitTime();

/** Get the script's GenericFader (and create it if necessary) */
GenericFader *fader();
Expand Down
70 changes: 49 additions & 21 deletions engine/src/scriptv4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,14 @@ QIcon Script::getIcon() const

quint32 Script::totalDuration()
{
quint32 totalDuration = 10000;
quint32 totalDuration = 0;

ScriptRunner *runner = new ScriptRunner(doc(), m_data);
runner->collectScriptData();
totalDuration = runner->currentWaitTime();
//runner->deleteLater();

qDebug() << "Script total duration:" << totalDuration;

return totalDuration;
}
Expand Down Expand Up @@ -103,16 +110,23 @@ bool Script::copyFrom(const Function* function)

bool Script::setData(const QString& str)
{
if (str == m_data)
return false;

m_data = str;
syntaxErrorsLines(); // TODO remove from here

Doc* doc = qobject_cast<Doc*> (parent());
Q_ASSERT(doc != NULL);
doc->setModified();

return true;
}

bool Script::appendData(const QString &str)
{
//m_data.append(str + QString("\n"));
m_data.append(tokenizeLine(str + QString("\n")));
m_data.append(convertLine(str + QString("\n")));

return true;
}
Expand All @@ -136,16 +150,21 @@ QList<quint32> Script::functionList() const
{
QList<quint32> list;

for (int i = 0; i < m_lines.count(); i++)
foreach (QString line, dataLines())
{
QList <QStringList> tokens = m_lines[i];
if (tokens.isEmpty() == true)
continue;

if (tokens[0].size() >= 2 && tokens[0][0] == Script::startFunctionCmd)
if (line.contains("startFunction") || line.contains("stopFunction"))
{
list.append(tokens[0][1].toUInt());
list.append(i);
QStringList tokens = line.split("(");
if (tokens.isEmpty() || tokens.count() < 2)
continue;

QStringList params = tokens[1].split(",");
if (tokens.isEmpty())
continue;

quint32 funcID = params[0].toUInt();
if (list.contains(funcID) == false)
list.append(funcID);
}
}

Expand All @@ -156,16 +175,21 @@ QList<quint32> Script::fixtureList() const
{
QList<quint32> list;

for (int i = 0; i < m_lines.count(); i++)
foreach (QString line, dataLines())
{
QList <QStringList> tokens = m_lines[i];
if (tokens.isEmpty() == true)
continue;

if (tokens[0].size() >= 2 && tokens[0][0] == Script::setFixtureCmd)
if (line.contains("setFixture"))
{
list.append(tokens[0][1].toUInt());
list.append(i);
QStringList tokens = line.split("(");
if (tokens.isEmpty() || tokens.count() < 2)
continue;

QStringList params = tokens[1].split(",");
if (tokens.isEmpty())
continue;

quint32 fxID = params[0].toUInt();
if (list.contains(fxID) == false)
list.append(fxID);
}
}

Expand All @@ -174,8 +198,12 @@ QList<quint32> Script::fixtureList() const

QList<int> Script::syntaxErrorsLines()
{
QList<int> errorList;
ScriptRunner *runner = new ScriptRunner(doc(), m_data);
return runner->syntaxErrorsLines();
errorList = runner->collectScriptData();
//runner->deleteLater();

return errorList;
}

/****************************************************************************
Expand Down Expand Up @@ -222,7 +250,7 @@ bool Script::loadXML(QXmlStreamReader &root)
else if (root.name() == KXMLQLCScriptCommand)
{
if (version == 1)
m_data.append(tokenizeLine(QUrl::fromPercentEncoding(root.readElementText().toUtf8()) + QString("\n")));
m_data.append(convertLine(QUrl::fromPercentEncoding(root.readElementText().toUtf8()) + QString("\n")));
else
m_data.append(QUrl::fromPercentEncoding(root.readElementText().toUtf8()) + QString("\n"));
}
Expand Down Expand Up @@ -330,7 +358,7 @@ quint32 Script::getValueFromString(QString str, bool *ok)
return qrand() % ((max + 1) - min) + min;
}

QString Script::tokenizeLine(const QString& str, bool *ok)
QString Script::convertLine(const QString& str, bool *ok)
{
QStringList tokens;
QString comment;
Expand Down
3 changes: 1 addition & 2 deletions engine/src/scriptv4.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,13 +147,12 @@ class Script : public Function
* @param ok Tells if the line was parsed OK or not
* @return A list of tokens parsed from the line
*/
static QString tokenizeLine(const QString& line, bool* ok = NULL);
static QString convertLine(const QString& line, bool* ok = NULL);

static QString convertLegacyMethod(QString method);

private:
ScriptRunner *m_runner;
QList < QList<QStringList> > m_lines; //! Raw data parsed into lines of tokens
QList <int> m_syntaxErrorLines;
};

Expand Down

0 comments on commit aee977c

Please sign in to comment.