From 1b18d3656ffeee15c7cc5db0f91bdcbc7977b702 Mon Sep 17 00:00:00 2001 From: EdgarPironti Date: Thu, 19 Nov 2015 19:36:17 -0800 Subject: [PATCH 1/5] Save clip to asset --- .../src/RecordingScriptingInterface.cpp | 56 +++++++++++++++++++ .../src/RecordingScriptingInterface.h | 9 +++ 2 files changed, 65 insertions(+) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 83e44ef173..fbabdc73af 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -18,10 +18,15 @@ #include #include +#include +#include + #include "ScriptEngineLogging.h" using namespace recording; +static const QString HFR_EXTENSION = ".hfr"; +const QString URL_SCHEME_ATP = "atp"; RecordingScriptingInterface::RecordingScriptingInterface() { _player = DependencyManager::get(); @@ -171,6 +176,57 @@ void RecordingScriptingInterface::saveRecording(const QString& filename) { recording::Clip::toFile(filename, _lastClip); } +bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUrl) { + + if (!getClipAtpUrl.isFunction()) + return false; + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "saveRecordingToAsset", Qt::BlockingQueuedConnection, + Q_ARG(QScriptValue, getClipAtpUrl)); + return false; + } + + if (!_lastClip) { + qWarning() << "There is no recording to save"; + return false; + } + + QString filename = "./temp.hfr"; + recording::Clip::toFile(filename, _lastClip); + + QUrl url{ filename }; + + if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { // Here we should use the other implementation of createUpload, but we need the QByteArray of the _lastClip + + QObject::connect(upload, &AssetUpload::finished, this, [=](AssetUpload* upload, const QString& hash) mutable { + auto filename = QFileInfo(upload->getFilename()).fileName(); + QString clip_atp_url = ""; + + if (upload->getError() == AssetUpload::NoError) { + + clip_atp_url = QString("%1:%2.%3").arg(URL_SCHEME_ATP, hash, upload->getExtension()); + upload->deleteLater(); + } else { + AssetUploadDialogFactory::getInstance().handleUploadFinished(upload, hash); + } + + QScriptValueList args; + args << clip_atp_url; + getClipAtpUrl.call(QScriptValue(), args); + }); + + // start the upload now + upload->start(); + return true; + + } + + return false; + +} + + void RecordingScriptingInterface::loadLastRecording() { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "loadLastRecording", Qt::BlockingQueuedConnection); diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index b39485d75c..704e10efa1 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -18,6 +18,11 @@ #include #include +#include +#include +#include +#include "../../../interface/src/ui/AssetUploadDialogFactory.h" + class RecordingScriptingInterface : public QObject, public Dependency { Q_OBJECT @@ -60,6 +65,7 @@ public slots: float recorderElapsed() const; void saveRecording(const QString& filename); + bool saveRecordingToAsset(QScriptValue getClipAtpUrl); void loadLastRecording(); protected: @@ -76,6 +82,9 @@ protected: Flag _useAttachments { false }; Flag _useSkeletonModel { false }; recording::ClipPointer _lastClip; + +private: + void clipUploadFinished(AssetUpload* upload, const QString& hash); }; #endif // hifi_RecordingScriptingInterface_h From 1db6d0e3c192b669e03a46f938b3ca5ee43c0f66 Mon Sep 17 00:00:00 2001 From: EdgarPironti Date: Thu, 19 Nov 2015 22:51:36 -0800 Subject: [PATCH 2/5] Upload QByteArray --- .../src/RecordingScriptingInterface.cpp | 21 +++++++------------ .../src/RecordingScriptingInterface.h | 3 --- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index fbabdc73af..128182d2a8 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -177,8 +177,7 @@ void RecordingScriptingInterface::saveRecording(const QString& filename) { } bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUrl) { - - if (!getClipAtpUrl.isFunction()) + if (!getClipAtpUrl.isFunction()) return false; if (QThread::currentThread() != thread()) { @@ -192,13 +191,14 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr return false; } - QString filename = "./temp.hfr"; - recording::Clip::toFile(filename, _lastClip); + //QString filename = "./temp.hfr"; + //recording::Clip::toFile(filename, _lastClip); - QUrl url{ filename }; - - if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { // Here we should use the other implementation of createUpload, but we need the QByteArray of the _lastClip + //QUrl url{ filename }; + //if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { + + if (auto upload = DependencyManager::get()->createUpload(recording::Clip::toBuffer(_lastClip), HFR_EXTENSION)) { QObject::connect(upload, &AssetUpload::finished, this, [=](AssetUpload* upload, const QString& hash) mutable { auto filename = QFileInfo(upload->getFilename()).fileName(); QString clip_atp_url = ""; @@ -215,18 +215,13 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr args << clip_atp_url; getClipAtpUrl.call(QScriptValue(), args); }); - - // start the upload now upload->start(); return true; - - } + } return false; - } - void RecordingScriptingInterface::loadLastRecording() { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "loadLastRecording", Qt::BlockingQueuedConnection); diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index 704e10efa1..21aa9b35d4 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -82,9 +82,6 @@ protected: Flag _useAttachments { false }; Flag _useSkeletonModel { false }; recording::ClipPointer _lastClip; - -private: - void clipUploadFinished(AssetUpload* upload, const QString& hash); }; #endif // hifi_RecordingScriptingInterface_h From 35365f9157f24f13a2b79ce61858d9c18b148507 Mon Sep 17 00:00:00 2001 From: EdgarPironti Date: Fri, 20 Nov 2015 13:32:55 -0800 Subject: [PATCH 3/5] Fixes --- libraries/script-engine/src/RecordingScriptingInterface.cpp | 5 ++--- libraries/script-engine/src/RecordingScriptingInterface.h | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 128182d2a8..34114fdf2f 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -25,8 +25,7 @@ using namespace recording; -static const QString HFR_EXTENSION = ".hfr"; -const QString URL_SCHEME_ATP = "atp"; +static const QString HFR_EXTENSION = "hfr"; RecordingScriptingInterface::RecordingScriptingInterface() { _player = DependencyManager::get(); @@ -208,7 +207,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr clip_atp_url = QString("%1:%2.%3").arg(URL_SCHEME_ATP, hash, upload->getExtension()); upload->deleteLater(); } else { - AssetUploadDialogFactory::getInstance().handleUploadFinished(upload, hash); + qDebug() << "Error during the Asset upload."; } QScriptValueList args; diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index 21aa9b35d4..c1287a42d7 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -21,7 +21,6 @@ #include #include #include -#include "../../../interface/src/ui/AssetUploadDialogFactory.h" class RecordingScriptingInterface : public QObject, public Dependency { Q_OBJECT From e70f6855aa355c09f3a559dc66124bb5635cc008 Mon Sep 17 00:00:00 2001 From: EdgarPironti Date: Fri, 20 Nov 2015 13:36:57 -0800 Subject: [PATCH 4/5] Fixes --- .../script-engine/src/RecordingScriptingInterface.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 34114fdf2f..36ef88354e 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -190,14 +190,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr return false; } - //QString filename = "./temp.hfr"; - //recording::Clip::toFile(filename, _lastClip); - - //QUrl url{ filename }; - - //if (auto upload = DependencyManager::get()->createUpload(url.toLocalFile())) { - - if (auto upload = DependencyManager::get()->createUpload(recording::Clip::toBuffer(_lastClip), HFR_EXTENSION)) { + if (auto upload = DependencyManager::get()->createUpload(recording::Clip::toBuffer(_lastClip), HFR_EXTENSION)) { QObject::connect(upload, &AssetUpload::finished, this, [=](AssetUpload* upload, const QString& hash) mutable { auto filename = QFileInfo(upload->getFilename()).fileName(); QString clip_atp_url = ""; From df2153186d6c6005137f0854cd7dad0bddd72c07 Mon Sep 17 00:00:00 2001 From: EdgarPironti Date: Fri, 20 Nov 2015 16:04:28 -0800 Subject: [PATCH 5/5] Fixes --- .../src/RecordingScriptingInterface.cpp | 19 ++++++++++++++----- .../src/RecordingScriptingInterface.h | 4 +--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 36ef88354e..1a88d6e260 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -18,6 +18,10 @@ #include #include + +#include +#include +#include #include #include @@ -176,13 +180,18 @@ void RecordingScriptingInterface::saveRecording(const QString& filename) { } bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUrl) { - if (!getClipAtpUrl.isFunction()) + if (!getClipAtpUrl.isFunction()) { + qCWarning(scriptengine) << "The argument is not a function."; return false; + } + if (QThread::currentThread() != thread()) { + bool result{ false }; QMetaObject::invokeMethod(this, "saveRecordingToAsset", Qt::BlockingQueuedConnection, - Q_ARG(QScriptValue, getClipAtpUrl)); - return false; + Q_ARG(QScriptValue, getClipAtpUrl), + Q_RETURN_ARG(bool, result)); + return result; } if (!_lastClip) { @@ -192,7 +201,6 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr if (auto upload = DependencyManager::get()->createUpload(recording::Clip::toBuffer(_lastClip), HFR_EXTENSION)) { QObject::connect(upload, &AssetUpload::finished, this, [=](AssetUpload* upload, const QString& hash) mutable { - auto filename = QFileInfo(upload->getFilename()).fileName(); QString clip_atp_url = ""; if (upload->getError() == AssetUpload::NoError) { @@ -200,7 +208,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr clip_atp_url = QString("%1:%2.%3").arg(URL_SCHEME_ATP, hash, upload->getExtension()); upload->deleteLater(); } else { - qDebug() << "Error during the Asset upload."; + qCWarning(scriptengine) << "Error during the Asset upload."; } QScriptValueList args; @@ -211,6 +219,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr return true; } + qCWarning(scriptengine) << "Saving on asset failed."; return false; } diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index c1287a42d7..9661ee9d80 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -18,9 +18,7 @@ #include #include -#include -#include -#include +class QScriptValue; class RecordingScriptingInterface : public QObject, public Dependency { Q_OBJECT