diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index c3fd25e25a..943d9df465 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -125,7 +125,7 @@ void LoginDialog::login(const QString& username, const QString& password) const void LoginDialog::loginThroughOculus() { qDebug() << "Attempting to login through Oculus"; if (auto oculusDisplay = PluginManager::getInstance()->getOculusDisplayPlugin()) { - //oculusDisplay->requestTicket([this](QString nonce, QString userID) { + oculusDisplay->requestTicket([this](QString nonce, QString userID) { // if (nonce.isEmpty() || userID.isEmpty()) { // emit handleLoginFailed(); // return; diff --git a/libraries/plugins/src/plugins/Forward.h b/libraries/plugins/src/plugins/Forward.h index fc1e12b639..9eefe983c2 100644 --- a/libraries/plugins/src/plugins/Forward.h +++ b/libraries/plugins/src/plugins/Forward.h @@ -21,6 +21,7 @@ class DisplayPlugin; class InputPlugin; class CodecPlugin; class SteamClientPlugin; +class OculusDisplayPlugin; class OculusPlatformPlugin; class Plugin; class PluginContainer; @@ -36,5 +37,6 @@ using CodecPluginPointer = std::shared_ptr; using CodecPluginList = std::vector; using CodecPluginProvider = std::function; using SteamClientPluginPointer = std::shared_ptr; +using OculusDisplayPluginPointer = std::shared_ptr; using OculusPlatformPluginPointer = std::shared_ptr; using InputPluginSettingsPersister = std::function; diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index e2cb24a7da..7b7711663c 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -179,8 +179,8 @@ const SteamClientPluginPointer PluginManager::getSteamClientPlugin() { return steamClientPlugin; } -const DisplayPluginPointer PluginManager::getOculusDisplayPlugin() { - static DisplayPluginPointer oculusDisplayPlugin; +const OculusDisplayPluginPointer PluginManager::getOculusDisplayPlugin() { + static OculusDisplayPluginPointer oculusDisplayPlugin; static std::once_flag once; std::call_once(once, [&] { // Now grab the display plugins - might break in the main update loop if user unplugs the headset I think? diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index 20d6495400..8387aab81a 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -28,7 +28,7 @@ public: const InputPluginList& getInputPlugins(); const CodecPluginList& getCodecPlugins(); const SteamClientPluginPointer getSteamClientPlugin(); - const DisplayPluginPointer getOculusDisplayPlugin(); + const OculusDisplayPluginPointer getOculusDisplayPlugin(); DisplayPluginList getPreferredDisplayPlugins(); void setPreferredDisplayPlugins(const QStringList& displays); diff --git a/libraries/plugins/src/plugins/RuntimePlugin.h b/libraries/plugins/src/plugins/RuntimePlugin.h index 7c3eb7dc74..756b4ff585 100644 --- a/libraries/plugins/src/plugins/RuntimePlugin.h +++ b/libraries/plugins/src/plugins/RuntimePlugin.h @@ -53,7 +53,6 @@ public: class OculusPlatformProvider { public: - virtual ~OculusPlatformProvider() {} virtual OculusPlatformPluginPointer getOculusPlatformPlugin() = 0; }; diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp index 067f6dbb32..49c0148e74 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp @@ -31,7 +31,7 @@ bool OculusBaseDisplayPlugin::beginFrameRender(uint32_t frameIndex) { return false; } - if (ovr::quitRequested(status) || ovr::displayLost(status) || _isViewerEntitled) { + if (ovr::quitRequested(status) || ovr::displayLost(status) || !_isViewerEntitled) { QMetaObject::invokeMethod(qApp, "quit"); return false; } @@ -255,6 +255,7 @@ void OculusBaseDisplayPlugin::handleOVREvents() { _user = ovr_User_GetOculusID(user); } else { qCDebug(oculusLog) << "Oculus Platform user retrieval failed" << QString(ovr_Error_GetMessage(ovr_Message_GetError(message))); + _user = ""; } break; } @@ -269,16 +270,24 @@ void OculusBaseDisplayPlugin::handleOVREvents() { break; } case ovrMessage_User_GetUserProof: { + _nonceChanged = true; if (!ovr_Message_IsError(message)) { ovrUserProofHandle userProof = ovr_Message_GetUserProof(message); - QString nonce = ovr_UserProof_GetNonce(userProof); + _nonce = ovr_UserProof_GetNonce(userProof); } else { qCDebug(oculusLog) << "Oculus Platform nonce retrieval failed" << QString(ovr_Error_GetMessage(ovr_Message_GetError(message))); + _nonce = ""; } break; } } + if (_nonceChanged) { + emit nonceAndUserIDChanged(_nonce, _user); + _nonce = _user = ""; + _nonceChanged = false; + } + // free the message handle to cleanup and not leak ovr_FreeMessage(message); diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.h b/plugins/oculus/src/OculusBaseDisplayPlugin.h index 8802b1cff1..45baf54174 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.h +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.h @@ -35,9 +35,7 @@ public: QVector getSensorPositions() override; signals: - void userIDChanged(uint64_t userID); - void userChanged(QString user); - void nonceChanged(QString nonce); + void nonceAndUserIDChanged(QString nonce, QString userID); protected: void customizeContext() override; @@ -50,6 +48,7 @@ protected: protected: bool _isViewerEntitled; QString _nonce; + bool _nonceChanged; QString _user; ovrID _userID; ovrSession _session{ nullptr };