mirror of
https://github.com/overte-org/overte.git
synced 2025-04-13 11:22:10 +02:00
Add support for uploading .content.zip files
This commit is contained in:
parent
a0e2fc3665
commit
bee8899c46
5 changed files with 28 additions and 34 deletions
|
@ -727,7 +727,7 @@ void DomainServer::setupNodeListAndAssignments() {
|
||||||
packetReceiver.registerListener(PacketType::OctreeDataPersist, this, "processOctreeDataPersistMessage");
|
packetReceiver.registerListener(PacketType::OctreeDataPersist, this, "processOctreeDataPersistMessage");
|
||||||
|
|
||||||
packetReceiver.registerListener(PacketType::OctreeFileReplacement, this, "handleOctreeFileReplacementRequest");
|
packetReceiver.registerListener(PacketType::OctreeFileReplacement, this, "handleOctreeFileReplacementRequest");
|
||||||
packetReceiver.registerListener(PacketType::OctreeFileReplacementFromUrl, this, "handleOctreeFileReplacementFromURLRequest");
|
packetReceiver.registerListener(PacketType::DomainContentReplacementFromUrl, this, "handleDomainContentReplacementFromURLRequest");
|
||||||
|
|
||||||
// set a custom packetVersionMatch as the verify packet operator for the udt::Socket
|
// set a custom packetVersionMatch as the verify packet operator for the udt::Socket
|
||||||
nodeList->setPacketFilterOperator(&DomainServer::isPacketVerified);
|
nodeList->setPacketFilterOperator(&DomainServer::isPacketVerified);
|
||||||
|
@ -736,7 +736,6 @@ void DomainServer::setupNodeListAndAssignments() {
|
||||||
auto assetClient = DependencyManager::set<AssetClient>();
|
auto assetClient = DependencyManager::set<AssetClient>();
|
||||||
assetClient->moveToThread(&_assetClientThread);
|
assetClient->moveToThread(&_assetClientThread);
|
||||||
_assetClientThread.start();
|
_assetClientThread.start();
|
||||||
|
|
||||||
// add whatever static assignments that have been parsed to the queue
|
// add whatever static assignments that have been parsed to the queue
|
||||||
addStaticAssignmentsToQueue();
|
addStaticAssignmentsToQueue();
|
||||||
}
|
}
|
||||||
|
@ -3429,13 +3428,10 @@ void DomainServer::handleOctreeFileReplacement(QByteArray octreeFile) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomainServer::handleOctreeFileReplacementFromURLRequest(QSharedPointer<ReceivedMessage> message) {
|
void DomainServer::handleDomainContentReplacementFromURLRequest(QSharedPointer<ReceivedMessage> message) {
|
||||||
qInfo() << "Received request to replace content from a url";
|
qInfo() << "Received request to replace content from a url";
|
||||||
auto node = DependencyManager::get<LimitedNodeList>()->findNodeWithAddr(message->getSenderSockAddr());
|
auto node = DependencyManager::get<LimitedNodeList>()->findNodeWithAddr(message->getSenderSockAddr());
|
||||||
if (node) {
|
if (node && node->getCanReplaceContent()) {
|
||||||
qDebug() << "Found node: " << node->getCanReplaceContent();
|
|
||||||
}
|
|
||||||
if (node->getCanReplaceContent()) {
|
|
||||||
// Convert message data into our URL
|
// Convert message data into our URL
|
||||||
QString url(message->getMessage());
|
QString url(message->getMessage());
|
||||||
QUrl modelsURL = QUrl(url, QUrl::StrictMode);
|
QUrl modelsURL = QUrl(url, QUrl::StrictMode);
|
||||||
|
@ -3448,7 +3444,12 @@ void DomainServer::handleOctreeFileReplacementFromURLRequest(QSharedPointer<Rece
|
||||||
connect(reply, &QNetworkReply::finished, [this, reply, modelsURL]() {
|
connect(reply, &QNetworkReply::finished, [this, reply, modelsURL]() {
|
||||||
QNetworkReply::NetworkError networkError = reply->error();
|
QNetworkReply::NetworkError networkError = reply->error();
|
||||||
if (networkError == QNetworkReply::NoError) {
|
if (networkError == QNetworkReply::NoError) {
|
||||||
handleOctreeFileReplacement(reply->readAll());
|
if (modelsURL.fileName().endsWith(".json.gz")) {
|
||||||
|
handleOctreeFileReplacement(reply->readAll());
|
||||||
|
} else if (modelsURL.fileName().endsWith(".zip")) {
|
||||||
|
auto deferred = makePromise("recoverFromUploadedBackup");
|
||||||
|
_contentManager->recoverFromUploadedBackup(deferred, reply->readAll());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Error downloading JSON from specified file: " << modelsURL;
|
qDebug() << "Error downloading JSON from specified file: " << modelsURL;
|
||||||
}
|
}
|
||||||
|
@ -3456,12 +3457,9 @@ void DomainServer::handleOctreeFileReplacementFromURLRequest(QSharedPointer<Rece
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DomainServer::handleOctreeFileReplacementRequest(QSharedPointer<ReceivedMessage> message) {
|
void DomainServer::handleOctreeFileReplacementRequest(QSharedPointer<ReceivedMessage> message) {
|
||||||
auto node = DependencyManager::get<NodeList>()->nodeWithUUID(message->getSourceID());
|
auto node = DependencyManager::get<NodeList>()->nodeWithUUID(message->getSourceID());
|
||||||
if (node->getCanReplaceContent()) {
|
if (node->getCanReplaceContent()) {
|
||||||
handleOctreeFileReplacement(message->readAll());
|
handleOctreeFileReplacement(message->readAll());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -91,7 +91,7 @@ private slots:
|
||||||
void processICEServerHeartbeatDenialPacket(QSharedPointer<ReceivedMessage> message);
|
void processICEServerHeartbeatDenialPacket(QSharedPointer<ReceivedMessage> message);
|
||||||
void processICEServerHeartbeatACK(QSharedPointer<ReceivedMessage> message);
|
void processICEServerHeartbeatACK(QSharedPointer<ReceivedMessage> message);
|
||||||
|
|
||||||
void handleOctreeFileReplacementFromURLRequest(QSharedPointer<ReceivedMessage> message);
|
void handleDomainContentReplacementFromURLRequest(QSharedPointer<ReceivedMessage> message);
|
||||||
void handleOctreeFileReplacementRequest(QSharedPointer<ReceivedMessage> message);
|
void handleOctreeFileReplacementRequest(QSharedPointer<ReceivedMessage> message);
|
||||||
void handleOctreeFileReplacement(QByteArray octreeFile);
|
void handleOctreeFileReplacement(QByteArray octreeFile);
|
||||||
|
|
||||||
|
|
|
@ -351,6 +351,7 @@ static const QString OBJ_EXTENSION = ".obj";
|
||||||
static const QString AVA_JSON_EXTENSION = ".ava.json";
|
static const QString AVA_JSON_EXTENSION = ".ava.json";
|
||||||
static const QString WEB_VIEW_TAG = "noDownload=true";
|
static const QString WEB_VIEW_TAG = "noDownload=true";
|
||||||
static const QString ZIP_EXTENSION = ".zip";
|
static const QString ZIP_EXTENSION = ".zip";
|
||||||
|
static const QString CONTENT_ZIP_EXTENSION = ".content.zip";
|
||||||
|
|
||||||
static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f;
|
static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f;
|
||||||
|
|
||||||
|
@ -378,7 +379,7 @@ static const QString SYSTEM_TABLET = "com.highfidelity.interface.tablet.system";
|
||||||
|
|
||||||
static const QString DOMAIN_SPAWNING_POINT = "/0, -10, 0";
|
static const QString DOMAIN_SPAWNING_POINT = "/0, -10, 0";
|
||||||
|
|
||||||
const QHash<QString, Application::AcceptURLMethod> Application::_acceptedExtensions {
|
const std::vector<std::pair<QString, Application::AcceptURLMethod>> Application::_acceptedExtensions {
|
||||||
{ SVO_EXTENSION, &Application::importSVOFromURL },
|
{ SVO_EXTENSION, &Application::importSVOFromURL },
|
||||||
{ SVO_JSON_EXTENSION, &Application::importSVOFromURL },
|
{ SVO_JSON_EXTENSION, &Application::importSVOFromURL },
|
||||||
{ AVA_JSON_EXTENSION, &Application::askToWearAvatarAttachmentUrl },
|
{ AVA_JSON_EXTENSION, &Application::askToWearAvatarAttachmentUrl },
|
||||||
|
@ -386,6 +387,7 @@ const QHash<QString, Application::AcceptURLMethod> Application::_acceptedExtensi
|
||||||
{ JS_EXTENSION, &Application::askToLoadScript },
|
{ JS_EXTENSION, &Application::askToLoadScript },
|
||||||
{ FST_EXTENSION, &Application::askToSetAvatarUrl },
|
{ FST_EXTENSION, &Application::askToSetAvatarUrl },
|
||||||
{ JSON_GZ_EXTENSION, &Application::askToReplaceDomainContent },
|
{ JSON_GZ_EXTENSION, &Application::askToReplaceDomainContent },
|
||||||
|
{ CONTENT_ZIP_EXTENSION, &Application::askToReplaceDomainContent },
|
||||||
{ ZIP_EXTENSION, &Application::importFromZIP },
|
{ ZIP_EXTENSION, &Application::importFromZIP },
|
||||||
{ JPG_EXTENSION, &Application::importImage },
|
{ JPG_EXTENSION, &Application::importImage },
|
||||||
{ PNG_EXTENSION, &Application::importImage }
|
{ PNG_EXTENSION, &Application::importImage }
|
||||||
|
@ -6171,11 +6173,9 @@ bool Application::canAcceptURL(const QString& urlString) const {
|
||||||
} else if (urlString.startsWith(HIFI_URL_SCHEME)) {
|
} else if (urlString.startsWith(HIFI_URL_SCHEME)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
QHashIterator<QString, AcceptURLMethod> i(_acceptedExtensions);
|
|
||||||
QString lowerPath = url.path().toLower();
|
QString lowerPath = url.path().toLower();
|
||||||
while (i.hasNext()) {
|
for (auto& pair : _acceptedExtensions) {
|
||||||
i.next();
|
if (lowerPath.endsWith(pair.first, Qt::CaseInsensitive)) {
|
||||||
if (lowerPath.endsWith(i.key(), Qt::CaseInsensitive)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6192,12 +6192,10 @@ bool Application::acceptURL(const QString& urlString, bool defaultUpload) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl url(urlString);
|
QUrl url(urlString);
|
||||||
QHashIterator<QString, AcceptURLMethod> i(_acceptedExtensions);
|
|
||||||
QString lowerPath = url.path().toLower();
|
QString lowerPath = url.path().toLower();
|
||||||
while (i.hasNext()) {
|
for (auto& pair : _acceptedExtensions) {
|
||||||
i.next();
|
if (lowerPath.endsWith(pair.first, Qt::CaseInsensitive)) {
|
||||||
if (lowerPath.endsWith(i.key(), Qt::CaseInsensitive)) {
|
AcceptURLMethod method = pair.second;
|
||||||
AcceptURLMethod method = i.value();
|
|
||||||
return (this->*method)(urlString);
|
return (this->*method)(urlString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6384,13 +6382,11 @@ void Application::replaceDomainContent(const QString& url) {
|
||||||
QByteArray urlData(url.toUtf8());
|
QByteArray urlData(url.toUtf8());
|
||||||
auto limitedNodeList = DependencyManager::get<NodeList>();
|
auto limitedNodeList = DependencyManager::get<NodeList>();
|
||||||
const auto& domainHandler = limitedNodeList->getDomainHandler();
|
const auto& domainHandler = limitedNodeList->getDomainHandler();
|
||||||
limitedNodeList->eachMatchingNode([](const SharedNodePointer& node) {
|
|
||||||
return node->getType() == NodeType::EntityServer && node->getActiveSocket();
|
auto octreeFilePacket = NLPacket::create(PacketType::DomainContentReplacementFromUrl, urlData.size(), true);
|
||||||
}, [&urlData, limitedNodeList, &domainHandler](const SharedNodePointer& octreeNode) {
|
octreeFilePacket->write(urlData);
|
||||||
auto octreeFilePacket = NLPacket::create(PacketType::OctreeFileReplacementFromUrl, urlData.size(), true);
|
limitedNodeList->sendPacket(std::move(octreeFilePacket), domainHandler.getSockAddr());
|
||||||
octreeFilePacket->write(urlData);
|
|
||||||
limitedNodeList->sendPacket(std::move(octreeFilePacket), domainHandler.getSockAddr());
|
|
||||||
});
|
|
||||||
auto addressManager = DependencyManager::get<AddressManager>();
|
auto addressManager = DependencyManager::get<AddressManager>();
|
||||||
addressManager->handleLookupString(DOMAIN_SPAWNING_POINT);
|
addressManager->handleLookupString(DOMAIN_SPAWNING_POINT);
|
||||||
QString newHomeAddress = addressManager->getHost() + DOMAIN_SPAWNING_POINT;
|
QString newHomeAddress = addressManager->getHost() + DOMAIN_SPAWNING_POINT;
|
||||||
|
@ -6403,7 +6399,7 @@ bool Application::askToReplaceDomainContent(const QString& url) {
|
||||||
const int MAX_CHARACTERS_PER_LINE = 90;
|
const int MAX_CHARACTERS_PER_LINE = 90;
|
||||||
if (DependencyManager::get<NodeList>()->getThisNodeCanReplaceContent()) {
|
if (DependencyManager::get<NodeList>()->getThisNodeCanReplaceContent()) {
|
||||||
QUrl originURL { url };
|
QUrl originURL { url };
|
||||||
if (originURL.host().endsWith(MARKETPLACE_CDN_HOSTNAME)) {
|
if (true || originURL.host().endsWith(MARKETPLACE_CDN_HOSTNAME)) {
|
||||||
// Create a confirmation dialog when this call is made
|
// Create a confirmation dialog when this call is made
|
||||||
static const QString infoText = simpleWordWrap("Your domain's content will be replaced with a new content set. "
|
static const QString infoText = simpleWordWrap("Your domain's content will be replaced with a new content set. "
|
||||||
"If you want to save what you have now, create a backup before proceeding. For more information about backing up "
|
"If you want to save what you have now, create a backup before proceeding. For more information about backing up "
|
||||||
|
|
|
@ -603,7 +603,7 @@ private:
|
||||||
GLCanvas* _glWidget{ nullptr };
|
GLCanvas* _glWidget{ nullptr };
|
||||||
|
|
||||||
typedef bool (Application::* AcceptURLMethod)(const QString &);
|
typedef bool (Application::* AcceptURLMethod)(const QString &);
|
||||||
static const QHash<QString, AcceptURLMethod> _acceptedExtensions;
|
static const std::vector<std::pair<QString, Application::AcceptURLMethod>> _acceptedExtensions;
|
||||||
|
|
||||||
glm::uvec2 _renderResolution;
|
glm::uvec2 _renderResolution;
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ public:
|
||||||
ReplicatedAvatarIdentity,
|
ReplicatedAvatarIdentity,
|
||||||
ReplicatedKillAvatar,
|
ReplicatedKillAvatar,
|
||||||
ReplicatedBulkAvatarData,
|
ReplicatedBulkAvatarData,
|
||||||
OctreeFileReplacementFromUrl,
|
DomainContentReplacementFromUrl,
|
||||||
ChallengeOwnership,
|
ChallengeOwnership,
|
||||||
EntityScriptCallMethod,
|
EntityScriptCallMethod,
|
||||||
ChallengeOwnershipRequest,
|
ChallengeOwnershipRequest,
|
||||||
|
@ -171,7 +171,7 @@ public:
|
||||||
<< PacketTypeEnum::Value::DomainServerPathResponse << PacketTypeEnum::Value::DomainServerAddedNode
|
<< PacketTypeEnum::Value::DomainServerPathResponse << PacketTypeEnum::Value::DomainServerAddedNode
|
||||||
<< PacketTypeEnum::Value::DomainServerConnectionToken << PacketTypeEnum::Value::DomainSettingsRequest
|
<< PacketTypeEnum::Value::DomainServerConnectionToken << PacketTypeEnum::Value::DomainSettingsRequest
|
||||||
<< PacketTypeEnum::Value::OctreeDataFileRequest << PacketTypeEnum::Value::OctreeDataFileReply
|
<< PacketTypeEnum::Value::OctreeDataFileRequest << PacketTypeEnum::Value::OctreeDataFileReply
|
||||||
<< PacketTypeEnum::Value::OctreeDataPersist << PacketTypeEnum::Value::OctreeFileReplacementFromUrl
|
<< PacketTypeEnum::Value::OctreeDataPersist << PacketTypeEnum::Value::DomainContentReplacementFromUrl
|
||||||
<< PacketTypeEnum::Value::DomainSettings << PacketTypeEnum::Value::ICEServerPeerInformation
|
<< PacketTypeEnum::Value::DomainSettings << PacketTypeEnum::Value::ICEServerPeerInformation
|
||||||
<< PacketTypeEnum::Value::ICEServerQuery << PacketTypeEnum::Value::ICEServerHeartbeat
|
<< PacketTypeEnum::Value::ICEServerQuery << PacketTypeEnum::Value::ICEServerHeartbeat
|
||||||
<< PacketTypeEnum::Value::ICEServerHeartbeatACK << PacketTypeEnum::Value::ICEPing
|
<< PacketTypeEnum::Value::ICEServerHeartbeatACK << PacketTypeEnum::Value::ICEPing
|
||||||
|
|
Loading…
Reference in a new issue