From 98cd99ef4cbc538911640b2e0ba87a7bd40be9d4 Mon Sep 17 00:00:00 2001
From: denis <denis.sumin>
Date: Sun, 5 Jan 2025 00:35:52 +0300
Subject: [PATCH] [*] fix processing price history

---
 chain/wallet/handlers/DapCommandList.cpp      |  3 +-
 .../DapGetXchangeTokenPriceHistory.cpp        | 73 ++++++-------------
 2 files changed, 25 insertions(+), 51 deletions(-)

diff --git a/chain/wallet/handlers/DapCommandList.cpp b/chain/wallet/handlers/DapCommandList.cpp
index c3ee5707..90fe2572 100644
--- a/chain/wallet/handlers/DapCommandList.cpp
+++ b/chain/wallet/handlers/DapCommandList.cpp
@@ -634,8 +634,7 @@ QPair<qint64, QString> DapCommandList::getXchangeAverage(const QVariant &args)
 
     if(result == "Can't find orders for specified token pair")
     {
-        QDateTime date = QDateTime::fromMSecsSinceEpoch(0);
-        qint64 dateToSecs = date.toSecsSinceEpoch();
+        qint64 dateToSecs = 0;
         QString rate = "0.0";
         return {dateToSecs, rate};
     }
diff --git a/chain/wallet/handlers/DapGetXchangeTokenPriceHistory.cpp b/chain/wallet/handlers/DapGetXchangeTokenPriceHistory.cpp
index e3a8582f..1682a051 100644
--- a/chain/wallet/handlers/DapGetXchangeTokenPriceHistory.cpp
+++ b/chain/wallet/handlers/DapGetXchangeTokenPriceHistory.cpp
@@ -21,17 +21,12 @@ QVariant DapGetXchangeTokenPriceHistory::respondToClient(const QVariant &args)
     auto updateHistoryList = [&arrHistory, this](const QString& result, bool isContrary = false)
     {
         QStringList orderList = result.split("\n");
-//        QString time = "";
         QString hash = "";
+        QString rate = "";
+        QString dateStr = "";
         QDateTime date;
-        qint64 dateToSecs = 0;
-        struct Info
-        {
-            QString rate = "";
-            QString time = "";
-        };
-
-        QMap<QString, Info> resultArray;
+        qint64 dateToSecs = date.toMSecsSinceEpoch();
+        QString time = QString::number(dateToSecs);
 
         for(QString& str: orderList)
         {
@@ -58,8 +53,10 @@ QVariant DapGetXchangeTokenPriceHistory::respondToClient(const QVariant &args)
             auto matchTime = REG_TIME.match(str);
             if(matchTime.hasMatch())
             {
-                date = QDateTime::fromString(matchTime.captured(1), Qt::RFC2822Date);
+                dateStr = matchTime.captured(1);
+                date = QDateTime::fromString(dateStr, Qt::RFC2822Date);
                 dateToSecs = date.toMSecsSinceEpoch();
+                time = QString::number(dateToSecs);
             }
 
             auto matchRate = REG_RATE.match(str);
@@ -67,62 +64,40 @@ QVariant DapGetXchangeTokenPriceHistory::respondToClient(const QVariant &args)
             {
                 if(!str.contains(TYPE_ORDERS))
                 {
+                    dateStr = "";
                     dateToSecs = 0;
+                    time = QString::number(dateToSecs);
+                    rate = "";
+                    hash = "";
                     continue;
                 }
 
-                Info item;
-
                 if(!isContrary)
                 {
-
-                    dateToSecs = date.toMSecsSinceEpoch();
-
-                    auto list = matchRate.capturedTexts();
-                    item.rate = matchRate.captured(3);
-                    item.time = QString::number(dateToSecs);
-                    if(hash.isEmpty())
-                    {
-                        qWarning() << "Hash is not defined.";
-                        continue;
-                    }
-                    resultArray.insert(hash, item);
+                    rate = matchRate.captured(3);
                 }
                 else
                 {
-                    dateToSecs = date.toMSecsSinceEpoch();
                     Dap::Coin oneVal = QString("1.0");
                     Dap::Coin priceVal = matchRate.captured(3);
                     QString result = (oneVal/priceVal).toCoinsString();
-
-                    item.rate = result;
-                    item.time = QString::number(dateToSecs);
-                    if(hash.isEmpty())
-                    {
-                        qWarning() << "Hash is not defined.";
-                        continue;
-                    }
-                    resultArray.insert(hash, item);
+                    rate = result;
                 }
-            }
-            auto matchReturn = REG_RETURN.match(str);
-            if(matchReturn.hasMatch())
-            {
-                auto list = matchReturn.capturedTexts();
-                if(resultArray.contains(matchReturn.captured(2)))
+
+                if(hash.isEmpty())
                 {
-                    resultArray.remove(matchReturn.captured(2));
+                    qWarning() << "Hash is not defined.";
+                    continue;
                 }
+
+                QJsonObject rateObject;
+                rateObject.insert("rate",       rate);
+                rateObject.insert("time",       time);
+                rateObject.insert("time_norm",  dateStr);
+                rateObject.insert("hash",       hash);
+                arrHistory.append(std::move(rateObject));
             }
         }
-        for(const auto& item: resultArray)
-        {
-            QJsonObject rateObject;
-            rateObject.insert("rate", item.rate);
-            rateObject.insert("time", item.time);
-            arrHistory.append(std::move(rateObject));
-        }
-
     };
 
     // get rate history
-- 
GitLab