From a767540b76f59b9fd5dc76de68a953f07fcd094f Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Thu, 3 May 2018 17:53:18 -0300 Subject: [PATCH] Fix connection issue syncing two AccountManagers --- interface/src/AndroidHelper.cpp | 16 ++++++++++++++-- libraries/networking/src/AccountManager.cpp | 14 ++++++++++++++ libraries/networking/src/AccountManager.h | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/interface/src/AndroidHelper.cpp b/interface/src/AndroidHelper.cpp index 7e2661e8e4..0d15d2b1b9 100644 --- a/interface/src/AndroidHelper.cpp +++ b/interface/src/AndroidHelper.cpp @@ -22,9 +22,21 @@ AndroidHelper::~AndroidHelper() { } void AndroidHelper::init() { - qDebug() << "[LOGIN] AndroidHelper::init"; workerThread.start(); - _accountManager = DependencyManager::get(); + _accountManager = QSharedPointer(new AccountManager, &QObject::deleteLater); + _accountManager->setIsAgent(true); + _accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL()); + _accountManager->setSessionID(DependencyManager::get()->getSessionID()); + + connect(_accountManager.data(), &AccountManager::loginComplete, [](const QUrl& authURL) { + DependencyManager::get()->setAccountInfo(AndroidHelper::instance().getAccountManager()->getAccountInfo()); + DependencyManager::get()->setAuthURL(authURL); + }); + + connect(_accountManager.data(), &AccountManager::logoutComplete, [] () { + DependencyManager::get()->logout(); + }); + _accountManager->moveToThread(&workerThread); } diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 049129b2ba..e70e3e26d0 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -453,6 +453,20 @@ void AccountManager::removeAccountFromFile() { << "from settings file."; } +void AccountManager::setAccountInfo(const DataServerAccountInfo &newAccountInfo) { + _accountInfo = newAccountInfo; + _pendingPrivateKey.clear(); + if (_isAgent && !_accountInfo.getAccessToken().token.isEmpty() && !_accountInfo.hasProfile()) { + // we are missing profile information, request it now + requestProfile(); + } + + // prepare to refresh our token if it is about to expire + if (needsToRefreshToken()) { + refreshAccessToken(); + } +} + bool AccountManager::hasValidAccessToken() { if (_accountInfo.getAccessToken().token.isEmpty() || _accountInfo.getAccessToken().isExpired()) { diff --git a/libraries/networking/src/AccountManager.h b/libraries/networking/src/AccountManager.h index 87b17d00d5..88ebaf5656 100644 --- a/libraries/networking/src/AccountManager.h +++ b/libraries/networking/src/AccountManager.h @@ -88,6 +88,7 @@ public: void requestProfile(); DataServerAccountInfo& getAccountInfo() { return _accountInfo; } + void setAccountInfo(const DataServerAccountInfo &newAccountInfo); static QJsonObject dataObjectFromResponse(QNetworkReply& requestReply);