diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8a950fabd2..0cf135db7c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2957,8 +2957,15 @@ void Application::init() { Setting::Handle firstRun { Settings::firstRun, true }; if (addressLookupString.isEmpty() && firstRun.get()) { - qDebug() << "First run and no URL passed... attempting to Go Home..."; - DependencyManager::get()->goHomeOrElsewhere(); + qDebug() << "First run and no URL passed... attempting to go to Home or Entry..."; + DependencyManager::get()->ifLocalSandboxRunningElse([](){ + qDebug() << "Home sandbox appears to be running, going to Home."; + DependencyManager::get()->goToLocalSandbox(); + }, + [](){ + qDebug() << "Home sandbox does not appear to be running, going to Entry."; + DependencyManager::get()->goToEntry(); + }); } else { qDebug() << "Not first run... going to" << qPrintable(addressLookupString.isEmpty() ? QString("previous location") : addressLookupString); DependencyManager::get()->loadSettings(addressLookupString); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index c27081ec28..757e145c9a 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -630,13 +630,15 @@ void AddressManager::addCurrentAddressToHistory(LookupTrigger trigger) { } } -void AddressManager::goHomeOrElsewhere(QString elsewhere, LookupTrigger trigger) { +void AddressManager::ifLocalSandboxRunningElse(std::function localSandboxRunningDoThis, + std::function localSandboxNotRunningDoThat) { + QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); - QNetworkRequest sandboxStatus(QString("http://localhost:60332/status")); + QNetworkRequest sandboxStatus(SANDBOX_STATUS_URL); sandboxStatus.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(sandboxStatus); - connect(reply, &QNetworkReply::finished, this, [this, elsewhere, reply, trigger]() { + connect(reply, &QNetworkReply::finished, this, [reply, localSandboxRunningDoThis, localSandboxNotRunningDoThat]() { auto statusData = reply->readAll(); auto statusJson = QJsonDocument::fromJson(statusData); if (!statusJson.isEmpty()) { @@ -647,14 +649,12 @@ void AddressManager::goHomeOrElsewhere(QString elsewhere, LookupTrigger trigger) auto serversCount = serversObject.size(); const int MINIMUM_EXPECTED_SERVER_COUNT = 5; if (serversCount >= MINIMUM_EXPECTED_SERVER_COUNT) { - qDebug() << "Home sandbox is running, going to " << SANDBOX_HIFI_ADDRESS; - handleUrl(SANDBOX_HIFI_ADDRESS, trigger); + localSandboxRunningDoThis(); return; } } } - qDebug() << "Home sandbox was not running, going to " << elsewhere << "instead."; - handleUrl(elsewhere, trigger); + localSandboxNotRunningDoThat(); }); } diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 1b6b04a055..d746442376 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -25,6 +25,7 @@ const QString HIFI_URL_SCHEME = "hifi"; const QString DEFAULT_HIFI_ADDRESS = "hifi://entry"; const QString SANDBOX_HIFI_ADDRESS = "hifi://localhost"; +const QString SANDBOX_STATUS_URL = "http://localhost:60332/status"; const QString INDEX_PATH = "/"; const QString GET_PLACE = "/api/v1/places/%1"; @@ -66,8 +67,10 @@ public: const QStack& getBackStack() const { return _backStack; } const QStack& getForwardStack() const { return _forwardStack; } - void goHomeOrElsewhere(QString elsewhere = DEFAULT_HIFI_ADDRESS, - LookupTrigger trigger = LookupTrigger::StartupFromSettings); + /// determines if the local sandbox is likely running. It does not account for custom setups but is only + /// intended to detect the standard sandbox install. + void ifLocalSandboxRunningElse(std::function localSandboxRunningDoThis, + std::function localSandboxNotRunningDoThat); public slots: void handleLookupString(const QString& lookupString); @@ -78,6 +81,8 @@ public slots: void goBack(); void goForward(); + void goToLocalSandbox(LookupTrigger trigger = LookupTrigger::StartupFromSettings) { handleUrl(SANDBOX_HIFI_ADDRESS, trigger); } + void goToEntry(LookupTrigger trigger = LookupTrigger::StartupFromSettings) { handleUrl(DEFAULT_HIFI_ADDRESS, trigger); } void goToUser(const QString& username);