From 5433e85323179697a25f81a893bd1663072d56f5 Mon Sep 17 00:00:00 2001 From: PYRET1C <88980503+PYRET1C@users.noreply.github.com> Date: Sun, 20 Aug 2023 18:19:05 +0530 Subject: [PATCH 1/2] added the new token service in this file --- .../src/gui/TheWire/PulseAddDialog.cpp | 188 ++++++++++++------ 1 file changed, 126 insertions(+), 62 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 8877d5cf6..4dd233b26 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -25,6 +25,7 @@ #include "gui/gxs/GxsIdDetails.h" #include "gui/common/FilesDefs.h" #include "util/misc.h" +#include "util/qtthreadsutils.h" #include "PulseAddDialog.h" @@ -98,11 +99,32 @@ void PulseAddDialog::setGroup(RsWireGroup &group) // set ReplyWith Group. void PulseAddDialog::setGroup(const RsGxsGroupId &grpId) { - /* fetch in the background */ - RsWireGroupSPtr pGroup; - rsWire->getWireGroup(grpId, pGroup); + if(grpId.isNull()){ + return; + } - setGroup(*pGroup); + RsWireGroupSPtr pGroup; + + RsThread::async([this,grpId,&pGroup](){ + + if(!rsWire->getWireGroup(grpId,pGroup)) + { + std::cerr << __PRETTY_FUNCTION__ << " failed to retrieve wire group info for wire id: " << grpId << std::endl; + return; + } + + RsQThreadUtils::postToObject( [pGroup,this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete, note that + * Qt::QueuedConnection is important! + */ + + setGroup(*pGroup); + }, this ); + + }); } void PulseAddDialog::cleanup() @@ -234,30 +256,46 @@ void PulseAddDialog::setReplyTo(const RsWirePulse &pulse, RsWirePulseSPtr pPulse void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId, uint32_t replyType) { + if(grpId.isNull()){ + return; + } /* fetch in the background */ - RsWireGroupSPtr pGroup; - if (!rsWire->getWireGroup(grpId, pGroup)) - { - std::cerr << "PulseAddDialog::setRplyTo() failed to fetch group"; - std::cerr << std::endl; - return; - } + RsWireGroupSPtr pGroup; + RsWirePulseSPtr pPulse; - RsWirePulseSPtr pPulse; - if (!rsWire->getWirePulse(grpId, msgId, pPulse)) - { - std::cerr << "PulseAddDialog::setRplyTo() failed to fetch pulse"; - std::cerr << std::endl; - return; - } + RsThread::async([this,grpId,&pGroup,&pPulse,msgId,replyType](){ - // update GroupPtr - // TODO - this should be handled in libretroshare if possible. - if (pPulse->mGroupPtr == NULL) { - pPulse->mGroupPtr = pGroup; - } + if(!rsWire->getWireGroup(grpId,pGroup)) + { + std::cerr << __PRETTY_FUNCTION__ << "PulseAddDialog::setRplyTo() failed to fetch group id: " << grpId << std::endl; + return; + } + + if (!rsWire->getWirePulse(grpId, msgId, pPulse)) + { + std::cerr << "PulseAddDialog::setRplyTo() failed to fetch pulse of group id: " << grpId << std::endl; + return; + } + + // update GroupPtr + // TODO - this should be handled in libretroshare if possible. + if (pPulse->mGroupPtr == NULL) { + pPulse->mGroupPtr = pGroup; + } + + RsQThreadUtils::postToObject( [pGroup,this,pPulse,replyType]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete, note that + * Qt::QueuedConnection is important! + */ + + setReplyTo(*pPulse, pPulse, pGroup->mMeta.mGroupName, replyType); + }, this ); + + }); - setReplyTo(*pPulse, pPulse, pGroup->mMeta.mGroupName, replyType); } void PulseAddDialog::addURL() @@ -307,26 +345,39 @@ void PulseAddDialog::postOriginalPulse() std::cerr << "PulseAddDialog::postOriginalPulse()"; std::cerr << std::endl; - RsWirePulseSPtr pPulse(new RsWirePulse()); + RsWirePulseSPtr pPulse; - pPulse->mSentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; - pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); - // set images here too. - pPulse->mImage1 = mImage1; - pPulse->mImage2 = mImage2; - pPulse->mImage3 = mImage3; - pPulse->mImage4 = mImage4; + pPulse->mSentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; + pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); + // set images here too. + pPulse->mImage1 = mImage1; + pPulse->mImage2 = mImage2; + pPulse->mImage3 = mImage3; + pPulse->mImage4 = mImage4; - // this should be in async thread, so doesn't block UI thread. - if (!rsWire->createOriginalPulse(mGroup.mMeta.mGroupId, pPulse)) - { - std::cerr << "PulseAddDialog::postOriginalPulse() FAILED"; - std::cerr << std::endl; - return; - } + RsThread::async([this,pPulse](){ + + if (!rsWire->createOriginalPulse(mGroup.mMeta.mGroupId, pPulse)) + { + std::cerr << "PulseAddDialog::postOriginalPulse() FAILED"; + std::cerr << std::endl; + return; + } + + RsQThreadUtils::postToObject( [this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete, note that + * Qt::QueuedConnection is important! + */ + + clearDialog(); + hide(); + }, this ); + + }); - clearDialog(); - hide(); } uint32_t PulseAddDialog::toPulseSentiment(int index) @@ -356,15 +407,15 @@ void PulseAddDialog::postReplyPulse() std::cerr << "PulseAddDialog::postReplyPulse()"; std::cerr << std::endl; - RsWirePulseSPtr pPulse(new RsWirePulse()); + RsWirePulseSPtr pPulse; - pPulse->mSentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); - pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); - // set images here too. - pPulse->mImage1 = mImage1; - pPulse->mImage2 = mImage2; - pPulse->mImage3 = mImage3; - pPulse->mImage4 = mImage4; + pPulse->mSentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); + pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); + // set images here too. + pPulse->mImage1 = mImage1; + pPulse->mImage2 = mImage2; + pPulse->mImage3 = mImage3; + pPulse->mImage4 = mImage4; if (mReplyType & WIRE_PULSE_TYPE_REPUBLISH) { // Copy details from parent, and override @@ -378,20 +429,33 @@ void PulseAddDialog::postReplyPulse() pPulse->mImage4 = mReplyToPulse.mImage4; } - // this should be in async thread, so doesn't block UI thread. - if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, - mReplyToPulse.mMeta.mOrigMsgId, - mGroup.mMeta.mGroupId, - mReplyType, - pPulse)) - { - std::cerr << "PulseAddDialog::postReplyPulse() FAILED"; - std::cerr << std::endl; - return; - } + RsThread::async([this, pPulse](){ + + if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, + mReplyToPulse.mMeta.mOrigMsgId, + mGroup.mMeta.mGroupId, + mReplyType, + pPulse)) + { + std::cerr << "PulseAddDialog::postReplyPulse() FAILED"; + std::cerr << std::endl; + return; + } + + RsQThreadUtils::postToObject( [this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete, note that + * Qt::QueuedConnection is important! + */ + + clearDialog(); + hide(); + }, this ); + + }); - clearDialog(); - hide(); } void PulseAddDialog::clearDialog() From b9e7bb5457342ad399d9db7f29afb60c69ee6575 Mon Sep 17 00:00:00 2001 From: PYRET1C <88980503+PYRET1C@users.noreply.github.com> Date: Fri, 15 Dec 2023 00:05:41 +0530 Subject: [PATCH 2/2] added the new token service in more funcitons and resolved the crash on posting a pulse --- .../src/gui/TheWire/PulseAddDialog.cpp | 15 +++++++------- retroshare-gui/src/gui/TheWire/WireDialog.cpp | 20 ++++++++++++------- retroshare-gui/src/gui/TheWire/WireDialog.h | 2 +- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 4dd233b26..f50caa790 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -103,10 +103,9 @@ void PulseAddDialog::setGroup(const RsGxsGroupId &grpId) return; } - RsWireGroupSPtr pGroup; - - RsThread::async([this,grpId,&pGroup](){ + RsThread::async([this,grpId](){ + RsWireGroupSPtr pGroup; if(!rsWire->getWireGroup(grpId,pGroup)) { std::cerr << __PRETTY_FUNCTION__ << " failed to retrieve wire group info for wire id: " << grpId << std::endl; @@ -260,11 +259,11 @@ void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId return; } /* fetch in the background */ - RsWireGroupSPtr pGroup; - RsWirePulseSPtr pPulse; - RsThread::async([this,grpId,&pGroup,&pPulse,msgId,replyType](){ + RsThread::async([this,grpId,msgId,replyType](){ + RsWireGroupSPtr pGroup; + RsWirePulseSPtr pPulse; if(!rsWire->getWireGroup(grpId,pGroup)) { std::cerr << __PRETTY_FUNCTION__ << "PulseAddDialog::setRplyTo() failed to fetch group id: " << grpId << std::endl; @@ -345,7 +344,7 @@ void PulseAddDialog::postOriginalPulse() std::cerr << "PulseAddDialog::postOriginalPulse()"; std::cerr << std::endl; - RsWirePulseSPtr pPulse; + RsWirePulseSPtr pPulse(new RsWirePulse()); pPulse->mSentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); @@ -407,7 +406,7 @@ void PulseAddDialog::postReplyPulse() std::cerr << "PulseAddDialog::postReplyPulse()"; std::cerr << std::endl; - RsWirePulseSPtr pPulse; + RsWirePulseSPtr pPulse(new RsWirePulse()); pPulse->mSentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index 38ea1b398..46d2486ea 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -140,6 +140,7 @@ WireDialog::~WireDialog() processSettings(false); clearTwitterView(); + std::cerr << "WireDialog::~WireDialog()" << std::endl; delete(mWireQueue); rsEvents->unregisterEventsHandler(mEventHandlerId); @@ -467,13 +468,13 @@ bool WireDialog::loadGroupData(const uint32_t &token) std::cerr << "WireDialog::loadGroupData()"; std::cerr << std::endl; - std::vector groups; - rsWire->getGroupData(token, groups); + std::vector groups; + rsWire->getGroupData(token, groups); - // save list of groups. - updateGroups(groups); - showGroups(); - return true; + // save list of groups. + updateGroups(groups); + showGroups(); + return true; } rstime_t WireDialog::getFilterTimestamp() @@ -681,6 +682,7 @@ void WireDialog::PVHrate(const RsGxsId &authorId) void WireDialog::postTestTwitterView() { clearTwitterView(); + std::cerr << "WireDialog::postTestTwitterView()" << std::endl; addTwitterView(new PulseTopLevel(NULL,RsWirePulseSPtr())); addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); @@ -837,6 +839,7 @@ void WireDialog::requestPulseFocus(const RsGxsGroupId groupId, const RsGxsMessag void WireDialog::showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId) { clearTwitterView(); + std::cerr << "WireDialog::showPulseFocus()" << std::endl; // background thread for loading. RsThread::async([this, groupId, msgId]() @@ -866,6 +869,8 @@ void WireDialog::showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId void WireDialog::postPulseFocus(RsWirePulseSPtr pPulse) { clearTwitterView(); + std::cerr << "WireDialog::postPulseFocus()" << std::endl; + if (!pPulse) { std::cerr << "WireDialog::postPulseFocus() Invalid pulse"; @@ -938,7 +943,7 @@ void WireDialog::requestGroupFocus(const RsGxsGroupId groupId) void WireDialog::showGroupFocus(const RsGxsGroupId groupId) { clearTwitterView(); - + std::cerr << "WireDialog::showGroupFocus()" << std::endl; // background thread for loading. RsThread::async([this, groupId]() { @@ -1015,6 +1020,7 @@ void WireDialog::requestGroupsPulses(const std::list& groupIds) void WireDialog::showGroupsPulses(const std::list& groupIds) { clearTwitterView(); + std::cerr << "WireDialog::showGroupPulses()" << std::endl; // background thread for loading. RsThread::async([this, groupIds]() diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index a55369fc0..fcd33ad37 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -150,7 +150,7 @@ private: // Loading Data. void requestGroupData(); - bool loadGroupData(const uint32_t &token); + bool loadGroupData(const uint32_t &token); void acknowledgeGroup(const uint32_t &token, const uint32_t &userType); virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req) override;