mirror of
https://github.com/overte-org/overte.git
synced 2025-04-07 23:53:54 +02:00
staging
This commit is contained in:
parent
ebb9cd7de6
commit
1af57bdba6
7 changed files with 123 additions and 26 deletions
|
@ -110,13 +110,6 @@ bool LoginDialog::isOculusRunning() const {
|
|||
return oculusPlatform && oculusPlatform->isRunning();
|
||||
}
|
||||
|
||||
QString LoginDialog::getLoggedInUserID() const {
|
||||
auto oculusPlatform = PluginManager::getInstance()->getOculusPlatformPlugin();
|
||||
auto userID = oculusPlatform->getLoggedInUserID();
|
||||
qDebug() << "userID: " << userID;
|
||||
return userID;
|
||||
}
|
||||
|
||||
void LoginDialog::dismissLoginDialog() {
|
||||
QAction* loginAction = Menu::getInstance()->getActionForOption(MenuOption::Login);
|
||||
Q_CHECK_PTR(loginAction);
|
||||
|
@ -132,7 +125,38 @@ void LoginDialog::login(const QString& username, const QString& password) const
|
|||
|
||||
void LoginDialog::loginThroughOculus() {
|
||||
qDebug() << "Attempting to login through Oculus";
|
||||
if (auto oculusPlatform = PluginManager::getInstance()->getOculusPlatformPlugin()) {
|
||||
oculusPlatform->requestTicket([this](Ticket ticket) {
|
||||
if (ticket.isNull()) {
|
||||
emit handleLoginFailed();
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void LoginDialog::linkOculus() {
|
||||
qDebug() << "Attempting to link Oculus account";
|
||||
if (auto oculusPlatform = PluginManager::getInstance()->getOculusPlatformPlugin()) {
|
||||
oculusPlatform->requestTicket([this](Ticket ticket) {
|
||||
if (ticket.isNull()) {
|
||||
emit handleLoginFailed();
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void LoginDialog::createAccountFromOculus(QString username) {
|
||||
qDebug() << "Attempting to create account from Oculus info";
|
||||
if (auto oculusPlatform = PluginManager::getInstance()->getOculusPlatformPlugin()) {
|
||||
oculusPlatform->requestTicket([this](Ticket ticket) {
|
||||
if (ticket.isNull()) {
|
||||
emit handleLoginFailed();
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void LoginDialog::loginThroughSteam() {
|
||||
|
|
|
@ -68,15 +68,14 @@ protected slots:
|
|||
|
||||
Q_INVOKABLE bool isSteamRunning() const;
|
||||
Q_INVOKABLE bool isOculusRunning() const;
|
||||
Q_INVOKABLE QString getLoggedInUserID() const;
|
||||
|
||||
Q_INVOKABLE void login(const QString& username, const QString& password) const;
|
||||
Q_INVOKABLE void loginThroughSteam();
|
||||
Q_INVOKABLE void linkSteam();
|
||||
Q_INVOKABLE void createAccountFromSteam(QString username = QString());
|
||||
Q_INVOKABLE void loginThroughOculus();
|
||||
//Q_INVOKABLE void linkOculus();
|
||||
//Q_INVOKABLE void createAccountFromOculus(QString username = QString());
|
||||
Q_INVOKABLE void linkOculus();
|
||||
Q_INVOKABLE void createAccountFromOculus(QString username = QString());
|
||||
|
||||
Q_INVOKABLE void signup(const QString& email, const QString& username, const QString& password);
|
||||
|
||||
|
|
|
@ -586,6 +586,29 @@ void AccountManager::requestAccessTokenWithSteam(QByteArray authSessionTicket) {
|
|||
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccessTokenError(QNetworkReply::NetworkError)));
|
||||
}
|
||||
|
||||
void AccountManager::requestAccessTokenWithOculus(QByteArray authSessionTicket) {
|
||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
|
||||
QNetworkRequest request;
|
||||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=password&");
|
||||
postData.append("oculus_nonce=" + QUrl::toPercentEncoding(authSessionTicket) + "&");
|
||||
postData.append("oculus_user_id=" + QUrl::toPercentEncoding(authSessionTicket) + "&");
|
||||
postData.append("scope=" + ACCOUNT_MANAGER_REQUESTED_SCOPE);
|
||||
|
||||
request.setUrl(grantURL);
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
||||
|
||||
QNetworkReply* requestReply = networkAccessManager.post(request, postData);
|
||||
connect(requestReply, &QNetworkReply::finished, this, &AccountManager::requestAccessTokenFinished);
|
||||
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccessTokenError(QNetworkReply::NetworkError)));
|
||||
}
|
||||
|
||||
void AccountManager::refreshAccessToken() {
|
||||
|
||||
// we can't refresh our access token if we don't have a refresh token, so check for that first
|
||||
|
|
|
@ -104,6 +104,7 @@ public:
|
|||
public slots:
|
||||
void requestAccessToken(const QString& login, const QString& password);
|
||||
void requestAccessTokenWithSteam(QByteArray authSessionTicket);
|
||||
void requestAccessTokenWithOculus(QByteArray authSessionTicket);
|
||||
void requestAccessTokenWithAuthCode(const QString& authCode, const QString& clientId, const QString& clientSecret, const QString& redirectUri);
|
||||
void refreshAccessToken();
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ public:
|
|||
|
||||
virtual void requestTicket(TicketRequestCallback callback) = 0;
|
||||
|
||||
virtual QString getUserProof() = 0;
|
||||
|
||||
virtual QString getLoggedInUserID() = 0;
|
||||
|
||||
virtual QString getOculusVRBuildID() = 0;
|
||||
|
|
|
@ -21,10 +21,16 @@
|
|||
#include "OculusHelpers.h"
|
||||
|
||||
static const Ticket INVALID_TICKET = Ticket();
|
||||
//static std::atomic_bool initialized { false };
|
||||
static std::atomic_bool initialized { false };
|
||||
static ovrSession session { nullptr };
|
||||
|
||||
class OculusCallbackManager {
|
||||
public:
|
||||
OculusCallbackManager();
|
||||
};
|
||||
|
||||
static OculusCallbackManager oculusCallbackManager;
|
||||
|
||||
bool OculusAPIPlugin::init() {
|
||||
if (session) {
|
||||
return initialized;
|
||||
|
@ -39,7 +45,6 @@ bool OculusAPIPlugin::init() {
|
|||
}
|
||||
|
||||
#ifdef OCULUS_APP_ID
|
||||
|
||||
if (qApp->property(hifi::properties::OCULUS_STORE).toBool()) {
|
||||
auto result = ovr_PlatformInitializeWindows(OCULUS_APP_ID);
|
||||
if (result != ovrPlatformInitialize_Success && result != ovrPlatformInitialize_PreLoaded) {
|
||||
|
@ -57,16 +62,6 @@ bool OculusAPIPlugin::init() {
|
|||
}
|
||||
#endif
|
||||
|
||||
//ovrGraphicsLuid luid;
|
||||
//if (!OVR_SUCCESS(ovr_Create(&session, &luid))) {
|
||||
// qCWarning(oculusLog) << "Failed to acquire Oculus session" << hifi::ovr::getError();
|
||||
// return initialized;
|
||||
//} else {
|
||||
// ovrResult setFloorLevelOrigin = ovr_SetTrackingOriginType(session, ovrTrackingOrigin::ovrTrackingOrigin_FloorLevel);
|
||||
// if (!OVR_SUCCESS(setFloorLevelOrigin)) {
|
||||
// qCWarning(oculusLog) << "Failed to set the Oculus tracking origin to floor level" << hifi::ovr::getError();
|
||||
// }
|
||||
//}
|
||||
initialized = true;
|
||||
return initialized;
|
||||
}
|
||||
|
@ -78,22 +73,74 @@ void OculusAPIPlugin::runCallbacks() {
|
|||
}
|
||||
|
||||
void OculusAPIPlugin::requestTicket(TicketRequestCallback callback) {
|
||||
if (!initialized) {
|
||||
if (!ovr_IsPlatformInitialized()) {
|
||||
init();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Oculus is not running";
|
||||
callback(INVALID_TICKET);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!initialized) {
|
||||
qDebug() << "Oculus not initialized";
|
||||
return;
|
||||
}
|
||||
|
||||
auto userProof = requestUserProof();
|
||||
if (userProof == "") {
|
||||
qWarning() << "User proof unavailable.";
|
||||
callback(INVALID_TICKET);
|
||||
return;
|
||||
} else {
|
||||
oculusCallbackManager;
|
||||
}
|
||||
}
|
||||
|
||||
bool OculusAPIPlugin::isRunning() {
|
||||
return initialized;
|
||||
}
|
||||
|
||||
QString OculusAPIPlugin::requestUserProof() {
|
||||
if (initialized) {
|
||||
QTimer timer;
|
||||
timer.start(1000);
|
||||
auto request = ovr_User_GetUserProof();
|
||||
ovrMessageHandle message { nullptr };
|
||||
while (message = ovr_PopMessage()) {
|
||||
if (message == nullptr) {
|
||||
break;
|
||||
} else if (!timer.isActive()) {
|
||||
qCDebug(oculusLog) << "login user id timeout after 1 second";
|
||||
return "";
|
||||
} else if (ovr_Message_GetType(message) == ovrMessage_User_GetUserProof) {
|
||||
if (!ovr_Message_IsError(message)) {
|
||||
ovrUserProofHandle userProof = ovr_Message_GetUserProof(message);
|
||||
QString nonce = ovr_UserProof_GetNonce(userProof);
|
||||
qCDebug(oculusLog) << "User nonce: " << nonce;
|
||||
return nonce;
|
||||
} else {
|
||||
qDebug() << "Error getting user proof: " << QString(ovr_Error_GetMessage(ovr_Message_GetError(message)));
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
QString OculusAPIPlugin::getLoggedInUserID() {
|
||||
if (initialized) {
|
||||
QTimer timer;
|
||||
timer.start(1000);
|
||||
auto request = ovr_User_GetLoggedInUser();
|
||||
ovrMessageHandle message { nullptr };
|
||||
using namespace std::chrono_literals;
|
||||
std::this_thread::sleep_for(100ms);
|
||||
while ((message = ovr_PopMessage()) != nullptr) {
|
||||
if (!timer.isActive()) {
|
||||
while (message = ovr_PopMessage()) {
|
||||
if (message == nullptr) {
|
||||
break;
|
||||
} else if (!timer.isActive()) {
|
||||
qCDebug(oculusLog) << "login user id timeout after 1 second";
|
||||
return "";
|
||||
} else if (ovr_Message_GetType(message) == ovrMessage_User_GetLoggedInUser) {
|
||||
|
|
|
@ -20,6 +20,7 @@ public:
|
|||
|
||||
void requestTicket(TicketRequestCallback callback) override;
|
||||
|
||||
QString requestUserProof() override;
|
||||
QString getLoggedInUserID() override;
|
||||
|
||||
QString getOculusVRBuildID() override;
|
||||
|
|
Loading…
Reference in a new issue