mirror of
https://github.com/feather-wallet/feather.git
synced 2024-12-23 03:59:29 +00:00
100 lines
2.6 KiB
C++
100 lines
2.6 KiB
C++
// SPDX-License-Identifier: BSD-3-Clause
|
|
// SPDX-FileCopyrightText: 2020-2023 The Monero Project
|
|
|
|
#include "TxFiatHistory.h"
|
|
#include "utils/Utils.h"
|
|
|
|
TxFiatHistory::TxFiatHistory(int genesis_timestamp, const QString &configDirectory, QObject *parent)
|
|
: QObject(parent)
|
|
, m_genesis_timestamp(genesis_timestamp)
|
|
, m_databasePath(QString("%1/fiatHistory.db").arg(configDirectory))
|
|
{
|
|
this->loadDatabase();
|
|
}
|
|
|
|
double TxFiatHistory::get(int timestamp) {
|
|
QDateTime ts;
|
|
ts.setSecsSinceEpoch(timestamp);
|
|
auto key = ts.toString("yyyyMMdd");
|
|
return this->get(key); // USD
|
|
}
|
|
|
|
double TxFiatHistory::get(const QString &date) {
|
|
if (m_database.contains(date)) {
|
|
return m_database[date]; // USD
|
|
}
|
|
return 0.0;
|
|
}
|
|
|
|
void TxFiatHistory::loadDatabase() {
|
|
if (!Utils::fileExists(m_databasePath)) {
|
|
return;
|
|
}
|
|
|
|
m_database.clear();
|
|
|
|
QString contents = Utils::barrayToString(Utils::fileOpen(m_databasePath));
|
|
for (auto &line: contents.split("\n")) {
|
|
line = line.trimmed();
|
|
if (line.isEmpty()) {
|
|
continue;
|
|
}
|
|
QStringList spl = line.split(":");
|
|
if (spl.length() == 2) {
|
|
m_database[spl.at(0)] = spl.at(1).toDouble();
|
|
}
|
|
}
|
|
}
|
|
|
|
void TxFiatHistory::writeDatabase() {
|
|
QString data;
|
|
for (const auto &line: m_database.toStdMap()) {
|
|
data += QString("%1:%2\n").arg(line.first).arg(QString::number(line.second));
|
|
}
|
|
Utils::fileWrite(m_databasePath, data);
|
|
}
|
|
|
|
void TxFiatHistory::onUpdateDatabase() {
|
|
// update local txFiatHistory database
|
|
if (m_initialized) {
|
|
return;
|
|
}
|
|
|
|
QDateTime genesis;
|
|
genesis.setSecsSinceEpoch(m_genesis_timestamp);
|
|
QDate genesis_date = genesis.date();
|
|
|
|
QDate now = QDate::currentDate();
|
|
|
|
QSet<int> missingYears;
|
|
for (QDate date = genesis_date; date <= now;) {
|
|
|
|
if (!m_database.contains(this->dateToKey(date))) {
|
|
qInfo() << "TxFiatHistory: Can't find value for date: " << this->dateToKey(date);
|
|
missingYears << date.year();
|
|
date.setDate(date.year()+1, 1, 1);
|
|
continue;
|
|
}
|
|
|
|
date = date.addDays(1);
|
|
}
|
|
|
|
for (const int year : missingYears) {
|
|
emit requestYear(year);
|
|
}
|
|
|
|
m_initialized = true;
|
|
}
|
|
|
|
QString TxFiatHistory::dateToKey(const QDate &date) {
|
|
return date.toString("yyyyMMdd");
|
|
}
|
|
|
|
void TxFiatHistory::onWSData(const QJsonObject &data) {
|
|
foreach(const QString &key, data.keys()) {
|
|
QJsonValue value = data.value(key);
|
|
m_database[key] = value.toDouble();
|
|
}
|
|
|
|
this->writeDatabase();
|
|
}
|