From 8b517467885f4082fc50a13f25ed43c1090ca6c4 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 9 May 2016 18:49:29 -0700 Subject: [PATCH 1/8] don't show help or login on first run --- interface/src/Application.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5b0d5c65ce..14df366def 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -702,9 +702,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : // The value will be 0 if the user blew away settings this session, which is both a feature and a bug. UserActivityLogger::getInstance().launch(applicationVersion(), _previousSessionCrashed, sessionRunTime.get()); - // once the event loop has started, check and signal for an access token - QMetaObject::invokeMethod(&accountManager, "checkAndSignalForAccessToken", Qt::QueuedConnection); - auto addressManager = DependencyManager::get(); // use our MyAvatar position and quat for address manager path @@ -1327,8 +1324,6 @@ void Application::initializeGL() { // update before the first render update(0); - - InfoView::show(INFO_HELP_PATH, true); } FrameTimingsScriptingInterface _frameTimingsScriptingInterface; From 22f4beab1acfdc90d1ac23f90352c6389705cbd1 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 10:45:57 -0700 Subject: [PATCH 2/8] on first run, go to home or entry --- interface/src/Application.cpp | 9 ++++++- libraries/networking/src/AddressManager.cpp | 30 +++++++++++++++++++++ libraries/networking/src/AddressManager.h | 4 +++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 50e09fb77c..ef5a7bef2f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2950,7 +2950,14 @@ void Application::init() { addressLookupString = arguments().value(urlIndex + 1); } - DependencyManager::get()->loadSettings(addressLookupString); + Setting::Handle firstRun { "firstRun", true }; + if (addressLookupString.isEmpty() && firstRun.get()) { + qDebug() << "First run and no URL passed... attempting to Go Home..."; + DependencyManager::get()->goHomeOrElsewhere(); + } else { + qDebug() << "Not first run... going to" << qPrintable(addressLookupString.isEmpty() ? QString("previous location") : addressLookupString); + DependencyManager::get()->loadSettings(addressLookupString); + } qCDebug(interfaceapp) << "Loaded settings"; diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 03b33eae38..f6f1416d2f 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -629,3 +629,33 @@ void AddressManager::addCurrentAddressToHistory(LookupTrigger trigger) { } } } + +void AddressManager::goHomeOrElsewhere(QString elsewhere, LookupTrigger trigger) { + QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); + QNetworkRequest sandboxStatus(QString("http://localhost:60332/status")); + sandboxStatus.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); + QNetworkReply* reply = networkAccessManager.get(sandboxStatus); + + connect(reply, &QNetworkReply::finished, this, [this, elsewhere, trigger]() { + QNetworkReply* sender = qobject_cast(QObject::sender()); + auto statusData = sender->readAll(); + auto statusJson = QJsonDocument::fromJson(statusData); + if (!statusJson.isEmpty()) { + auto statusObject = statusJson.object(); + auto serversValue = statusObject.value("servers"); + if (!serversValue.isUndefined() && serversValue.isObject()) { + auto serversObject = serversValue.toObject(); + auto serversCount = serversObject.size(); + const int MINIMUM_EXPECTED_SERVER_COUNT = 6; + if (serversCount >= MINIMUM_EXPECTED_SERVER_COUNT) { + qDebug() << "Home sandbox is running, going to " << SANDBOX_HIFI_ADDRESS; + handleUrl(SANDBOX_HIFI_ADDRESS, trigger); + return; + } + } + } + qDebug() << "Home sandbox was not running, going to " << elsewhere << "instead."; + handleUrl(elsewhere, trigger); + }); +} + diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index e0b54e4072..1b6b04a055 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -24,6 +24,7 @@ const QString HIFI_URL_SCHEME = "hifi"; const QString DEFAULT_HIFI_ADDRESS = "hifi://entry"; +const QString SANDBOX_HIFI_ADDRESS = "hifi://localhost"; const QString INDEX_PATH = "/"; const QString GET_PLACE = "/api/v1/places/%1"; @@ -65,6 +66,9 @@ public: const QStack& getBackStack() const { return _backStack; } const QStack& getForwardStack() const { return _forwardStack; } + void goHomeOrElsewhere(QString elsewhere = DEFAULT_HIFI_ADDRESS, + LookupTrigger trigger = LookupTrigger::StartupFromSettings); + public slots: void handleLookupString(const QString& lookupString); From 33c5cb519a094f82b37ee585d5a1bf8c70fd0ea0 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 11:32:29 -0700 Subject: [PATCH 3/8] cleanup firstRun with a common setting --- interface/src/Application.cpp | 7 ++++++- libraries/script-engine/src/ScriptEngines.cpp | 4 ++-- libraries/script-engine/src/ScriptEngines.h | 2 -- libraries/shared/src/SettingHandle.cpp | 1 + libraries/shared/src/SettingHandle.h | 2 ++ libraries/shared/src/SettingInterface.h | 1 + 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ef5a7bef2f..8a950fabd2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1091,6 +1091,11 @@ void Application::checkChangeCursor() { _cursorNeedsChanging = false; } + + + // After all of the constructor is completed, then set firstRun to false. + Setting::Handle firstRun{ Settings::firstRun, true }; + firstRun.set(false); } void Application::showCursor(const QCursor& cursor) { @@ -2950,7 +2955,7 @@ void Application::init() { addressLookupString = arguments().value(urlIndex + 1); } - Setting::Handle firstRun { "firstRun", true }; + 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(); diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index c6070e0598..370e310c8d 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -270,12 +270,12 @@ void ScriptEngines::loadOneScript(const QString& scriptFilename) { void ScriptEngines::loadScripts() { // check first run... - if (_firstRun.get()) { + Setting::Handle firstRun { Settings::firstRun, true }; + if (firstRun.get()) { qCDebug(scriptengine) << "This is a first run..."; // clear the scripts, and set out script to our default scripts clearScripts(); loadDefaultScripts(); - _firstRun.set(false); return; } diff --git a/libraries/script-engine/src/ScriptEngines.h b/libraries/script-engine/src/ScriptEngines.h index 0963b21600..6522aa9bb3 100644 --- a/libraries/script-engine/src/ScriptEngines.h +++ b/libraries/script-engine/src/ScriptEngines.h @@ -87,8 +87,6 @@ protected: void onScriptEngineError(const QString& scriptFilename); void launchScriptEngine(ScriptEngine* engine); - - Setting::Handle _firstRun { "firstRun", true }; QReadWriteLock _scriptEnginesHashLock; QHash _scriptEnginesHash; QSet _allKnownScriptEngines; diff --git a/libraries/shared/src/SettingHandle.cpp b/libraries/shared/src/SettingHandle.cpp index 951d004318..d2e84d8b75 100644 --- a/libraries/shared/src/SettingHandle.cpp +++ b/libraries/shared/src/SettingHandle.cpp @@ -13,6 +13,7 @@ #include +const QString Settings::firstRun { "firstRun" }; void Settings::getFloatValueIfValid(const QString& name, float& floatValue) { const QVariant badDefaultValue = NAN; diff --git a/libraries/shared/src/SettingHandle.h b/libraries/shared/src/SettingHandle.h index c803efaa71..bef2daf84c 100644 --- a/libraries/shared/src/SettingHandle.h +++ b/libraries/shared/src/SettingHandle.h @@ -26,6 +26,8 @@ // TODO: remove class Settings : public QSettings { public: + static const QString firstRun; + void getFloatValueIfValid(const QString& name, float& floatValue); void getBoolValue(const QString& name, bool& boolValue); diff --git a/libraries/shared/src/SettingInterface.h b/libraries/shared/src/SettingInterface.h index 3aad048dbe..2b814ca85e 100644 --- a/libraries/shared/src/SettingInterface.h +++ b/libraries/shared/src/SettingInterface.h @@ -16,6 +16,7 @@ #include namespace Setting { + void preInit(); void init(); void cleanupSettings(); From df34b49b41e309c08eeb0a2170b2f92fe045b925 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 11:34:11 -0700 Subject: [PATCH 4/8] fix white space --- libraries/shared/src/SettingInterface.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/shared/src/SettingInterface.h b/libraries/shared/src/SettingInterface.h index 2b814ca85e..3aad048dbe 100644 --- a/libraries/shared/src/SettingInterface.h +++ b/libraries/shared/src/SettingInterface.h @@ -16,7 +16,6 @@ #include namespace Setting { - void preInit(); void init(); void cleanupSettings(); From 7958020f4ec764c2d283224619ac9f5b785e9754 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 12:07:21 -0700 Subject: [PATCH 5/8] only expect the 5 essential servers --- libraries/networking/src/AddressManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index f6f1416d2f..4b8017455c 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -646,7 +646,7 @@ void AddressManager::goHomeOrElsewhere(QString elsewhere, LookupTrigger trigger) if (!serversValue.isUndefined() && serversValue.isObject()) { auto serversObject = serversValue.toObject(); auto serversCount = serversObject.size(); - const int MINIMUM_EXPECTED_SERVER_COUNT = 6; + 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); From 0eb2388f69f2fed02d96d38af338a45fd33d7a28 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 15:00:50 -0700 Subject: [PATCH 6/8] fix unix build buster --- libraries/networking/src/AddressManager.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 4b8017455c..c27081ec28 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -636,9 +636,8 @@ void AddressManager::goHomeOrElsewhere(QString elsewhere, LookupTrigger trigger) sandboxStatus.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(sandboxStatus); - connect(reply, &QNetworkReply::finished, this, [this, elsewhere, trigger]() { - QNetworkReply* sender = qobject_cast(QObject::sender()); - auto statusData = sender->readAll(); + connect(reply, &QNetworkReply::finished, this, [this, elsewhere, reply, trigger]() { + auto statusData = reply->readAll(); auto statusJson = QJsonDocument::fromJson(statusData); if (!statusJson.isEmpty()) { auto statusObject = statusJson.object(); From a17acc6f6b98a4c7ddd0008180fc4d5e6c3814e5 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 15:52:07 -0700 Subject: [PATCH 7/8] rename functions --- interface/src/Application.cpp | 11 +++++++++-- libraries/networking/src/AddressManager.cpp | 14 +++++++------- libraries/networking/src/AddressManager.h | 9 +++++++-- 3 files changed, 23 insertions(+), 11 deletions(-) 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); From 62b3c12d0f418b3fe757b9795bb35a4fdefc3d5b Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 10 May 2016 15:53:10 -0700 Subject: [PATCH 8/8] fix comment --- libraries/networking/src/AddressManager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index d746442376..c0ba69018c 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -67,8 +67,8 @@ public: const QStack& getBackStack() const { return _backStack; } const QStack& getForwardStack() const { return _forwardStack; } - /// 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. + /// determines if the local sandbox is likely running. It does not account for custom setups, and is only + /// intended to detect the standard local sandbox install. void ifLocalSandboxRunningElse(std::function localSandboxRunningDoThis, std::function localSandboxNotRunningDoThat);