From d27cbac3f8e97e7159e5e17d7908376612e0259d Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 21 Feb 2018 18:21:45 -0800 Subject: [PATCH] loading directly into a serverless domain works. user will have edit permissions --- interface/src/Application.cpp | 54 +++++++++++++-------- libraries/networking/src/AddressManager.cpp | 5 +- libraries/networking/src/DomainHandler.cpp | 8 ++- libraries/networking/src/DomainHandler.h | 2 +- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e12f3bd858..0ba155858b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1048,7 +1048,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); - connect(&domainHandler, SIGNAL(serverlessDomainChanged(const QString&)), SLOT(domainChanged(const QString&))); + connect(&domainHandler, SIGNAL(serverlessDomainChanged(QUrl)), SLOT(loadServerlessDomain(QUrl))); connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); connect(&domainHandler, SIGNAL(connectedToDomain(const QString&, const QUrl&)), SLOT(updateWindowTitle())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle())); @@ -1109,7 +1109,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress); connect(addressManager.data(), &AddressManager::setServersEnabled, this, &Application::setServersEnabled); - connect(addressManager.data(), &AddressManager::loadServerlessDomain, this, &Application::loadServerlessDomain); connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount); connect(this, &Application::activeDisplayPluginChanged, this, [](){ @@ -2978,25 +2977,25 @@ void Application::handleSandboxStatus(QNetworkReply* reply) { QString sentTo; - // If this is a first run we short-circuit the address passed in - if (firstRun.get()) { - showHelp(); - if (sandboxIsRunning) { - qCDebug(interfaceapp) << "Home sandbox appears to be running, going to Home."; - DependencyManager::get()->goToLocalSandbox(); - sentTo = SENT_TO_SANDBOX; - } else { - qCDebug(interfaceapp) << "Home sandbox does not appear to be running, going to Entry."; - DependencyManager::get()->goToEntry(); - sentTo = SENT_TO_ENTRY; - } - firstRun.set(false); - + // If this is a first run we short-circuit the address passed in + if (firstRun.get()) { + showHelp(); + if (sandboxIsRunning) { + qCDebug(interfaceapp) << "Home sandbox appears to be running, going to Home."; + DependencyManager::get()->goToLocalSandbox(); + sentTo = SENT_TO_SANDBOX; } else { - qCDebug(interfaceapp) << "Not first run... going to" << qPrintable(addressLookupString.isEmpty() ? QString("previous location") : addressLookupString); - DependencyManager::get()->loadSettings(addressLookupString); - sentTo = SENT_TO_PREVIOUS_LOCATION; + qCDebug(interfaceapp) << "Home sandbox does not appear to be running, going to Entry."; + DependencyManager::get()->goToEntry(); + sentTo = SENT_TO_ENTRY; } + firstRun.set(false); + + } else { + qCDebug(interfaceapp) << "Not first run... going to" << qPrintable(addressLookupString.isEmpty() ? QString("previous location") : addressLookupString); + DependencyManager::get()->loadSettings(addressLookupString); + sentTo = SENT_TO_PREVIOUS_LOCATION; + } UserActivityLogger::getInstance().logAction("startup_sent_to", { { "sent_to", sentTo }, @@ -3053,11 +3052,23 @@ void Application::loadServerlessDomain(QUrl domainURL) { return; } - auto addressManager = DependencyManager::get(); - addressManager->handleLookupString(DOMAIN_SPAWNING_POINT); + qDebug() << "QQQQ loadServerlessDomain" << domainURL.toString(); clearDomainOctreeDetails(); _entityClipboard->eraseAllOctreeElements(); + + if (domainURL.isEmpty()) { + return; + } + + auto addressManager = DependencyManager::get(); + addressManager->handleLookupString(DOMAIN_SPAWNING_POINT); + + // there is no domain-server to tell us our permissions, so enable all + NodePermissions permissions; + permissions.setAll(true); + DependencyManager::get()->setPermissions(permissions); + getEntities()->getTree()->setIsServerlessMode(true); getEntities()->getTree()->eraseAllOctreeElements(); if (importEntities(domainURL.toString())) { @@ -5774,6 +5785,7 @@ void Application::clearDomainAvatars() { } void Application::domainChanged(const QString& domainHostname) { + qDebug() << "QQQQ Application::domainChanged" << domainHostname; clearDomainOctreeDetails(); getEntities()->getTree()->setIsServerlessMode(isServerlessMode()); updateWindowTitle(); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 07b9c2fa3f..1357c72b49 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -306,7 +306,6 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) { emit setServersEnabled(false); setDomainInfo(domainUrl, QString(), 0, trigger); DependencyManager::get()->getDomainHandler().setIsConnected(true); - emit loadServerlessDomain(domainUrl); emit lookupResultsFinished(); return true; } @@ -405,6 +404,8 @@ void AddressManager::goToAddressFromObject(const QVariantMap& dataObject, const QString domainIDString = domainObject[DOMAIN_ID_KEY].toString(); QUuid domainID(domainIDString); + qDebug() << "QQQQ AddressManager::goToAddressFromObject"; + if (domainObject.contains(DOMAIN_NETWORK_ADDRESS_KEY)) { QString domainHostname = domainObject[DOMAIN_NETWORK_ADDRESS_KEY].toString(); @@ -756,7 +757,7 @@ bool AddressManager::setDomainInfo(const QUrl& serverlessDomainURL, _serverlessDomainURL = serverlessDomainURL; if (!serverlessDomainURL.isEmpty()) { - qCDebug(networking) << "Possible domain change required to serverless domain: " << serverlessDomainURL; + qCDebug(networking) << "Possible domain change required to serverless domain: " << serverlessDomainURL.toString(); } else { qCDebug(networking) << "Possible domain change required to connect to domain at" << hostname << "on" << port; } diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index ab28702b06..883d25c6b1 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -156,6 +156,8 @@ void DomainHandler::setSocketAndID(const QUrl& serverlessDomainURL, _pendingDomainID = domainID; + qDebug() << "QQQQ DomainHandler::setSocketAndID " << serverlessDomainURL << hostname << port; + if (serverlessDomainURL != _serverlessDomainURL || hostname != _hostname || _sockAddr.getPort() != port) { // re-set the domain info so that auth information is reloaded hardReset(); @@ -165,7 +167,8 @@ void DomainHandler::setSocketAndID(const QUrl& serverlessDomainURL, if (_serverlessDomainURL != QUrl()) { setIsConnected(true); } - emit serverlessDomainChanged(_serverlessDomainURL.toString()); + qDebug() << "QQQQ serverlessDomainChanged"; + emit serverlessDomainChanged(_serverlessDomainURL); } if (hostname != _hostname) { @@ -184,6 +187,7 @@ void DomainHandler::setSocketAndID(const QUrl& serverlessDomainURL, UserActivityLogger::getInstance().changedDomain(_hostname); } + qDebug() << "QQQQ hostnameChanged"; emit hostnameChanged(_hostname); } @@ -200,7 +204,7 @@ void DomainHandler::setIceServerHostnameAndID(const QString& iceServerHostname, if (_serverlessDomainURL != QUrl()) { _serverlessDomainURL = QUrl(); - emit serverlessDomainChanged(""); + emit serverlessDomainChanged(QUrl()); } if (_iceServerSockAddr.getAddress().toString() != iceServerHostname || id != _pendingDomainID) { diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 51260be341..550bc2f561 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -157,7 +157,7 @@ private slots: signals: void hostnameChanged(const QString& hostname); - void serverlessDomainChanged(const QString& hostname); + void serverlessDomainChanged(QUrl serverlessDomainURL); // NOTE: the emission of completedSocketDiscovery does not mean a connection to DS is established // It means that, either from DNS lookup or ICE, we think we have a socket we can talk to DS on