aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasil Dimov <vd@FreeBSD.org>2023-03-06 12:49:39 +0100
committerVasil Dimov <vd@FreeBSD.org>2023-03-06 16:06:05 +0100
commita981af4e6fd0047bc3e96468db48dd7820dac808 (patch)
treebc01cd177af39391ad7886849f646276ec8e0df9
parent40c6c85c05812ee8bf824b639307b1ac17a001c4 (diff)
gui: use the stored CSubNet entry when unbanning
The previous code visualized the `CSubNet` object as string, then parsed that string back to `CSubNet`. This is sub-optimal given that the original `CSubNet` object can be used directly instead. This avoids calling `LookupSubNet()` from the GUI. Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
-rw-r--r--src/qt/bantablemodel.cpp6
-rw-r--r--src/qt/bantablemodel.h2
-rw-r--r--src/qt/rpcconsole.cpp19
3 files changed, 15 insertions, 12 deletions
diff --git a/src/qt/bantablemodel.cpp b/src/qt/bantablemodel.cpp
index 4f57cd4457..d68ca1e2ea 100644
--- a/src/qt/bantablemodel.cpp
+++ b/src/qt/bantablemodel.cpp
@@ -178,3 +178,9 @@ bool BanTableModel::shouldShow()
{
return priv->size() > 0;
}
+
+bool BanTableModel::unban(const QModelIndex& index)
+{
+ CCombinedBan* ban{static_cast<CCombinedBan*>(index.internalPointer())};
+ return ban != nullptr && m_node.unban(ban->subnet);
+}
diff --git a/src/qt/bantablemodel.h b/src/qt/bantablemodel.h
index 0a30905172..51f925bfa8 100644
--- a/src/qt/bantablemodel.h
+++ b/src/qt/bantablemodel.h
@@ -68,6 +68,8 @@ public:
bool shouldShow();
+ bool unban(const QModelIndex& index);
+
public Q_SLOTS:
void refresh();
diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
index b46a3c039b..0e712062af 100644
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -11,7 +11,6 @@
#include <chainparams.h>
#include <interfaces/node.h>
-#include <netbase.h>
#include <qt/bantablemodel.h>
#include <qt/clientmodel.h>
#include <qt/guiutil.h>
@@ -1308,17 +1307,13 @@ void RPCConsole::unbanSelectedNode()
// Get selected ban addresses
QList<QModelIndex> nodes = GUIUtil::getEntryData(ui->banlistWidget, BanTableModel::Address);
- for(int i = 0; i < nodes.count(); i++)
- {
- // Get currently selected ban address
- QString strNode = nodes.at(i).data().toString();
- CSubNet possibleSubnet;
-
- LookupSubNet(strNode.toStdString(), possibleSubnet);
- if (possibleSubnet.IsValid() && m_node.unban(possibleSubnet))
- {
- clientModel->getBanTableModel()->refresh();
- }
+ BanTableModel* ban_table_model{clientModel->getBanTableModel()};
+ bool unbanned{false};
+ for (const auto& node_index : nodes) {
+ unbanned |= ban_table_model->unban(node_index);
+ }
+ if (unbanned) {
+ ban_table_model->refresh();
}
}