diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 2a809f2a7c..e71c80efc8 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -299,6 +300,8 @@ void AccountManager::processReply() { passErrorToCallback(requestReply); } delete requestReply; + + emit replyFinished(); } void AccountManager::passSuccessToCallback(QNetworkReply* requestReply) { @@ -339,6 +342,15 @@ void AccountManager::passErrorToCallback(QNetworkReply* requestReply) { } } +void AccountManager::waitForAllPendingReplies() { + while (_pendingCallbackMap.size() > 0) { + QEventLoop loop; + QObject::connect(this, &AccountManager::replyFinished, &loop, &QEventLoop::quit); + loop.exec(); + } +} + + void AccountManager::persistAccountToSettings() { if (_shouldPersistToSettingsFile) { // store this access token into the local settings diff --git a/libraries/networking/src/AccountManager.h b/libraries/networking/src/AccountManager.h index 2c9a441db1..22d070fbe6 100644 --- a/libraries/networking/src/AccountManager.h +++ b/libraries/networking/src/AccountManager.h @@ -72,6 +72,8 @@ public: void requestProfile(); DataServerAccountInfo& getAccountInfo() { return _accountInfo; } + + void waitForAllPendingReplies(); public slots: void requestAccessToken(const QString& login, const QString& password); @@ -93,6 +95,8 @@ signals: void loginFailed(); void logoutComplete(); void balanceChanged(qint64 newBalance); + void replyFinished(); + private slots: void processReply(); void handleKeypairGenerationError(); diff --git a/libraries/networking/src/UserActivityLogger.cpp b/libraries/networking/src/UserActivityLogger.cpp index f2646369c1..f74ea99c1e 100644 --- a/libraries/networking/src/UserActivityLogger.cpp +++ b/libraries/networking/src/UserActivityLogger.cpp @@ -61,7 +61,7 @@ void UserActivityLogger::logAction(QString action, QJsonObject details, JSONCall params.errorCallbackReceiver = this; params.errorCallbackMethod = "requestError"; } - + accountManager.authenticatedRequest(USER_ACTIVITY_URL, QNetworkAccessManager::PostOperation, params, @@ -89,6 +89,8 @@ void UserActivityLogger::launch(QString applicationVersion) { void UserActivityLogger::close() { const QString ACTION_NAME = "close"; logAction(ACTION_NAME, QJsonObject()); + + AccountManager::getInstance().waitForAllPendingReplies(); } void UserActivityLogger::changedDisplayName(QString displayName) {