From bcc80890f5bb49fb6bba807de650bdce80d520f4 Mon Sep 17 00:00:00 2001 From: jolavillette Date: Tue, 24 Feb 2026 18:35:45 +0100 Subject: [PATCH] TheWire: Refactor blocking service calls to be asynchronous in WireDialog.cpp --- retroshare-gui/src/gui/TheWire/WireDialog.cpp | 55 ++++++++++++------- retroshare-gui/src/gui/TheWire/WireDialog.h | 2 +- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index 10d0c6b4d..002a3b273 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -431,14 +431,20 @@ bool WireDialog::setupPulseAddDialog() void WireDialog::subscribe(RsGxsGroupId &groupId) { - uint32_t token; - rsWire->subscribeToGroup(token, groupId, true); + RsThread::async([groupId]() + { + uint32_t token; + rsWire->subscribeToGroup(token, groupId, true); + }); } void WireDialog::unsubscribe(RsGxsGroupId &groupId) { - uint32_t token; - rsWire->subscribeToGroup(token, groupId, false); + RsThread::async([groupId]() + { + uint32_t token; + rsWire->subscribeToGroup(token, groupId, false); + }); } void WireDialog::notifyGroupSelection(WireGroupItem *item) @@ -560,7 +566,7 @@ void WireDialog::deleteGroups() } } -void WireDialog::updateGroups(std::vector& groups) +void WireDialog::updateGroups(const std::vector& groups) { mAllGroups.clear(); mOwnGroups.clear(); @@ -730,21 +736,27 @@ void WireDialog::requestGroupData() std::cerr << "WireDialog::requestGroupData()"; std::cerr << std::endl; - std::vector groups; - rsWire->getGroups({}, groups); + RsThread::async([this]() + { + std::vector groups; + rsWire->getGroups({}, groups); - updateGroups(groups); - showGroups(); + RsQThreadUtils::postToObject([this, groups]() + { + updateGroups(groups); + showGroups(); - if (!mNavigatePendingGroupId.isNull()) { - if (!mNavigatePendingMsgId.isNull()) { - requestPulseFocus(mNavigatePendingGroupId, mNavigatePendingMsgId); - } else { - requestGroupFocus(mNavigatePendingGroupId); - } - mNavigatePendingGroupId.clear(); - mNavigatePendingMsgId.clear(); - } + if (!mNavigatePendingGroupId.isNull()) { + if (!mNavigatePendingMsgId.isNull()) { + requestPulseFocus(mNavigatePendingGroupId, mNavigatePendingMsgId); + } else { + requestGroupFocus(mNavigatePendingGroupId); + } + mNavigatePendingGroupId.clear(); + mNavigatePendingMsgId.clear(); + } + }, this); + }); } rstime_t WireDialog::getFilterTimestamp() @@ -879,8 +891,11 @@ void WireDialog::PVHfollow(const RsGxsGroupId &groupId) std::cerr << ")"; std::cerr << std::endl; - uint32_t token; - rsWire->subscribeToGroup(token, groupId, true); + RsThread::async([groupId]() + { + uint32_t token; + rsWire->subscribeToGroup(token, groupId, true); + }); } void WireDialog::PVHrate(const RsGxsId &authorId) diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index d3ec5347d..5abced5ed 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -163,7 +163,7 @@ private: void deleteGroups(); void showGroups(); void showSelectedGroups(); - void updateGroups(std::vector &groups); + void updateGroups(const std::vector &groups); void processSettings(bool load);