mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 21:56:14 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi
This commit is contained in:
commit
e33cdedeef
6 changed files with 88 additions and 8 deletions
|
@ -218,6 +218,8 @@ bool DomainServer::optionallySetupAssignmentPayment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qDebug() << "Assignments will be paid for via" << qPrintable(_oauthProviderURL.toString());
|
||||||
|
|
||||||
// assume that the fact we are authing against HF data server means we will pay for assignments
|
// assume that the fact we are authing against HF data server means we will pay for assignments
|
||||||
// setup a timer to send transactions to pay assigned nodes every 30 seconds
|
// setup a timer to send transactions to pay assigned nodes every 30 seconds
|
||||||
QTimer* creditSetupTimer = new QTimer(this);
|
QTimer* creditSetupTimer = new QTimer(this);
|
||||||
|
@ -731,10 +733,11 @@ void DomainServer::setupPendingAssignmentCredits() {
|
||||||
qint64 elapsedMsecsSinceLastPayment = nodeData->getPaymentIntervalTimer().elapsed();
|
qint64 elapsedMsecsSinceLastPayment = nodeData->getPaymentIntervalTimer().elapsed();
|
||||||
nodeData->getPaymentIntervalTimer().restart();
|
nodeData->getPaymentIntervalTimer().restart();
|
||||||
|
|
||||||
const float CREDITS_PER_HOUR = 3;
|
const float CREDITS_PER_HOUR = 0.10f;
|
||||||
const float CREDITS_PER_MSEC = CREDITS_PER_HOUR / (60 * 60 * 1000);
|
const float CREDITS_PER_MSEC = CREDITS_PER_HOUR / (60 * 60 * 1000);
|
||||||
|
const int SATOSHIS_PER_MSEC = CREDITS_PER_MSEC * powf(10.0f, 8.0f);
|
||||||
|
|
||||||
float pendingCredits = elapsedMsecsSinceLastPayment * CREDITS_PER_MSEC;
|
float pendingCredits = elapsedMsecsSinceLastPayment * SATOSHIS_PER_MSEC;
|
||||||
|
|
||||||
if (existingTransaction) {
|
if (existingTransaction) {
|
||||||
existingTransaction->incrementAmount(pendingCredits);
|
existingTransaction->incrementAmount(pendingCredits);
|
||||||
|
|
|
@ -237,12 +237,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
connect(&nodeList->getDomainHandler(), SIGNAL(connectedToDomain(const QString&)), SLOT(connectedToDomain(const QString&)));
|
connect(&nodeList->getDomainHandler(), SIGNAL(connectedToDomain(const QString&)), SLOT(connectedToDomain(const QString&)));
|
||||||
|
|
||||||
// update our location every 5 seconds in the data-server, assuming that we are authenticated with one
|
// update our location every 5 seconds in the data-server, assuming that we are authenticated with one
|
||||||
const float DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5.0f * 1000.0f;
|
const qint64 DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5 * 1000;
|
||||||
|
|
||||||
QTimer* locationUpdateTimer = new QTimer(this);
|
QTimer* locationUpdateTimer = new QTimer(this);
|
||||||
connect(locationUpdateTimer, &QTimer::timeout, this, &Application::updateLocationInServer);
|
connect(locationUpdateTimer, &QTimer::timeout, this, &Application::updateLocationInServer);
|
||||||
locationUpdateTimer->start(DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS);
|
locationUpdateTimer->start(DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS);
|
||||||
|
|
||||||
connect(nodeList, &NodeList::nodeAdded, this, &Application::nodeAdded);
|
connect(nodeList, &NodeList::nodeAdded, this, &Application::nodeAdded);
|
||||||
connect(nodeList, &NodeList::nodeKilled, this, &Application::nodeKilled);
|
connect(nodeList, &NodeList::nodeKilled, this, &Application::nodeKilled);
|
||||||
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer)));
|
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer)));
|
||||||
|
@ -251,9 +251,18 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
connect(nodeList, &NodeList::uuidChanged, this, &Application::updateWindowTitle);
|
connect(nodeList, &NodeList::uuidChanged, this, &Application::updateWindowTitle);
|
||||||
connect(nodeList, SIGNAL(uuidChanged(const QUuid&)), _myAvatar, SLOT(setSessionUUID(const QUuid&)));
|
connect(nodeList, SIGNAL(uuidChanged(const QUuid&)), _myAvatar, SLOT(setSessionUUID(const QUuid&)));
|
||||||
connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset);
|
connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset);
|
||||||
|
|
||||||
// connect to appropriate slots on AccountManager
|
// connect to appropriate slots on AccountManager
|
||||||
AccountManager& accountManager = AccountManager::getInstance();
|
AccountManager& accountManager = AccountManager::getInstance();
|
||||||
|
|
||||||
|
const qint64 BALANCE_UPDATE_INTERVAL_MSECS = 5 * 1000;
|
||||||
|
|
||||||
|
QTimer* balanceUpdateTimer = new QTimer(this);
|
||||||
|
connect(balanceUpdateTimer, &QTimer::timeout, &accountManager, &AccountManager::updateBalance);
|
||||||
|
balanceUpdateTimer->start(BALANCE_UPDATE_INTERVAL_MSECS);
|
||||||
|
|
||||||
|
connect(&accountManager, &AccountManager::balanceChanged, this, &Application::updateWindowTitle);
|
||||||
|
|
||||||
connect(&accountManager, &AccountManager::authRequired, Menu::getInstance(), &Menu::loginForCurrentDomain);
|
connect(&accountManager, &AccountManager::authRequired, Menu::getInstance(), &Menu::loginForCurrentDomain);
|
||||||
connect(&accountManager, &AccountManager::usernameChanged, this, &Application::updateWindowTitle);
|
connect(&accountManager, &AccountManager::usernameChanged, this, &Application::updateWindowTitle);
|
||||||
|
|
||||||
|
@ -3094,7 +3103,18 @@ void Application::updateWindowTitle(){
|
||||||
QString username = AccountManager::getInstance().getAccountInfo().getUsername();
|
QString username = AccountManager::getInstance().getAccountInfo().getUsername();
|
||||||
QString title = QString() + (!username.isEmpty() ? username + " @ " : QString())
|
QString title = QString() + (!username.isEmpty() ? username + " @ " : QString())
|
||||||
+ nodeList->getDomainHandler().getHostname() + buildVersion;
|
+ nodeList->getDomainHandler().getHostname() + buildVersion;
|
||||||
qDebug("Application title set to: %s", title.toStdString().c_str());
|
|
||||||
|
AccountManager& accountManager = AccountManager::getInstance();
|
||||||
|
if (accountManager.getAccountInfo().hasBalance()) {
|
||||||
|
float creditBalance = accountManager.getAccountInfo().getBalance() * pow(10.0f, -8.0f);
|
||||||
|
|
||||||
|
QString creditBalanceString;
|
||||||
|
creditBalanceString.sprintf("%.8f", creditBalance);
|
||||||
|
|
||||||
|
title += " - ₵" + creditBalanceString;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug("Application title set to: %s", title.toStdString().c_str());
|
||||||
_window->setWindowTitle(title);
|
_window->setWindowTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,8 @@ AccountManager::AccountManager() :
|
||||||
|
|
||||||
qRegisterMetaType<QNetworkAccessManager::Operation>("QNetworkAccessManager::Operation");
|
qRegisterMetaType<QNetworkAccessManager::Operation>("QNetworkAccessManager::Operation");
|
||||||
qRegisterMetaType<JSONCallbackParameters>("JSONCallbackParameters");
|
qRegisterMetaType<JSONCallbackParameters>("JSONCallbackParameters");
|
||||||
|
|
||||||
|
connect(&_accountInfo, &DataServerAccountInfo::balanceChanged, this, &AccountManager::accountInfoBalanceChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash";
|
const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash";
|
||||||
|
@ -69,6 +71,9 @@ void AccountManager::logout() {
|
||||||
// a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file
|
// a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file
|
||||||
_accountInfo = DataServerAccountInfo();
|
_accountInfo = DataServerAccountInfo();
|
||||||
|
|
||||||
|
emit balanceChanged(0);
|
||||||
|
connect(&_accountInfo, &DataServerAccountInfo::balanceChanged, this, &AccountManager::accountInfoBalanceChanged);
|
||||||
|
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
settings.beginGroup(ACCOUNTS_GROUP);
|
settings.beginGroup(ACCOUNTS_GROUP);
|
||||||
|
|
||||||
|
@ -82,6 +87,21 @@ void AccountManager::logout() {
|
||||||
emit usernameChanged(QString());
|
emit usernameChanged(QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AccountManager::updateBalance() {
|
||||||
|
if (hasValidAccessToken()) {
|
||||||
|
// ask our auth endpoint for our balance
|
||||||
|
JSONCallbackParameters callbackParameters;
|
||||||
|
callbackParameters.jsonCallbackReceiver = &_accountInfo;
|
||||||
|
callbackParameters.jsonCallbackMethod = "setBalanceFromJSON";
|
||||||
|
|
||||||
|
authenticatedRequest("/api/v1/wallets/mine", QNetworkAccessManager::GetOperation, callbackParameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AccountManager::accountInfoBalanceChanged(qint64 newBalance) {
|
||||||
|
emit balanceChanged(newBalance);
|
||||||
|
}
|
||||||
|
|
||||||
void AccountManager::setAuthURL(const QUrl& authURL) {
|
void AccountManager::setAuthURL(const QUrl& authURL) {
|
||||||
if (_authURL != authURL) {
|
if (_authURL != authURL) {
|
||||||
_authURL = authURL;
|
_authURL = authURL;
|
||||||
|
|
|
@ -63,6 +63,8 @@ public slots:
|
||||||
void requestFinished();
|
void requestFinished();
|
||||||
void requestError(QNetworkReply::NetworkError error);
|
void requestError(QNetworkReply::NetworkError error);
|
||||||
void logout();
|
void logout();
|
||||||
|
void updateBalance();
|
||||||
|
void accountInfoBalanceChanged(qint64 newBalance);
|
||||||
signals:
|
signals:
|
||||||
void authRequired();
|
void authRequired();
|
||||||
void authEndpointChanged();
|
void authEndpointChanged();
|
||||||
|
@ -71,6 +73,7 @@ signals:
|
||||||
void loginComplete(const QUrl& authURL);
|
void loginComplete(const QUrl& authURL);
|
||||||
void loginFailed();
|
void loginFailed();
|
||||||
void logoutComplete();
|
void logoutComplete();
|
||||||
|
void balanceChanged(qint64 newBalance);
|
||||||
private slots:
|
private slots:
|
||||||
void processReply();
|
void processReply();
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -17,7 +17,9 @@ DataServerAccountInfo::DataServerAccountInfo() :
|
||||||
_accessToken(),
|
_accessToken(),
|
||||||
_username(),
|
_username(),
|
||||||
_xmppPassword(),
|
_xmppPassword(),
|
||||||
_discourseApiKey()
|
_discourseApiKey(),
|
||||||
|
_balance(0),
|
||||||
|
_hasBalance(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,7 +27,9 @@ DataServerAccountInfo::DataServerAccountInfo() :
|
||||||
DataServerAccountInfo::DataServerAccountInfo(const QJsonObject& jsonObject) :
|
DataServerAccountInfo::DataServerAccountInfo(const QJsonObject& jsonObject) :
|
||||||
_accessToken(jsonObject),
|
_accessToken(jsonObject),
|
||||||
_username(),
|
_username(),
|
||||||
_xmppPassword()
|
_xmppPassword(),
|
||||||
|
_balance(0),
|
||||||
|
_hasBalance(false)
|
||||||
{
|
{
|
||||||
QJsonObject userJSONObject = jsonObject["user"].toObject();
|
QJsonObject userJSONObject = jsonObject["user"].toObject();
|
||||||
setUsername(userJSONObject["username"].toString());
|
setUsername(userJSONObject["username"].toString());
|
||||||
|
@ -38,6 +42,8 @@ DataServerAccountInfo::DataServerAccountInfo(const DataServerAccountInfo& otherI
|
||||||
_username = otherInfo._username;
|
_username = otherInfo._username;
|
||||||
_xmppPassword = otherInfo._xmppPassword;
|
_xmppPassword = otherInfo._xmppPassword;
|
||||||
_discourseApiKey = otherInfo._discourseApiKey;
|
_discourseApiKey = otherInfo._discourseApiKey;
|
||||||
|
_balance = otherInfo._balance;
|
||||||
|
_hasBalance = otherInfo._hasBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataServerAccountInfo& DataServerAccountInfo::operator=(const DataServerAccountInfo& otherInfo) {
|
DataServerAccountInfo& DataServerAccountInfo::operator=(const DataServerAccountInfo& otherInfo) {
|
||||||
|
@ -53,6 +59,8 @@ void DataServerAccountInfo::swap(DataServerAccountInfo& otherInfo) {
|
||||||
swap(_username, otherInfo._username);
|
swap(_username, otherInfo._username);
|
||||||
swap(_xmppPassword, otherInfo._xmppPassword);
|
swap(_xmppPassword, otherInfo._xmppPassword);
|
||||||
swap(_discourseApiKey, otherInfo._discourseApiKey);
|
swap(_discourseApiKey, otherInfo._discourseApiKey);
|
||||||
|
swap(_balance, otherInfo._balance);
|
||||||
|
swap(_hasBalance, otherInfo._hasBalance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataServerAccountInfo::setUsername(const QString& username) {
|
void DataServerAccountInfo::setUsername(const QString& username) {
|
||||||
|
@ -75,6 +83,22 @@ void DataServerAccountInfo::setDiscourseApiKey(const QString& discourseApiKey) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DataServerAccountInfo::setBalance(quint64 balance) {
|
||||||
|
if (!_hasBalance || _balance != balance) {
|
||||||
|
_balance = balance;
|
||||||
|
_hasBalance = true;
|
||||||
|
|
||||||
|
emit balanceChanged(_balance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataServerAccountInfo::setBalanceFromJSON(const QJsonObject& jsonObject) {
|
||||||
|
if (jsonObject["status"].toString() == "success") {
|
||||||
|
qint64 balanceInSatoshis = jsonObject["data"].toObject()["wallet"].toObject()["balance"].toInt();
|
||||||
|
setBalance(balanceInSatoshis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QDataStream& operator<<(QDataStream &out, const DataServerAccountInfo& info) {
|
QDataStream& operator<<(QDataStream &out, const DataServerAccountInfo& info) {
|
||||||
out << info._accessToken << info._username << info._xmppPassword << info._discourseApiKey;
|
out << info._accessToken << info._username << info._xmppPassword << info._discourseApiKey;
|
||||||
return out;
|
return out;
|
||||||
|
|
|
@ -34,9 +34,17 @@ public:
|
||||||
|
|
||||||
const QString& getDiscourseApiKey() const { return _discourseApiKey; }
|
const QString& getDiscourseApiKey() const { return _discourseApiKey; }
|
||||||
void setDiscourseApiKey(const QString& discourseApiKey);
|
void setDiscourseApiKey(const QString& discourseApiKey);
|
||||||
|
|
||||||
|
quint64 getBalance() const { return _balance; }
|
||||||
|
void setBalance(quint64 balance);
|
||||||
|
bool hasBalance() const { return _hasBalance; }
|
||||||
|
void setHasBalance(bool hasBalance) { _hasBalance = hasBalance; }
|
||||||
|
Q_INVOKABLE void setBalanceFromJSON(const QJsonObject& jsonObject);
|
||||||
|
|
||||||
friend QDataStream& operator<<(QDataStream &out, const DataServerAccountInfo& info);
|
friend QDataStream& operator<<(QDataStream &out, const DataServerAccountInfo& info);
|
||||||
friend QDataStream& operator>>(QDataStream &in, DataServerAccountInfo& info);
|
friend QDataStream& operator>>(QDataStream &in, DataServerAccountInfo& info);
|
||||||
|
signals:
|
||||||
|
qint64 balanceChanged(qint64 newBalance);
|
||||||
private:
|
private:
|
||||||
void swap(DataServerAccountInfo& otherInfo);
|
void swap(DataServerAccountInfo& otherInfo);
|
||||||
|
|
||||||
|
@ -44,6 +52,8 @@ private:
|
||||||
QString _username;
|
QString _username;
|
||||||
QString _xmppPassword;
|
QString _xmppPassword;
|
||||||
QString _discourseApiKey;
|
QString _discourseApiKey;
|
||||||
|
quint64 _balance;
|
||||||
|
bool _hasBalance;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_DataServerAccountInfo_h
|
#endif // hifi_DataServerAccountInfo_h
|
||||||
|
|
Loading…
Reference in a new issue