TheWire: Refactor blocking service calls to be asynchronous in WireDialog.cpp

This commit is contained in:
jolavillette 2026-02-24 18:35:45 +01:00
parent b020001906
commit bcc80890f5
2 changed files with 36 additions and 21 deletions

View File

@ -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<RsWireGroup>& groups)
void WireDialog::updateGroups(const std::vector<RsWireGroup>& groups)
{
mAllGroups.clear();
mOwnGroups.clear();
@ -730,21 +736,27 @@ void WireDialog::requestGroupData()
std::cerr << "WireDialog::requestGroupData()";
std::cerr << std::endl;
std::vector<RsWireGroup> groups;
rsWire->getGroups({}, groups);
RsThread::async([this]()
{
std::vector<RsWireGroup> 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)

View File

@ -163,7 +163,7 @@ private:
void deleteGroups();
void showGroups();
void showSelectedGroups();
void updateGroups(std::vector<RsWireGroup> &groups);
void updateGroups(const std::vector<RsWireGroup> &groups);
void processSettings(bool load);