mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:49:05 +02:00
CR changes
This commit is contained in:
parent
282aa70db3
commit
1924dad51b
4 changed files with 56 additions and 86 deletions
|
@ -47,6 +47,9 @@ Q_DECLARE_METATYPE(JSONCallbackParameters)
|
||||||
|
|
||||||
const QString ACCOUNTS_GROUP = "accounts";
|
const QString ACCOUNTS_GROUP = "accounts";
|
||||||
|
|
||||||
|
const int POST_SETTINGS_INTERVAL = 10 * MSECS_PER_SECOND;
|
||||||
|
const int PULL_SETTINGS_RETRY_INTERVAL = 1 * MSECS_PER_SECOND;
|
||||||
|
|
||||||
JSONCallbackParameters::JSONCallbackParameters(QObject* callbackReceiver,
|
JSONCallbackParameters::JSONCallbackParameters(QObject* callbackReceiver,
|
||||||
const QString& jsonCallbackMethod,
|
const QString& jsonCallbackMethod,
|
||||||
const QString& errorCallbackMethod) :
|
const QString& errorCallbackMethod) :
|
||||||
|
@ -89,7 +92,6 @@ AccountManager::AccountManager(UserAgentGetter userAgentGetter) :
|
||||||
connect(this, &AccountManager::loginComplete, this, &AccountManager::uploadPublicKey);
|
connect(this, &AccountManager::loginComplete, this, &AccountManager::uploadPublicKey);
|
||||||
connect(this, &AccountManager::loginComplete, this, &AccountManager::requestAccountSettings);
|
connect(this, &AccountManager::loginComplete, this, &AccountManager::requestAccountSettings);
|
||||||
|
|
||||||
static int POST_SETTINGS_INTERVAL = 10 * MSECS_PER_SECOND;
|
|
||||||
_postSettingsTimer = new QTimer(this);
|
_postSettingsTimer = new QTimer(this);
|
||||||
_postSettingsTimer->setInterval(POST_SETTINGS_INTERVAL);
|
_postSettingsTimer->setInterval(POST_SETTINGS_INTERVAL);
|
||||||
connect(this, SIGNAL(loginComplete(QUrl)), _postSettingsTimer, SLOT(start()));
|
connect(this, SIGNAL(loginComplete(QUrl)), _postSettingsTimer, SLOT(start()));
|
||||||
|
@ -98,7 +100,6 @@ AccountManager::AccountManager(UserAgentGetter userAgentGetter) :
|
||||||
connect(qApp, &QCoreApplication::aboutToQuit, this, &AccountManager::postAccountSettings);
|
connect(qApp, &QCoreApplication::aboutToQuit, this, &AccountManager::postAccountSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash";
|
|
||||||
const QString ACCOUNT_MANAGER_REQUESTED_SCOPE = "owner";
|
const QString ACCOUNT_MANAGER_REQUESTED_SCOPE = "owner";
|
||||||
|
|
||||||
void AccountManager::logout() {
|
void AccountManager::logout() {
|
||||||
|
@ -114,6 +115,8 @@ void AccountManager::logout() {
|
||||||
emit logoutComplete();
|
emit logoutComplete();
|
||||||
// the username has changed to blank
|
// the username has changed to blank
|
||||||
emit usernameChanged(QString());
|
emit usernameChanged(QString());
|
||||||
|
|
||||||
|
_settings.loggedOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString accountFileDir() {
|
QString accountFileDir() {
|
||||||
|
@ -806,6 +809,8 @@ void AccountManager::requestAccountSettings() {
|
||||||
QNetworkReply* lockerReply = networkAccessManager.get(lockerRequest);
|
QNetworkReply* lockerReply = networkAccessManager.get(lockerRequest);
|
||||||
connect(lockerReply, &QNetworkReply::finished, this, &AccountManager::requestAccountSettingsFinished);
|
connect(lockerReply, &QNetworkReply::finished, this, &AccountManager::requestAccountSettingsFinished);
|
||||||
connect(lockerReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccountSettingsError(QNetworkReply::NetworkError)));
|
connect(lockerReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccountSettingsError(QNetworkReply::NetworkError)));
|
||||||
|
|
||||||
|
_settings.startedLoading();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::requestAccountSettingsFinished() {
|
void AccountManager::requestAccountSettingsFinished() {
|
||||||
|
@ -821,25 +826,27 @@ void AccountManager::requestAccountSettingsFinished() {
|
||||||
emit accountSettingsLoaded();
|
emit accountSettingsLoaded();
|
||||||
} else {
|
} else {
|
||||||
qCDebug(networking) << "Error in response for account settings: no data object";
|
qCDebug(networking) << "Error in response for account settings: no data object";
|
||||||
|
QTimer::singleShot(PULL_SETTINGS_RETRY_INTERVAL, this, &AccountManager::requestAccountSettings);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO: error handling
|
|
||||||
qCDebug(networking) << "Error in response for account settings" << lockerReply->errorString();
|
qCDebug(networking) << "Error in response for account settings" << lockerReply->errorString();
|
||||||
|
QTimer::singleShot(PULL_SETTINGS_RETRY_INTERVAL, this, &AccountManager::requestAccountSettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::requestAccountSettingsError(QNetworkReply::NetworkError error) {
|
void AccountManager::requestAccountSettingsError(QNetworkReply::NetworkError error) {
|
||||||
// TODO: error handling
|
|
||||||
qCWarning(networking) << "Account settings request encountered an error" << error;
|
qCWarning(networking) << "Account settings request encountered an error" << error;
|
||||||
|
QTimer::singleShot(PULL_SETTINGS_RETRY_INTERVAL, this, &AccountManager::requestAccountSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::postAccountSettings() {
|
void AccountManager::postAccountSettings() {
|
||||||
if (!_settings.somethingChanged()) {
|
if (_settings.lastChangeTimestamp() <= _lastSuccessfulSyncTimestamp && _lastSuccessfulSyncTimestamp != 0) {
|
||||||
// Nothing changed, skipping settings post
|
// Nothing changed, skipping settings post
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!isLoggedIn()) {
|
if (!isLoggedIn()) {
|
||||||
qCWarning(networking) << "Can't post account settings: Not logged in";
|
qCWarning(networking) << "Can't post account settings: Not logged in";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||||
|
@ -853,6 +860,7 @@ void AccountManager::postAccountSettings() {
|
||||||
lockerRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
lockerRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
lockerRequest.setRawHeader(ACCESS_TOKEN_AUTHORIZATION_HEADER, _accountInfo.getAccessToken().authorizationHeaderValue());
|
lockerRequest.setRawHeader(ACCESS_TOKEN_AUTHORIZATION_HEADER, _accountInfo.getAccessToken().authorizationHeaderValue());
|
||||||
|
|
||||||
|
_currentSyncTimestamp = _settings.lastChangeTimestamp();
|
||||||
QJsonObject dataObj;
|
QJsonObject dataObj;
|
||||||
dataObj.insert("locker", _settings.pack());
|
dataObj.insert("locker", _settings.pack());
|
||||||
|
|
||||||
|
@ -869,14 +877,14 @@ void AccountManager::postAccountSettingsFinished() {
|
||||||
QJsonDocument jsonResponse = QJsonDocument::fromJson(lockerReply->readAll());
|
QJsonDocument jsonResponse = QJsonDocument::fromJson(lockerReply->readAll());
|
||||||
const QJsonObject& rootObject = jsonResponse.object();
|
const QJsonObject& rootObject = jsonResponse.object();
|
||||||
|
|
||||||
if (!rootObject.contains("status") || rootObject["status"].toString() != "success") {
|
if (rootObject.contains("status") && rootObject["status"].toString() == "success") {
|
||||||
// TODO: error handling
|
_lastSuccessfulSyncTimestamp = _currentSyncTimestamp;
|
||||||
|
} else {
|
||||||
qCDebug(networking) << "Error in response for account settings post" << lockerReply->errorString();
|
qCDebug(networking) << "Error in response for account settings post" << lockerReply->errorString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::postAccountSettingsError(QNetworkReply::NetworkError error) {
|
void AccountManager::postAccountSettingsError(QNetworkReply::NetworkError error) {
|
||||||
// TODO: error handling
|
|
||||||
qCWarning(networking) << "Post encountered an error" << error;
|
qCWarning(networking) << "Post encountered an error" << error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,9 @@ private:
|
||||||
QString _configFileURL;
|
QString _configFileURL;
|
||||||
|
|
||||||
AccountSettings _settings;
|
AccountSettings _settings;
|
||||||
QTimer* _postSettingsTimer;
|
quint64 _currentSyncTimestamp { 0 };
|
||||||
|
quint64 _lastSuccessfulSyncTimestamp { 0 };
|
||||||
|
QTimer* _postSettingsTimer { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AccountManager_h
|
#endif // hifi_AccountManager_h
|
||||||
|
|
|
@ -15,25 +15,15 @@
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
||||||
#include "NetworkLogging.h"
|
#include "NetworkLogging.h"
|
||||||
|
#include "SharedUtil.h"
|
||||||
|
|
||||||
// Examples:
|
static QString HOME_LOCATION_KEY { "home_location" };
|
||||||
//static QString SOME_STRING_KEY { "some_string" };
|
|
||||||
//static QString SOME_INT_KEY { "some_int" };
|
|
||||||
//static QString SOME_BOOL_KEY { "some_bool" };
|
|
||||||
|
|
||||||
// Examples:
|
|
||||||
//QString AccountSettings::DEFAULT_SOME_STRING { "" };
|
|
||||||
//int AccountSettings::DEFAULT_SOME_INT { 17 };
|
|
||||||
//bool AccountSettings::DEFAULT_SOME_BOOL { true };
|
|
||||||
|
|
||||||
QJsonObject AccountSettings::pack() {
|
QJsonObject AccountSettings::pack() {
|
||||||
QJsonObject data;
|
QJsonObject data;
|
||||||
|
|
||||||
QReadLocker lock(&_settingsLock);
|
QReadLocker lock(&_settingsLock);
|
||||||
// Examples:
|
data.insert(HOME_LOCATION_KEY, _homeLocation);
|
||||||
// data.insert(SOME_STRING_KEY, _someString);
|
|
||||||
// data.insert(SOME_INT_KEY, _someInt);
|
|
||||||
// data.insert(SOME_BOOL_KEY, _someBool);
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -41,43 +31,25 @@ QJsonObject AccountSettings::pack() {
|
||||||
void AccountSettings::unpack(QJsonObject data) {
|
void AccountSettings::unpack(QJsonObject data) {
|
||||||
QWriteLocker lock(&_settingsLock);
|
QWriteLocker lock(&_settingsLock);
|
||||||
|
|
||||||
// Examples:
|
_lastChangeTimestamp = usecTimestampNow();
|
||||||
// auto it = data.find(SOME_STRING_KEY);
|
|
||||||
// _hasSomeString = it != data.end() && it->isString();
|
|
||||||
// _someString = _hasSomeString ? it->toString() : DEFAULT_SOME_STRING;
|
|
||||||
//
|
|
||||||
// it = data.find(SOME_INT_KEY);
|
|
||||||
// _hasSomeInt = it != data.end() && it->isDouble();
|
|
||||||
// _someInt = _hasSomeInt ? it->toInt() : DEFAULT_SOME_INT;
|
|
||||||
//
|
|
||||||
// it = data.find(SOME_BOOL_KEY);
|
|
||||||
// _hasSomeBool = it != data.end() && it->isBool();
|
|
||||||
// _someBool = _hasSomeBool ? it->toBool() : DEFAULT_SOME_BOOL;
|
|
||||||
|
|
||||||
_somethingChanged = false;
|
auto it = data.find(HOME_LOCATION_KEY);
|
||||||
|
_homeLocationState = it != data.end() && it->isString() ? Loaded : NotPresent;
|
||||||
|
_homeLocation = _homeLocationState == Loaded ? it->toString() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Examples:
|
void AccountSettings::setHomeLocation(QString homeLocation) {
|
||||||
//void AccountSettings::setSomeString(QString someString) {
|
QWriteLocker lock(&_settingsLock);
|
||||||
// QWriteLocker lock(&_settingsLock);
|
if (homeLocation != _homeLocation) {
|
||||||
// if (someString != _someString) {
|
_lastChangeTimestamp = usecTimestampNow();
|
||||||
// _somethingChanged = true;
|
}
|
||||||
// }
|
_homeLocation = homeLocation;
|
||||||
// _someString = someString;
|
}
|
||||||
//}
|
|
||||||
//
|
void AccountSettings::startedLoading() {
|
||||||
//void AccountSettings::setSomeInt(int someInt) {
|
_homeLocationState = Loading;
|
||||||
// QWriteLocker lock(&_settingsLock);
|
}
|
||||||
// if (someInt != _someInt) {
|
|
||||||
// _somethingChanged = true;
|
void AccountSettings::loggedOut() {
|
||||||
// }
|
_homeLocationState = LoggedOut;
|
||||||
// _someInt = someInt;
|
}
|
||||||
//}
|
|
||||||
//
|
|
||||||
//void AccountSettings::setSomeBool(bool someBool) {
|
|
||||||
// QWriteLocker lock(&_settingsLock);
|
|
||||||
// if (someBool != _someBool) {
|
|
||||||
// _somethingChanged = true;
|
|
||||||
// }
|
|
||||||
// _someBool = someBool;
|
|
||||||
//}
|
|
||||||
|
|
|
@ -18,42 +18,30 @@
|
||||||
|
|
||||||
class AccountSettings {
|
class AccountSettings {
|
||||||
public:
|
public:
|
||||||
// Examples:
|
enum State {
|
||||||
// static QString DEFAULT_SOME_STRING;
|
LoggedOut,
|
||||||
// static int DEFAULT_SOME_INT;
|
Loading,
|
||||||
// static bool DEFAULT_SOME_BOOL;
|
Loaded,
|
||||||
|
NotPresent
|
||||||
|
};
|
||||||
|
|
||||||
bool somethingChanged() const { return _somethingChanged; }
|
void loggedOut();
|
||||||
|
void startedLoading();
|
||||||
|
quint64 lastChangeTimestamp() const { return _lastChangeTimestamp; }
|
||||||
|
|
||||||
QJsonObject pack();
|
QJsonObject pack();
|
||||||
void unpack(QJsonObject data);
|
void unpack(QJsonObject data);
|
||||||
|
|
||||||
// Examples:
|
State homeLocationState() const { QReadLocker lock(&_settingsLock); return _homeLocationState; }
|
||||||
// bool hasSomeString() const { QReadLocker lock(&_settingsLock); return _hasSomeString; }
|
QString getHomeLocation() const { QReadLocker lock(&_settingsLock); return _homeLocation; }
|
||||||
// QString getSomeString() const { QReadLocker lock(&_settingsLock); return _someString; }
|
void setHomeLocation(QString homeLocation);
|
||||||
// void setSomeString(QString someString);
|
|
||||||
//
|
|
||||||
// bool hasSomeInt() const { QReadLocker lock(&_settingsLock); return _hasSomeInt; }
|
|
||||||
// int getSomeInt() const { QReadLocker lock(&_settingsLock); return _someInt; }
|
|
||||||
// void setSomeInt(int someInt);
|
|
||||||
//
|
|
||||||
// bool hasSomeBool() const { QReadLocker lock(&_settingsLock); return _hasSomeBool; }
|
|
||||||
// bool getSomeBool() const { QReadLocker lock(&_settingsLock); return _someBool; }
|
|
||||||
// void setSomeBool(bool someBool);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable QReadWriteLock _settingsLock;
|
mutable QReadWriteLock _settingsLock;
|
||||||
bool _somethingChanged { false };
|
quint64 _lastChangeTimestamp { 0 };
|
||||||
|
|
||||||
// Examples:
|
State _homeLocationState { LoggedOut };
|
||||||
// bool _hasSomeString { false };
|
QString _homeLocation;
|
||||||
// bool _hasSomeInt { false };
|
|
||||||
// bool _hasSomeBool { false };
|
|
||||||
|
|
||||||
// Examples:
|
|
||||||
// QString _someString { DEFAULT_SOME_STRING };
|
|
||||||
// int _someInt { DEFAULT_SOME_INT };
|
|
||||||
// bool _someBool { DEFAULT_SOME_BOOL };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* hifi_AccountSettings_h */
|
#endif /* hifi_AccountSettings_h */
|
||||||
|
|
Loading…
Reference in a new issue