History

isolate calls to the QtScript libraries to an interface we control

Heather Anderson committed 5 years ago

Commit 1e018db1 parent 713b29e260 files · +6904 −5064Browse files

Showing the changes to libraries/script-engine/src/RecordingScriptingInterface.cpp (1 of 260 files). Show all

Unified · Split

libraries/script-engine/src/RecordingScriptingInterface.cpp+36−20
@@ -11,7 +11,6 @@ · 10 unmodified lines
1111 #include <QStandardPaths>
1212 #include <QtCore/QThread>
1313 #include <QtCore/QUrl>
14−#include <QtScript/QScriptValue>
1514 #include <QtWidgets/QFileDialog>
1615
1716 #include <shared/QtHelpers.h>
@@ -27,7 +26,10 @@ · 9 unmodified lines
2726 #include <recording/Frame.h>
2827 #include <recording/ClipCache.h>
2928
29+#include "ScriptEngine.h"
3030 #include "ScriptEngineLogging.h"
31+#include "ScriptManager.h"
32+#include "ScriptValue.h"
3133
3234 using namespace recording;
3335
@@ -54,18 +56,19 @@ float RecordingScriptingInterface::playerLength() const { · 20 unmodified lines
5456 return _player->length();
5557 }
5658
57−void RecordingScriptingInterface::playClip(NetworkClipLoaderPointer clipLoader, const QString& url, QScriptValue callback) {
59+void RecordingScriptingInterface::playClip(NetworkClipLoaderPointer clipLoader, const QString& url, ScriptValuePointer callback) {
5860 _player->queueClip(clipLoader->getClip());
5961
60− if (callback.isFunction()) {
61− QScriptValueList args { true, url };
62− callback.call(QScriptValue(), args);
62+ if (callback->isFunction()) {
63+ auto engine = callback->engine();
64+ ScriptValueList args{ engine->newValue(true), engine->newValue(url) };
65+ callback->call(ScriptValuePointer(), args);
6366 }
6467 }
6568
66−void RecordingScriptingInterface::loadRecording(const QString& url, QScriptValue callback) {
69+void RecordingScriptingInterface::loadRecording(const QString& url, ScriptValuePointer callback) {
6770 if (QThread::currentThread() != thread()) {
68− BLOCKING_INVOKE_METHOD(this, "loadRecording", Q_ARG(const QString&, url), Q_ARG(QScriptValue, callback));
71+ BLOCKING_INVOKE_METHOD(this, "loadRecording", Q_ARG(const QString&, url), Q_ARG(ScriptValuePointer, callback));
6972 return;
7073 }
7174
@@ -82,8 +85,14 @@ void RecordingScriptingInterface::loadRecording(const QString& url, QScriptValue · 10 unmodified lines
8285
8386 auto weakClipLoader = clipLoader.toWeakRef();
8487
88+ auto manager = callback->engine()->manager();
89+ if (!manager) {
90+ qWarning() << "This script does not belong to a ScriptManager";
91+ return;
92+ }
93+
8594 // when clip loaded, call the callback with the URL and success boolean
86− connect(clipLoader.data(), &recording::NetworkClipLoader::clipLoaded, callback.engine(),
95+ connect(clipLoader.data(), &recording::NetworkClipLoader::clipLoaded, manager,
8796 [this, weakClipLoader, url, callback]() mutable {
8897
8998 if (auto clipLoader = weakClipLoader.toStrongRef()) {
@@ -97,12 +106,14 @@ void RecordingScriptingInterface::loadRecording(const QString& url, QScriptValue · 7 unmodified lines
97106 });
98107
99108 // when clip load fails, call the callback with the URL and failure boolean
100− connect(clipLoader.data(), &recording::NetworkClipLoader::failed, callback.engine(), [this, weakClipLoader, url, callback](QNetworkReply::NetworkError error) mutable {
109+ connect(clipLoader.data(), &recording::NetworkClipLoader::failed, manager,
110+ [this, weakClipLoader, url, callback](QNetworkReply::NetworkError error) mutable {
101111 qCDebug(scriptengine) << "Failed to load recording from\"" << url << '"';
102112
103− if (callback.isFunction()) {
104− QScriptValueList args { false, url };
105− callback.call(QScriptValue(), args);
113+ if (callback->isFunction()) {
114+ auto engine = callback->engine();
115+ ScriptValueList args{ engine->newValue(false), engine->newValue(url) };
116+ callback->call(ScriptValuePointer(), args);
106117 }
107118
108119 if (auto clipLoader = weakClipLoader.toStrongRef()) {
@@ -248,8 +259,8 @@ void RecordingScriptingInterface::saveRecording(const QString& filename) { · 139 unmodified lines
248259 recording::Clip::toFile(filename, _lastClip);
249260 }
250261
251−bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUrl) {
252− if (!getClipAtpUrl.isFunction()) {
262+bool RecordingScriptingInterface::saveRecordingToAsset(ScriptValuePointer getClipAtpUrl) {
263+ if (!getClipAtpUrl->isFunction()) {
253264 qCWarning(scriptengine) << "The argument is not a function.";
254265 return false;
255266 }
@@ -258,7 +269,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr · 2 unmodified lines
258269 bool result;
259270 BLOCKING_INVOKE_METHOD(this, "saveRecordingToAsset",
260271 Q_RETURN_ARG(bool, result),
261− Q_ARG(QScriptValue, getClipAtpUrl));
272+ Q_ARG(ScriptValuePointer, getClipAtpUrl));
262273 return result;
263274 }
264275
@@ -267,9 +278,14 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr · 2 unmodified lines
267278 return false;
268279 }
269280
281+ auto manager = getClipAtpUrl->engine()->manager();
282+ if (!manager) {
283+ qWarning() << "This script does not belong to a ScriptManager";
284+ return false;
285+ }
286+
270287 if (auto upload = DependencyManager::get<AssetClient>()->createUpload(recording::Clip::toBuffer(_lastClip))) {
271− QObject::connect(upload, &AssetUpload::finished,
272− getClipAtpUrl.engine(), [=](AssetUpload* upload, const QString& hash) mutable {
288+ QObject::connect(upload, &AssetUpload::finished, manager, [=](AssetUpload* upload, const QString& hash) mutable {
273289 QString clip_atp_url = "";
274290
275291 if (upload->getError() == AssetUpload::NoError) {
@@ -280,9 +296,9 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr · 4 unmodified lines
280296 qCWarning(scriptengine) << "Error during the Asset upload.";
281297 }
282298
283− QScriptValueList args;
284− args << clip_atp_url;
285− getClipAtpUrl.call(QScriptValue(), args);
299+ ScriptValueList args;
300+ args << getClipAtpUrl->engine()->newValue(clip_atp_url);
301+ getClipAtpUrl->call(ScriptValuePointer(), args);
286302 });
287303 upload->start();
288304 return true;