From ed39b43d3bf560c2b0bab3c1e477e99e4d5e1fa3 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Wed, 9 Jan 2019 22:50:22 -0800 Subject: [PATCH] changing request to have a callback function passed --- interface/src/ui/LoginDialog.cpp | 110 ++++++++---------- interface/src/ui/LoginDialog.h | 4 - .../src/plugins/OculusPlatformPlugin.h | 13 +-- plugins/oculus/src/OculusPlatformPlugin.cpp | 16 +-- plugins/oculus/src/OculusPlatformPlugin.h | 4 +- 5 files changed, 56 insertions(+), 91 deletions(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index bf57f421a9..3e58e7699c 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -130,9 +130,8 @@ void LoginDialog::login(const QString& username, const QString& password) const void LoginDialog::loginThroughOculus() { qDebug() << "Attempting to login through Oculus"; if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { - oculusPlatformPlugin->requestNonceAndUserID(LoginState::LOGIN); - connect(oculusPlatformPlugin.get(), &OculusPlatformPlugin::loginReady, this, [&] (QString nonce, QString userID) { - onLoginThroughOculusReady(nonce, userID); + oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString userID) { + DependencyManager::get()->requestAccessTokenWithOculus(nonce, userID); }); } } @@ -140,17 +139,58 @@ void LoginDialog::loginThroughOculus() { void LoginDialog::linkOculus() { qDebug() << "Attempting to link Oculus account"; if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { - oculusPlatformPlugin->requestNonceAndUserID(LoginState::LINK_ACCOUNT); + oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString userID) { + if (nonce.isEmpty() || userID.isEmpty()) { + emit handleLoginFailed(); + return; + } + + JSONCallbackParameters callbackParams; + callbackParams.callbackReceiver = this; + callbackParams.jsonCallbackMethod = "linkCompleted"; + callbackParams.errorCallbackMethod = "linkFailed"; + const QString LINK_OCULUS_PATH = "api/v1/user/oculus/link"; + + QJsonObject payload; + payload.insert("oculus_nonce", QJsonValue::fromVariant(QVariant(nonce))); + payload.insert("oculus_user_id", QJsonValue::fromVariant(QVariant(userID))); + + auto accountManager = DependencyManager::get(); + accountManager->sendRequest(LINK_OCULUS_PATH, AccountManagerAuth::Required, + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); + }); } } void LoginDialog::createAccountFromOculus(QString username) { qDebug() << "Attempting to create account from Oculus info"; if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { - oculusPlatformPlugin->requestNonceAndUserID(LoginState::CREATE_ACCOUNT); - connect(oculusPlatformPlugin.get(), &OculusPlatformPlugin::createAccountReady, this, [&] (QString nonce, QString userID) { - onCreateAccountThroughOculusReady(nonce, userID, username); - }); + oculusPlatformPlugin->requestNonceAndUserID([this, username] (QString nonce, QString userID) { + if (nonce.isEmpty() || userID.isEmpty()) { + emit handleLoginFailed(); + return; + } + + JSONCallbackParameters callbackParams; + callbackParams.callbackReceiver = this; + callbackParams.jsonCallbackMethod = "createCompleted"; + callbackParams.errorCallbackMethod = "createFailed"; + + const QString CREATE_ACCOUNT_FROM_OCULUS_PATH = "api/v1/user/oculus/create"; + + QJsonObject payload; + payload.insert("oculus_nonce", QJsonValue::fromVariant(QVariant(nonce))); + payload.insert("oculus_user_id", QJsonValue::fromVariant(QVariant(userID))); + if (!username.isEmpty()) { + payload.insert("username", QJsonValue::fromVariant(QVariant(username))); + } + + auto accountManager = DependencyManager::get(); + accountManager->sendRequest(CREATE_ACCOUNT_FROM_OCULUS_PATH, AccountManagerAuth::None, + QNetworkAccessManager::PostOperation, callbackParams, + QJsonDocument(payload).toJson()); + }); } } @@ -276,60 +316,6 @@ bool LoginDialog::getLoginDialogPoppedUp() const { return qApp->getLoginDialogPoppedUp(); } -void LoginDialog::onLoginThroughOculusReady(QString nonce, QString userID) { - DependencyManager::get()->requestAccessTokenWithOculus(nonce, userID); -} - -void LoginDialog::onLinkOculusReady(QString nonce, QString userID) { - if (nonce.isEmpty() || userID.isEmpty()) { - emit handleLoginFailed(); - return; - } - - JSONCallbackParameters callbackParams; - callbackParams.callbackReceiver = this; - callbackParams.jsonCallbackMethod = "linkCompleted"; - callbackParams.errorCallbackMethod = "linkFailed"; - const QString LINK_OCULUS_PATH = "api/v1/user/oculus/link"; - - QJsonObject payload; - payload.insert("oculus_nonce", QJsonValue::fromVariant(QVariant(nonce))); - payload.insert("oculus_user_id", QJsonValue::fromVariant(QVariant(userID))); - - auto accountManager = DependencyManager::get(); - accountManager->sendRequest(LINK_OCULUS_PATH, AccountManagerAuth::Required, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); - -} - -void LoginDialog::onCreateAccountThroughOculusReady(QString nonce, QString userID, QString username) { - if (nonce.isEmpty() || userID.isEmpty()) { - emit handleLoginFailed(); - return; - } - - JSONCallbackParameters callbackParams; - callbackParams.callbackReceiver = this; - callbackParams.jsonCallbackMethod = "createCompleted"; - callbackParams.errorCallbackMethod = "createFailed"; - - const QString CREATE_ACCOUNT_FROM_OCULUS_PATH = "api/v1/user/oculus/create"; - - QJsonObject payload; - payload.insert("oculus_nonce", QJsonValue::fromVariant(QVariant(nonce))); - payload.insert("oculus_user_id", QJsonValue::fromVariant(QVariant(userID))); - if (!username.isEmpty()) { - payload.insert("username", QJsonValue::fromVariant(QVariant(username))); - } - - auto accountManager = DependencyManager::get(); - accountManager->sendRequest(CREATE_ACCOUNT_FROM_OCULUS_PATH, AccountManagerAuth::None, - QNetworkAccessManager::PostOperation, callbackParams, - QJsonDocument(payload).toJson()); - -} - QString errorStringFromAPIObject(const QJsonValue& apiObject) { if (apiObject.isArray()) { return apiObject.toArray()[0].toString(); diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index 5bdcf3fb8d..981d7cdd27 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -83,10 +83,6 @@ protected slots: Q_INVOKABLE bool getLoginDialogPoppedUp() const; - void onLoginThroughOculusReady(QString nonce, QString userID); - void onLinkOculusReady(QString nonce, QString userID); - void onCreateAccountThroughOculusReady(QString nonce, QString userID, QString username); - private: bool getIsLogIn() const { return _isLogIn; } void setIsLogIn(const bool isLogIn) { _isLogIn = isLogIn; } diff --git a/libraries/plugins/src/plugins/OculusPlatformPlugin.h b/libraries/plugins/src/plugins/OculusPlatformPlugin.h index 70097b12c1..49d6b73181 100644 --- a/libraries/plugins/src/plugins/OculusPlatformPlugin.h +++ b/libraries/plugins/src/plugins/OculusPlatformPlugin.h @@ -7,27 +7,20 @@ // #pragma once -#include #include #include -enum LoginState { - INVALID_STATE = 0, - LOGIN, - LINK_ACCOUNT, - CREATE_ACCOUNT -}; +using NonceUserIDCallback = std::function; -class OculusPlatformPlugin : public QObject { - Q_OBJECT +class OculusPlatformPlugin { public: OculusPlatformPlugin(); virtual ~OculusPlatformPlugin(); virtual const QString getName() const = 0; - virtual void requestNonceAndUserID(LoginState state = LoginState::INVALID_STATE) = 0; + virtual void requestNonceAndUserID(NonceUserIDCallback callback) = 0; virtual void handleOVREvents() = 0; diff --git a/plugins/oculus/src/OculusPlatformPlugin.cpp b/plugins/oculus/src/OculusPlatformPlugin.cpp index ef8cfd660d..f0dc4adb9d 100644 --- a/plugins/oculus/src/OculusPlatformPlugin.cpp +++ b/plugins/oculus/src/OculusPlatformPlugin.cpp @@ -24,8 +24,8 @@ OculusAPIPlugin::~OculusAPIPlugin() { hifi::ovr::releaseRenderSession(_session); } -void OculusAPIPlugin::requestNonceAndUserID(LoginState loginState) { - _loginState = loginState; +void OculusAPIPlugin::requestNonceAndUserID(NonceUserIDCallback callback) { + _nonceUserIDCallback = callback; ovr_User_GetUserProof(); ovr_User_GetLoggedInUser(); } @@ -91,17 +91,7 @@ void OculusAPIPlugin::handleOVREvents() { } if (_nonceChanged) { - switch (_loginState) { - case LoginState::LOGIN: - emit loginReady(_nonce, _user); - break; - case LoginState::LINK_ACCOUNT: - emit linkAccountReady(_nonce, _user); - break; - case LoginState::CREATE_ACCOUNT: - emit createAccountReady(_nonce, _user); - break; - } + _nonceUserIDCallback(_nonce, _user);` _loginState = LoginState::INVALID_STATE; _nonce = _user = ""; _nonceChanged = false; diff --git a/plugins/oculus/src/OculusPlatformPlugin.h b/plugins/oculus/src/OculusPlatformPlugin.h index ce43b399a1..d43776b1d1 100644 --- a/plugins/oculus/src/OculusPlatformPlugin.h +++ b/plugins/oculus/src/OculusPlatformPlugin.h @@ -20,13 +20,13 @@ public: virtual ~OculusAPIPlugin(); const QString getName() const { return NAME; } - virtual void requestNonceAndUserID(LoginState loginState); + virtual void requestNonceAndUserID(NonceUserIDCallback callback); virtual void handleOVREvents(); private: static const char* NAME; - LoginState _loginState{ LoginState::INVALID_STATE }; + NonceUserIDCallback _nonceUserIDCallback; QString _nonce; bool _nonceChanged{ false }; QString _user;