mirror of
https://github.com/feather-wallet/feather.git
synced 2025-01-10 21:05:00 +00:00
73 lines
2 KiB
C++
73 lines
2 KiB
C++
// SPDX-License-Identifier: BSD-3-Clause
|
|
// SPDX-FileCopyrightText: 2020-2024 The Monero Project
|
|
|
|
#include "utils/prices.h"
|
|
|
|
Prices::Prices(QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
}
|
|
|
|
void Prices::cryptoPricesReceived(const QJsonArray &data) {
|
|
this->markets.clear();
|
|
|
|
for (const auto &entry : data) {
|
|
QJsonObject obj = entry.toObject();
|
|
marketStruct ms;
|
|
ms.symbol = obj.value("symbol").toString();
|
|
ms.image = obj.value("image").toString();
|
|
ms.name = obj.value("name").toString();
|
|
ms.price_usd = obj.value("current_price").toDouble();
|
|
ms.price_usd_change_pct_24h = obj.value("price_change_percentage_24h").toDouble();
|
|
if (ms.price_usd <= 0)
|
|
continue;
|
|
|
|
this->markets.insert(ms.symbol.toUpper(), ms);
|
|
}
|
|
|
|
emit cryptoPricesUpdated();
|
|
}
|
|
|
|
void Prices::fiatPricesReceived(const QJsonObject &data) {
|
|
QJsonObject ratesData = data.value("rates").toObject();
|
|
for (const auto ¤cy : ratesData.keys()) {
|
|
this->rates.insert(currency, ratesData.value(currency).toDouble());
|
|
}
|
|
emit fiatPricesUpdated();
|
|
}
|
|
|
|
double Prices::convert(QString symbolFrom, QString symbolTo, double amount) {
|
|
if (symbolFrom == symbolTo)
|
|
return amount;
|
|
if (amount <= 0.0)
|
|
return 0.0;
|
|
|
|
symbolFrom = symbolFrom.toUpper();
|
|
symbolTo = symbolTo.toUpper();
|
|
|
|
double usdPrice;
|
|
if (this->markets.contains(symbolFrom)) {
|
|
usdPrice = this->markets[symbolFrom].price_usd * amount;
|
|
}
|
|
else if (this->rates.contains(symbolFrom)) {
|
|
if (symbolFrom == "USD") {
|
|
usdPrice = amount;
|
|
} else {
|
|
usdPrice = amount / this->rates[symbolFrom];
|
|
}
|
|
}
|
|
else {
|
|
return 0.0;
|
|
}
|
|
|
|
if (symbolTo == "USD")
|
|
return usdPrice;
|
|
|
|
if (this->markets.contains(symbolTo))
|
|
return usdPrice / this->markets[symbolTo].price_usd;
|
|
else if (this->rates.contains(symbolTo))
|
|
return usdPrice * this->rates[symbolTo];
|
|
|
|
return 0.0;
|
|
}
|
|
|