qmlfrontend/runqueue.cpp
changeset 14143 745c73e0e644
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmlfrontend/runqueue.cpp	Tue Nov 06 17:00:35 2018 +0100
@@ -0,0 +1,47 @@
+#include "runqueue.h"
+
+#include "flib.h"
+
+extern "C" {
+extern RunEngine_t* flibRunEngine;
+extern ipcToEngineRaw_t* flibIpcToEngineRaw;
+extern ipcSetEngineBarrier_t* flibIpcSetEngineBarrier;
+extern ipcRemoveBarrierFromEngineQueue_t* flibIpcRemoveBarrierFromEngineQueue;
+}
+
+RunQueue::RunQueue(QObject* parent)
+    : QObject(parent)
+{
+}
+
+void RunQueue::queue(const GameConfig& config)
+{
+    m_runQueue.prepend(config);
+
+    flibIpcSetEngineBarrier();
+    for (const QByteArray& b : m_runQueue.last().config()) {
+        flibIpcToEngineRaw(b.data(), b.size());
+    }
+
+    if (m_runQueue.size() == 1)
+        nextRun();
+}
+
+void RunQueue::onGameFinished()
+{
+    m_runQueue.pop_front();
+
+    nextRun();
+}
+
+void RunQueue::nextRun()
+{
+    if (!m_runQueue.isEmpty()) {
+        if (m_runQueue[0].isPreview())
+            emit previewIsRendering();
+
+        flibIpcRemoveBarrierFromEngineQueue();
+
+        flibRunEngine(m_runQueue[0].argc(), m_runQueue[0].argv());
+    }
+}