From b8ac33427f2f13153da0e957a51f563a79084d4b Mon Sep 17 00:00:00 2001
From: Erdem Erdyniev <erdem.erdyniev@demlabs.net>
Date: Tue, 11 Feb 2025 11:37:42 +0700
Subject: [PATCH 1/3] [*]web3:VotingList: better error message for wrong net

---
 chain/wallet/handlers/DapVoitingListCommand.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/chain/wallet/handlers/DapVoitingListCommand.cpp b/chain/wallet/handlers/DapVoitingListCommand.cpp
index 1e90d921..fdd879e6 100644
--- a/chain/wallet/handlers/DapVoitingListCommand.cpp
+++ b/chain/wallet/handlers/DapVoitingListCommand.cpp
@@ -36,7 +36,12 @@ QVariant DapVoitingListCommand::respondToClient(const QVariant &args)
     }
     else
     {
-        resultObject.insert(ERROR_KEY, result);
+        auto aErrorMsg = result.split("message:");
+        if (aErrorMsg.size() >= 1)
+        {
+            auto errTxt = aErrorMsg[1].trimmed();
+            resultObject.insert(ERROR_KEY, errTxt);
+        }
     }
 
     addWeb3Result(resultObject, args);
-- 
GitLab


From b124b901f295b38542725089f73065b3f158794d Mon Sep 17 00:00:00 2001
From: "denis.sumin" <denis.smolov@demlabs.net>
Date: Fri, 14 Feb 2025 16:58:10 +0300
Subject: [PATCH 2/3] [*] reworked VotingList on JSON RPC

---
 chain/wallet/handlers/DapCommandList.cpp      |  2 +-
 .../wallet/handlers/DapVoitingListCommand.cpp | 64 +++++++++++--------
 2 files changed, 39 insertions(+), 27 deletions(-)

diff --git a/chain/wallet/handlers/DapCommandList.cpp b/chain/wallet/handlers/DapCommandList.cpp
index 32cc2857..07c93eb3 100644
--- a/chain/wallet/handlers/DapCommandList.cpp
+++ b/chain/wallet/handlers/DapCommandList.cpp
@@ -1228,7 +1228,7 @@ QVariant DapCommandList::votingList(const QVariant &args)
     }
     auto command = QString("voting list -net %1").arg(params[0]);
 
-    return requestToNode(QPair<QString*, QString>(m_cliPath,command));
+    return requestToNode(QPair<QString*, QString>(m_cliPath,command),Dap::RequestType::JSON);
 }
 
 QVariant DapCommandList::votingDump(const QVariant &args)
diff --git a/chain/wallet/handlers/DapVoitingListCommand.cpp b/chain/wallet/handlers/DapVoitingListCommand.cpp
index 9c4e11b9..051171c8 100644
--- a/chain/wallet/handlers/DapVoitingListCommand.cpp
+++ b/chain/wallet/handlers/DapVoitingListCommand.cpp
@@ -9,41 +9,53 @@ DapVoitingListCommand::DapVoitingListCommand(const QString &asServicename, QObje
 QVariant DapVoitingListCommand::respondToClient(const QVariant &args)
 {
     DapAbstractCommand::respondToClient(args);
-    auto result = cmdList->votingList(args).toString();
+    auto result = cmdList->votingList(args);
+    QJsonObject reply = result.toJsonObject();
+
     QJsonObject resultObject;
-    if(result.isEmpty())
+    if(reply.isEmpty())
     {
-        resultObject.insert(ERROR_KEY, "Error. Noda gave an empty answer.");
-    }
+        resultObject.insert(ERROR_KEY, "Error. Node gave an empty answer.");
+        addWeb3Result(resultObject, args);
 
-    QRegularExpression regular(
-        R"(\n*voting_tx: (.+)\n+\s+question: \"(.+)\"\n+\s*\n*)", QRegularExpression::MultilineOption);
-    QRegularExpressionMatchIterator matchItr = regular.globalMatch(result);
+        QJsonDocument resultDoc;
+        resultDoc.setObject(resultObject);
+        return resultDoc.toJson();
+    }
+    if(reply.contains("error"))
+    {
+        resultObject.insert(ERROR_KEY, reply["error"].toString());
+        addWeb3Result(resultObject, args);
 
-    if(matchItr.hasNext())
+        QJsonDocument resultDoc;
+        resultDoc.setObject(resultObject);
+        return resultDoc.toJson();
+    }
+    if(!reply["result"].isArray() || !reply["result"].toArray().first().isArray())
     {
-        QJsonArray resultArray;
-        while (matchItr.hasNext())
-        {
-            QRegularExpressionMatch match = matchItr.next();
-
-            QJsonObject object;
-            object.insert("hash",     match.captured(1).simplified());
-            object.insert("question", match.captured(2).simplified());
-            resultArray.append(std::move(object));
-        }
-        resultObject.insert(RESULT_KEY, std::move(resultArray));
+        resultObject.insert(ERROR_KEY, "Error. Answer is does't array.");
+        addWeb3Result(resultObject, args);
+
+        QJsonDocument resultDoc;
+        resultDoc.setObject(resultObject);
+        return resultDoc.toJson();
     }
-    else
+
+    QJsonArray voteArray = reply["result"].toArray().first().toArray();
+
+    QJsonArray resultArray;
+
+    for(auto item: voteArray)
     {
-        auto aErrorMsg = result.split("message:");
-        if (aErrorMsg.size() >= 1)
-        {
-            auto errTxt = aErrorMsg[1].trimmed();
-            resultObject.insert(ERROR_KEY, errTxt);
-        }
+        QJsonObject vote = item.toObject();
+
+        QJsonObject object;
+        object.insert("hash",     vote["voting_tx"].toString());
+        object.insert("question", vote["question"].toString());
+        resultArray.append(std::move(object));
     }
 
+    resultObject.insert(RESULT_KEY, std::move(resultArray));
     addWeb3Result(resultObject, args);
 
     QJsonDocument resultDoc;
-- 
GitLab


From 63c6fcca1473ad207de2d1f5e10e1ec19dd3cba8 Mon Sep 17 00:00:00 2001
From: "denis.sumin" <denis.smolov@demlabs.net>
Date: Fri, 14 Feb 2025 17:02:05 +0300
Subject: [PATCH 3/3] ...

---
 chain/wallet/handlers/DapVoitingListCommand.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/chain/wallet/handlers/DapVoitingListCommand.cpp b/chain/wallet/handlers/DapVoitingListCommand.cpp
index 051171c8..958400b4 100644
--- a/chain/wallet/handlers/DapVoitingListCommand.cpp
+++ b/chain/wallet/handlers/DapVoitingListCommand.cpp
@@ -22,9 +22,9 @@ QVariant DapVoitingListCommand::respondToClient(const QVariant &args)
         resultDoc.setObject(resultObject);
         return resultDoc.toJson();
     }
-    if(reply.contains("error"))
+    if(reply.contains("errors"))
     {
-        resultObject.insert(ERROR_KEY, reply["error"].toString());
+        resultObject.insert(ERROR_KEY, reply["errors"].toString());
         addWeb3Result(resultObject, args);
 
         QJsonDocument resultDoc;
-- 
GitLab