From cc2a7cbda891c823af9123987bf657c5f793b9ec Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 20 Nov 2015 11:51:08 -0800 Subject: [PATCH] Force synchronous loading of clips in JS --- .../src/RecordingScriptingInterface.cpp | 20 ++++++++++++------- .../src/RecordingScriptingInterface.h | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index d82d471d79..83e44ef173 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -44,19 +44,25 @@ float RecordingScriptingInterface::playerLength() const { return _player->length(); } -void RecordingScriptingInterface::loadRecording(const QString& url) { +bool RecordingScriptingInterface::loadRecording(const QString& url) { using namespace recording; - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "loadRecording", Qt::BlockingQueuedConnection, - Q_ARG(QString, url)); - return; + auto loader = ClipCache::instance().getClipLoader(url); + QEventLoop loop; + QObject::connect(loader.data(), &Resource::loaded, &loop, &QEventLoop::quit); + QObject::connect(loader.data(), &Resource::failed, &loop, &QEventLoop::quit); + loop.exec(); + + if (!loader->isLoaded()) { + qWarning() << "Clip failed to load from " << url; + return false; } - // FIXME make blocking and force off main thread? - _player->queueClip(ClipCache::instance().getClipLoader(url)->getClip()); + _player->queueClip(loader->getClip()); + return true; } + void RecordingScriptingInterface::startPlaying() { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "startPlaying", Qt::BlockingQueuedConnection); diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index 3834089177..b39485d75c 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -25,7 +25,7 @@ public: RecordingScriptingInterface(); public slots: - void loadRecording(const QString& url); + bool loadRecording(const QString& url); void startPlaying(); void pausePlayer();