mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 02:36:45 +02:00
move the AssetScriptInterface to script-engine
This commit is contained in:
parent
f9f42a085a
commit
181b20f673
5 changed files with 213 additions and 175 deletions
|
@ -765,156 +765,3 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) {
|
||||||
|
|
||||||
_mappingCache.clear();
|
_mappingCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetScriptingInterface::uploadData(QString data, QScriptValue callback) {
|
|
||||||
QByteArray dataByteArray = data.toUtf8();
|
|
||||||
auto upload = DependencyManager::get<AssetClient>()->createUpload(dataByteArray);
|
|
||||||
if (!upload) {
|
|
||||||
qCWarning(asset_client) << "Error uploading file to asset server";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject::connect(upload, &AssetUpload::finished, this, [this, callback](AssetUpload* upload, const QString& hash) mutable {
|
|
||||||
if (callback.isFunction()) {
|
|
||||||
QString url = "atp://" + hash;
|
|
||||||
QScriptValueList args { url };
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
upload->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
AssetScriptingInterface::AssetScriptingInterface(QScriptEngine* engine) :
|
|
||||||
_engine(engine)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::downloadData(QString urlString, QScriptValue callback) {
|
|
||||||
const QString ATP_SCHEME { "atp://" };
|
|
||||||
|
|
||||||
if (!urlString.startsWith(ATP_SCHEME)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make request to atp
|
|
||||||
auto path = urlString.right(urlString.length() - ATP_SCHEME.length());
|
|
||||||
auto parts = path.split(".", QString::SkipEmptyParts);
|
|
||||||
auto hash = parts.length() > 0 ? parts[0] : "";
|
|
||||||
|
|
||||||
if (hash.length() != SHA256_HASH_HEX_LENGTH) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto assetRequest = assetClient->createRequest(hash);
|
|
||||||
|
|
||||||
if (!assetRequest) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_pendingRequests << assetRequest;
|
|
||||||
|
|
||||||
connect(assetRequest, &AssetRequest::finished, this, [this, callback](AssetRequest* request) mutable {
|
|
||||||
Q_ASSERT(request->getState() == AssetRequest::Finished);
|
|
||||||
|
|
||||||
if (request->getError() == AssetRequest::Error::NoError) {
|
|
||||||
if (callback.isFunction()) {
|
|
||||||
QString data = QString::fromUtf8(request->getData());
|
|
||||||
QScriptValueList args { data };
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
_pendingRequests.remove(request);
|
|
||||||
});
|
|
||||||
|
|
||||||
assetRequest->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::setMapping(QString path, QString hash, QScriptValue callback) {
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto request = assetClient->createSetMappingRequest(path, hash);
|
|
||||||
|
|
||||||
connect(request, &SetMappingRequest::finished, this, [this, callback](SetMappingRequest* request) mutable {
|
|
||||||
QScriptValueList args { uint8_t(request->getError()) };
|
|
||||||
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
request->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::getMapping(QString path, QScriptValue callback) {
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto request = assetClient->createGetMappingRequest(path);
|
|
||||||
|
|
||||||
connect(request, &GetMappingRequest::finished, this, [this, callback](GetMappingRequest* request) mutable {
|
|
||||||
QScriptValueList args { uint8_t(request->getError()), request->getHash() };
|
|
||||||
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
request->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::deleteMappings(QStringList paths, QScriptValue callback) {
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto request = assetClient->createDeleteMappingsRequest(paths);
|
|
||||||
|
|
||||||
connect(request, &DeleteMappingsRequest::finished, this, [this, callback](DeleteMappingsRequest* request) mutable {
|
|
||||||
QScriptValueList args { uint8_t(request->getError()) };
|
|
||||||
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
request->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::getAllMappings(QScriptValue callback) {
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto request = assetClient->createGetAllMappingsRequest();
|
|
||||||
|
|
||||||
connect(request, &GetAllMappingsRequest::finished, this, [this, callback](GetAllMappingsRequest* request) mutable {
|
|
||||||
auto mappings = request->getMappings();
|
|
||||||
auto map = callback.engine()->newObject();
|
|
||||||
|
|
||||||
for (auto& kv : mappings ) {
|
|
||||||
map.setProperty(kv.first, kv.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
QScriptValueList args { uint8_t(request->getError()), map };
|
|
||||||
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
request->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AssetScriptingInterface::renameMapping(QString oldPath, QString newPath, QScriptValue callback) {
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
|
||||||
auto request = assetClient->createRenameMappingRequest(oldPath, newPath);
|
|
||||||
|
|
||||||
connect(request, &RenameMappingRequest::finished, this, [this, callback](RenameMappingRequest* request) mutable {
|
|
||||||
QScriptValueList args { uint8_t(request->getError()) };
|
|
||||||
|
|
||||||
callback.call(_engine->currentContext()->thisObject(), args);
|
|
||||||
|
|
||||||
request->deleteLater();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
request->start();
|
|
||||||
}
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#define hifi_AssetClient_h
|
#define hifi_AssetClient_h
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QScriptValue>
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
@ -206,23 +205,4 @@ private:
|
||||||
friend class RenameMappingRequest;
|
friend class RenameMappingRequest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class AssetScriptingInterface : public QObject {
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
AssetScriptingInterface(QScriptEngine* engine);
|
|
||||||
|
|
||||||
Q_INVOKABLE void uploadData(QString data, QScriptValue callback);
|
|
||||||
Q_INVOKABLE void downloadData(QString url, QScriptValue downloadComplete);
|
|
||||||
Q_INVOKABLE void setMapping(QString path, QString hash, QScriptValue callback);
|
|
||||||
Q_INVOKABLE void getMapping(QString path, QScriptValue callback);
|
|
||||||
Q_INVOKABLE void deleteMappings(QStringList paths, QScriptValue callback);
|
|
||||||
Q_INVOKABLE void getAllMappings(QScriptValue callback);
|
|
||||||
Q_INVOKABLE void renameMapping(QString oldPath, QString newPath, QScriptValue callback);
|
|
||||||
protected:
|
|
||||||
QSet<AssetRequest*> _pendingRequests;
|
|
||||||
QScriptEngine* _engine;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
172
libraries/script-engine/src/AssetScriptingInterface.cpp
Normal file
172
libraries/script-engine/src/AssetScriptingInterface.cpp
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
//
|
||||||
|
// AssetScriptingInterface.cpp
|
||||||
|
// libraries/script-engine/src
|
||||||
|
//
|
||||||
|
// Created by Stephen Birarda on 2016-03-08.
|
||||||
|
// Copyright 2016 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "AssetScriptingInterface.h"
|
||||||
|
|
||||||
|
#include <QtScript/QScriptEngine>
|
||||||
|
|
||||||
|
#include <AssetRequest.h>
|
||||||
|
#include <AssetUpload.h>
|
||||||
|
#include <NetworkLogging.h>
|
||||||
|
|
||||||
|
AssetScriptingInterface::AssetScriptingInterface(QScriptEngine* engine) :
|
||||||
|
_engine(engine)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::uploadData(QString data, QScriptValue callback) {
|
||||||
|
QByteArray dataByteArray = data.toUtf8();
|
||||||
|
auto upload = DependencyManager::get<AssetClient>()->createUpload(dataByteArray);
|
||||||
|
if (!upload) {
|
||||||
|
qCWarning(asset_client) << "Error uploading file to asset server";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject::connect(upload, &AssetUpload::finished, this, [this, callback](AssetUpload* upload, const QString& hash) mutable {
|
||||||
|
if (callback.isFunction()) {
|
||||||
|
QString url = "atp://" + hash;
|
||||||
|
QScriptValueList args { url };
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
upload->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::downloadData(QString urlString, QScriptValue callback) {
|
||||||
|
const QString ATP_SCHEME { "atp://" };
|
||||||
|
|
||||||
|
if (!urlString.startsWith(ATP_SCHEME)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make request to atp
|
||||||
|
auto path = urlString.right(urlString.length() - ATP_SCHEME.length());
|
||||||
|
auto parts = path.split(".", QString::SkipEmptyParts);
|
||||||
|
auto hash = parts.length() > 0 ? parts[0] : "";
|
||||||
|
|
||||||
|
if (hash.length() != SHA256_HASH_HEX_LENGTH) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto assetRequest = assetClient->createRequest(hash);
|
||||||
|
|
||||||
|
if (!assetRequest) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_pendingRequests << assetRequest;
|
||||||
|
|
||||||
|
connect(assetRequest, &AssetRequest::finished, this, [this, callback](AssetRequest* request) mutable {
|
||||||
|
Q_ASSERT(request->getState() == AssetRequest::Finished);
|
||||||
|
|
||||||
|
if (request->getError() == AssetRequest::Error::NoError) {
|
||||||
|
if (callback.isFunction()) {
|
||||||
|
QString data = QString::fromUtf8(request->getData());
|
||||||
|
QScriptValueList args { data };
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
_pendingRequests.remove(request);
|
||||||
|
});
|
||||||
|
|
||||||
|
assetRequest->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::setMapping(QString path, QString hash, QScriptValue callback) {
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto request = assetClient->createSetMappingRequest(path, hash);
|
||||||
|
|
||||||
|
connect(request, &SetMappingRequest::finished, this, [this, callback](SetMappingRequest* request) mutable {
|
||||||
|
QScriptValueList args { uint8_t(request->getError()) };
|
||||||
|
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
request->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::getMapping(QString path, QScriptValue callback) {
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto request = assetClient->createGetMappingRequest(path);
|
||||||
|
|
||||||
|
connect(request, &GetMappingRequest::finished, this, [this, callback](GetMappingRequest* request) mutable {
|
||||||
|
QScriptValueList args { uint8_t(request->getError()), request->getHash() };
|
||||||
|
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
request->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::deleteMappings(QStringList paths, QScriptValue callback) {
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto request = assetClient->createDeleteMappingsRequest(paths);
|
||||||
|
|
||||||
|
connect(request, &DeleteMappingsRequest::finished, this, [this, callback](DeleteMappingsRequest* request) mutable {
|
||||||
|
QScriptValueList args { uint8_t(request->getError()) };
|
||||||
|
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
request->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::getAllMappings(QScriptValue callback) {
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto request = assetClient->createGetAllMappingsRequest();
|
||||||
|
|
||||||
|
connect(request, &GetAllMappingsRequest::finished, this, [this, callback](GetAllMappingsRequest* request) mutable {
|
||||||
|
auto mappings = request->getMappings();
|
||||||
|
auto map = callback.engine()->newObject();
|
||||||
|
|
||||||
|
for (auto& kv : mappings ) {
|
||||||
|
map.setProperty(kv.first, kv.second);
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValueList args { uint8_t(request->getError()), map };
|
||||||
|
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
request->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetScriptingInterface::renameMapping(QString oldPath, QString newPath, QScriptValue callback) {
|
||||||
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
auto request = assetClient->createRenameMappingRequest(oldPath, newPath);
|
||||||
|
|
||||||
|
connect(request, &RenameMappingRequest::finished, this, [this, callback](RenameMappingRequest* request) mutable {
|
||||||
|
QScriptValueList args { uint8_t(request->getError()) };
|
||||||
|
|
||||||
|
callback.call(_engine->currentContext()->thisObject(), args);
|
||||||
|
|
||||||
|
request->deleteLater();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
request->start();
|
||||||
|
}
|
39
libraries/script-engine/src/AssetScriptingInterface.h
Normal file
39
libraries/script-engine/src/AssetScriptingInterface.h
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
//
|
||||||
|
// AssetScriptingInterface.h
|
||||||
|
// libraries/script-engine/src
|
||||||
|
//
|
||||||
|
// Created by Stephen Birarda on 2016-03-08.
|
||||||
|
// Copyright 2016 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef hifi_AssetScriptingInterface_h
|
||||||
|
#define hifi_AssetScriptingInterface_h
|
||||||
|
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
#include <QtScript/QScriptValue>
|
||||||
|
|
||||||
|
#include <AssetClient.h>
|
||||||
|
|
||||||
|
class AssetScriptingInterface : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
AssetScriptingInterface(QScriptEngine* engine);
|
||||||
|
|
||||||
|
Q_INVOKABLE void uploadData(QString data, QScriptValue callback);
|
||||||
|
Q_INVOKABLE void downloadData(QString url, QScriptValue downloadComplete);
|
||||||
|
Q_INVOKABLE void setMapping(QString path, QString hash, QScriptValue callback);
|
||||||
|
Q_INVOKABLE void getMapping(QString path, QScriptValue callback);
|
||||||
|
Q_INVOKABLE void deleteMappings(QStringList paths, QScriptValue callback);
|
||||||
|
Q_INVOKABLE void getAllMappings(QScriptValue callback);
|
||||||
|
Q_INVOKABLE void renameMapping(QString oldPath, QString newPath, QScriptValue callback);
|
||||||
|
protected:
|
||||||
|
QSet<AssetRequest*> _pendingRequests;
|
||||||
|
QScriptEngine* _engine;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // hifi_AssetScriptingInterface_h
|
|
@ -23,7 +23,6 @@
|
||||||
|
|
||||||
#include <AnimationCache.h>
|
#include <AnimationCache.h>
|
||||||
#include <AnimVariant.h>
|
#include <AnimVariant.h>
|
||||||
#include <AssetClient.h>
|
|
||||||
#include <AvatarData.h>
|
#include <AvatarData.h>
|
||||||
#include <AvatarHashMap.h>
|
#include <AvatarHashMap.h>
|
||||||
#include <LimitedNodeList.h>
|
#include <LimitedNodeList.h>
|
||||||
|
@ -32,6 +31,7 @@
|
||||||
|
|
||||||
#include "MouseEvent.h"
|
#include "MouseEvent.h"
|
||||||
#include "ArrayBufferClass.h"
|
#include "ArrayBufferClass.h"
|
||||||
|
#include "AssetScriptingInterface.h"
|
||||||
#include "AudioScriptingInterface.h"
|
#include "AudioScriptingInterface.h"
|
||||||
#include "Quat.h"
|
#include "Quat.h"
|
||||||
#include "ScriptCache.h"
|
#include "ScriptCache.h"
|
||||||
|
|
Loading…
Reference in a new issue