From 8ab9adacef8ad40a84410fdd3b79593b6bffbe47 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 15:13:07 +0200 Subject: [PATCH 01/14] removed token queue from circles --- .../src/gui/Circles/CirclesDialog.cpp | 109 ++++++++++-------- .../src/gui/Circles/CirclesDialog.h | 8 +- 2 files changed, 66 insertions(+), 51 deletions(-) diff --git a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp index 41fd4e9f2..5c792c1d1 100644 --- a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp +++ b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp @@ -25,6 +25,7 @@ #include "gui/Circles/CirclesDialog.h" #include "gui/Circles/CreateCircleDialog.h" #include "gui/common/UIStateHelper.h" +#include "util/qtthreadsutils.h" #include #include @@ -72,9 +73,6 @@ CirclesDialog::CirclesDialog(QWidget *parent) connect(ui.treeWidget_membership, SIGNAL(itemSelectionChanged()), this, SLOT(circle_selected())); - /* Setup TokenQueue */ - mCircleQueue = new TokenQueue(rsGxsCircles->getTokenService(), this); - /* Set header resize modes and initial section sizes */ QHeaderView * membership_header = ui.treeWidget_membership->header () ; membership_header->resizeSection ( CIRCLEGROUP_CIRCLE_COL_GROUPNAME, 200 ); @@ -82,7 +80,6 @@ CirclesDialog::CirclesDialog(QWidget *parent) CirclesDialog::~CirclesDialog() { - delete mCircleQueue; } void CirclesDialog::todo() @@ -564,37 +561,59 @@ void CirclesDialog::requestGroupMeta() { mStateHelper->setLoading(CIRCLESDIALOG_GROUPMETA, true); - std::cerr << "CirclesDialog::requestGroupMeta()"; - std::cerr << std::endl; + RsThread::async([this]() + { + std::list circles; - mCircleQueue->cancelActiveRequestTokens(CIRCLESDIALOG_GROUPMETA); + if(!rsGxsCircles->getCirclesSummaries(circles)) + { + std::cerr << __PRETTY_FUNCTION__ << " failed to get circles summaries " << std::endl; + return; + } - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_GROUP_META; + RsQThreadUtils::postToObject( [this,circles]() + { + /* 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! + */ - uint32_t token; - mCircleQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, CIRCLESDIALOG_GROUPMETA); + loadGroupMeta(circles); + + }, this ); + }); +// std::cerr << "CirclesDialog::requestGroupMeta()"; +// std::cerr << std::endl; +// +// mCircleQueue->cancelActiveRequestTokens(CIRCLESDIALOG_GROUPMETA); +// +// RsTokReqOptions opts; +// opts.mReqType = GXS_REQUEST_TYPE_GROUP_META; +// +// uint32_t token; +// mCircleQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, CIRCLESDIALOG_GROUPMETA); } -void CirclesDialog::loadGroupMeta(const uint32_t &token) +void CirclesDialog::loadGroupMeta(const std::list& groupInfo) { mStateHelper->setLoading(CIRCLESDIALOG_GROUPMETA, false); - std::cerr << "CirclesDialog::loadGroupMeta()"; - std::cerr << std::endl; +// std::cerr << "CirclesDialog::loadGroupMeta()"; +// std::cerr << std::endl; ui.treeWidget_membership->clear(); - std::list groupInfo; - std::list::iterator vit; +// std::list groupInfo; +// std::list::iterator vit; - if (!rsGxsCircles->getGroupSummary(token,groupInfo)) - { - std::cerr << "CirclesDialog::loadGroupMeta() Error getting GroupMeta"; - std::cerr << std::endl; - mStateHelper->setActive(CIRCLESDIALOG_GROUPMETA, false); - return; - } +// if (!rsGxsCircles->getGroupSummary(token,groupInfo)) +// { +// std::cerr << "CirclesDialog::loadGroupMeta() Error getting GroupMeta"; +// std::cerr << std::endl; +// mStateHelper->setActive(CIRCLESDIALOG_GROUPMETA, false); +// return; +// } mStateHelper->setActive(CIRCLESDIALOG_GROUPMETA, true); @@ -615,7 +634,7 @@ void CirclesDialog::loadGroupMeta(const uint32_t &token) externalOtherCirclesItem->setText(0, tr("External Circles (Other)")); ui.treeWidget_membership->addTopLevelItem(externalOtherCirclesItem); - for(vit = groupInfo.begin(); vit != groupInfo.end(); ++vit) + for(auto vit = groupInfo.begin(); vit != groupInfo.end(); ++vit) { /* Add Widget, and request Pages */ std::cerr << "CirclesDialog::loadGroupMeta() GroupId: " << vit->mGroupId; @@ -648,24 +667,24 @@ void CirclesDialog::loadGroupMeta(const uint32_t &token) } } -void CirclesDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ - std::cerr << "CirclesDialog::loadRequest() UserType: " << req.mUserType; - std::cerr << std::endl; - - if (queue == mCircleQueue) - { - /* now switch on req */ - switch(req.mUserType) - { - case CIRCLESDIALOG_GROUPMETA: - loadGroupMeta(req.mToken); - break; - - default: - std::cerr << "CirclesDialog::loadRequest() ERROR: INVALID TYPE"; - std::cerr << std::endl; - break; - } - } -} +// void CirclesDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) +// { +// std::cerr << "CirclesDialog::loadRequest() UserType: " << req.mUserType; +// std::cerr << std::endl; +// +// if (queue == mCircleQueue) +// { +// /* now switch on req */ +// switch(req.mUserType) +// { +// case CIRCLESDIALOG_GROUPMETA: +// loadGroupMeta(req.mToken); +// break; +// +// default: +// std::cerr << "CirclesDialog::loadRequest() ERROR: INVALID TYPE"; +// std::cerr << std::endl; +// break; +// } +// } +// } diff --git a/retroshare-gui/src/gui/Circles/CirclesDialog.h b/retroshare-gui/src/gui/Circles/CirclesDialog.h index ac87f9f61..56011dc61 100644 --- a/retroshare-gui/src/gui/Circles/CirclesDialog.h +++ b/retroshare-gui/src/gui/Circles/CirclesDialog.h @@ -24,14 +24,13 @@ #define MRK_CIRCLE_DIALOG_H #include "gui/gxs/RsGxsUpdateBroadcastPage.h" -#include "util/TokenQueue.h" #include "ui_CirclesDialog.h" #define IMAGE_CIRCLES ":/icons/png/circles.png" class UIStateHelper; -class CirclesDialog : public MainPage, public TokenResponse +class CirclesDialog : public MainPage { Q_OBJECT @@ -43,8 +42,6 @@ public: virtual QString pageName() const { return tr("Circles") ; } //MainPage virtual QString helpText() const { return ""; } //MainPage - void loadRequest(const TokenQueue *queue, const TokenRequest &req); - protected: virtual void updateDisplay(bool complete); @@ -62,9 +59,8 @@ private: void reloadAll(); void requestGroupMeta(); - void loadGroupMeta(const uint32_t &token); + void loadGroupMeta(const std::list& groupInfo); - TokenQueue *mCircleQueue; UIStateHelper *mStateHelper; /* UI - from Designer */ From 1ced2ff7f98ac2bcca01c0e44abd8dcfd8474c1a Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 15:15:09 +0200 Subject: [PATCH 02/14] cleaned CirclesDialog.cpp --- .../src/gui/Circles/CirclesDialog.cpp | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp index 5c792c1d1..5b1473423 100644 --- a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp +++ b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp @@ -80,6 +80,7 @@ CirclesDialog::CirclesDialog(QWidget *parent) CirclesDialog::~CirclesDialog() { + delete mCircleQueue; } void CirclesDialog::todo() @@ -583,38 +584,14 @@ void CirclesDialog::requestGroupMeta() }, this ); }); -// std::cerr << "CirclesDialog::requestGroupMeta()"; -// std::cerr << std::endl; -// -// mCircleQueue->cancelActiveRequestTokens(CIRCLESDIALOG_GROUPMETA); -// -// RsTokReqOptions opts; -// opts.mReqType = GXS_REQUEST_TYPE_GROUP_META; -// -// uint32_t token; -// mCircleQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, CIRCLESDIALOG_GROUPMETA); } void CirclesDialog::loadGroupMeta(const std::list& groupInfo) { mStateHelper->setLoading(CIRCLESDIALOG_GROUPMETA, false); -// std::cerr << "CirclesDialog::loadGroupMeta()"; -// std::cerr << std::endl; - ui.treeWidget_membership->clear(); -// std::list groupInfo; -// std::list::iterator vit; - -// if (!rsGxsCircles->getGroupSummary(token,groupInfo)) -// { -// std::cerr << "CirclesDialog::loadGroupMeta() Error getting GroupMeta"; -// std::cerr << std::endl; -// mStateHelper->setActive(CIRCLESDIALOG_GROUPMETA, false); -// return; -// } - mStateHelper->setActive(CIRCLESDIALOG_GROUPMETA, true); /* add the top level item */ @@ -666,25 +643,3 @@ void CirclesDialog::loadGroupMeta(const std::list& groupInfo) } } } - -// void CirclesDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) -// { -// std::cerr << "CirclesDialog::loadRequest() UserType: " << req.mUserType; -// std::cerr << std::endl; -// -// if (queue == mCircleQueue) -// { -// /* now switch on req */ -// switch(req.mUserType) -// { -// case CIRCLESDIALOG_GROUPMETA: -// loadGroupMeta(req.mToken); -// break; -// -// default: -// std::cerr << "CirclesDialog::loadRequest() ERROR: INVALID TYPE"; -// std::cerr << std::endl; -// break; -// } -// } -// } From fd3a434e7116d51415b297a5b3b0e90545a22b22 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 15:15:48 +0200 Subject: [PATCH 03/14] removed token queue traces left in IdEdit and IdDetail dialogs --- retroshare-gui/src/gui/Identity/IdDetailsDialog.h | 1 - retroshare-gui/src/gui/Identity/IdEditDialog.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/retroshare-gui/src/gui/Identity/IdDetailsDialog.h b/retroshare-gui/src/gui/Identity/IdDetailsDialog.h index ba53b2bba..abefaf872 100644 --- a/retroshare-gui/src/gui/Identity/IdDetailsDialog.h +++ b/retroshare-gui/src/gui/Identity/IdDetailsDialog.h @@ -23,7 +23,6 @@ #include -#include "util/TokenQueue.h" #include namespace Ui { diff --git a/retroshare-gui/src/gui/Identity/IdEditDialog.h b/retroshare-gui/src/gui/Identity/IdEditDialog.h index e5482cad5..714a79256 100644 --- a/retroshare-gui/src/gui/Identity/IdEditDialog.h +++ b/retroshare-gui/src/gui/Identity/IdEditDialog.h @@ -23,7 +23,6 @@ #include -#include "util/TokenQueue.h" #include #include #include @@ -71,7 +70,6 @@ private: void updateIdType(bool pseudo); void loadExistingId(const RsGxsIdGroup& id_group); void setAvatar(const QPixmap &avatar); - void idCreated(uint32_t token); void loadRecognTags(); // extract details. From 6411d5507fcdaa5eebb891f1b5d74c22b87aec37 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 15:36:27 +0200 Subject: [PATCH 04/14] fixed compilation --- retroshare-gui/src/gui/Circles/CirclesDialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp index 5b1473423..a05ff2f20 100644 --- a/retroshare-gui/src/gui/Circles/CirclesDialog.cpp +++ b/retroshare-gui/src/gui/Circles/CirclesDialog.cpp @@ -80,7 +80,6 @@ CirclesDialog::CirclesDialog(QWidget *parent) CirclesDialog::~CirclesDialog() { - delete mCircleQueue; } void CirclesDialog::todo() From 819dc173e069cab41b5335d052863a25602adb7e Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 15:43:57 +0200 Subject: [PATCH 05/14] removed TokenQueue from GxsMessageFrameWidget --- .../gui/Posted/PostedListWidgetWithModel.cpp | 2 +- .../gui/Posted/PostedListWidgetWithModel.h | 2 +- .../src/gui/gxs/GxsMessageFrameWidget.cpp | 33 +------------------ .../src/gui/gxs/GxsMessageFrameWidget.h | 7 ++-- .../GxsChannelPostsWidgetWithModel.cpp | 2 +- .../GxsChannelPostsWidgetWithModel.h | 2 +- .../gui/gxsforums/GxsForumThreadWidget.cpp | 2 +- .../src/gui/gxsforums/GxsForumThreadWidget.h | 2 +- 8 files changed, 9 insertions(+), 43 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp index 7dcc767b8..7c55931fa 100644 --- a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp @@ -773,7 +773,7 @@ QIcon PostedListWidgetWithModel::groupIcon() return QIcon(postedImage); } -void PostedListWidgetWithModel::setAllMessagesReadDo(bool read, uint32_t &/*token*/) +void PostedListWidgetWithModel::setAllMessagesReadDo(bool read) { if (groupId().isNull() || !IS_GROUP_SUBSCRIBED(mGroup.mMeta.mSubscribeFlags)) return; diff --git a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.h b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.h index a38e0d036..a447424e8 100644 --- a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.h +++ b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.h @@ -130,7 +130,7 @@ protected: #endif /* GxsMessageFrameWidget */ - virtual void setAllMessagesReadDo(bool read, uint32_t &token) override; + virtual void setAllMessagesReadDo(bool read) override; private slots: #ifdef TO_REMOVE diff --git a/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.cpp b/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.cpp index 8d9a89a47..1f55f514f 100644 --- a/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.cpp @@ -28,7 +28,6 @@ GxsMessageFrameWidget::GxsMessageFrameWidget(RsGxsIfaceHelper *ifaceImpl, QWidge { mNextTokenType = 0; - mTokenQueue = new TokenQueue(ifaceImpl->getTokenService(), this); mStateHelper = new UIStateHelper(this); /* Set read status */ @@ -46,8 +45,6 @@ GxsMessageFrameWidget::~GxsMessageFrameWidget() emit waitingChanged(this); } - - delete(mTokenQueue); } const RsGxsGroupId &GxsMessageFrameWidget::groupId() @@ -95,34 +92,6 @@ void GxsMessageFrameWidget::setGroupId(const RsGxsGroupId &groupId) void GxsMessageFrameWidget::setAllMessagesRead(bool read) { - uint32_t token = 0; - setAllMessagesReadDo(read, token); - - if (token) { - /* Wait for acknowlegde of the token */ - mAcknowledgeReadStatusToken = token; - mTokenQueue->queueRequest(mAcknowledgeReadStatusToken, 0, 0, mTokenTypeAcknowledgeReadStatus); - mStateHelper->setLoading(mTokenTypeAcknowledgeReadStatus, true); - - emit waitingChanged(this); - } + setAllMessagesReadDo(read); } -void GxsMessageFrameWidget::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ - if (queue == mTokenQueue) - { - if (req.mUserType == mTokenTypeAcknowledgeReadStatus) { - if (mAcknowledgeReadStatusToken == req.mToken) { - /* Set read status is finished */ - mStateHelper->setLoading(mTokenTypeAcknowledgeReadStatus, false); - - emit waitingChanged(this); - } - return; - } - } - - std::cerr << "GxsMessageFrameWidget::loadRequest() ERROR: INVALID TYPE"; - std::cerr << std::endl; -} diff --git a/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.h b/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.h index 36c2f4f67..758088595 100644 --- a/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.h +++ b/retroshare-gui/src/gui/gxs/GxsMessageFrameWidget.h @@ -22,12 +22,11 @@ #define GXSMESSAGEFRAMEWIDGET_H #include "gui/gxs/RsGxsUpdateBroadcastWidget.h" -#include "util/TokenQueue.h" struct RsGxsIfaceHelper; class UIStateHelper; -class GxsMessageFrameWidget : public QWidget, public TokenResponse +class GxsMessageFrameWidget : public QWidget { Q_OBJECT @@ -49,7 +48,6 @@ public: /* GXS functions */ uint32_t nextTokenType() { return ++mNextTokenType; } - virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); signals: void groupChanged(QWidget *widget); @@ -58,10 +56,9 @@ signals: void groupDataLoaded(); protected: - virtual void setAllMessagesReadDo(bool read, uint32_t &token) = 0; + virtual void setAllMessagesReadDo(bool read) = 0; protected: - TokenQueue *mTokenQueue; UIStateHelper *mStateHelper; /* Set read status */ diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index d3c4070b0..129a6a1bf 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -1432,7 +1432,7 @@ public: uint32_t mLastToken; }; -void GxsChannelPostsWidgetWithModel::setAllMessagesReadDo(bool read, uint32_t& /*token*/) +void GxsChannelPostsWidgetWithModel::setAllMessagesReadDo(bool read) { if (groupId().isNull() || !IS_GROUP_SUBSCRIBED(mGroup.mMeta.mSubscribeFlags)) return; diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h index eaac53c0f..d37b83f22 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h @@ -137,7 +137,7 @@ protected: #endif /* GxsMessageFrameWidget */ - virtual void setAllMessagesReadDo(bool read, uint32_t &token) override; + virtual void setAllMessagesReadDo(bool read) override; private slots: void showPostDetails(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index e965dff4f..5ea514a54 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -1503,7 +1503,7 @@ void GxsForumThreadWidget::markMsgAsUnreadChildren() markMsgAsReadUnread(false, true, false); } -void GxsForumThreadWidget::setAllMessagesReadDo(bool read, uint32_t &/*token*/) +void GxsForumThreadWidget::setAllMessagesReadDo(bool read) { markMsgAsReadUnread(read, true, true); } diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index 6ca892e54..8e64c2b75 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -102,7 +102,7 @@ protected: virtual void updateDisplay(bool complete); /* GxsMessageFrameWidget */ - virtual void setAllMessagesReadDo(bool read, uint32_t &token); + virtual void setAllMessagesReadDo(bool read); void setMessageLoadingError(const QString& error); private slots: From 299ad1b1e1acafd480d2664d8a86bdb9a540caae Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 19:07:35 +0200 Subject: [PATCH 06/14] removed TokenQueue in CommentsTreeWidget for the display of comments --- .../src/gui/gxs/GxsCommentTreeWidget.cpp | 147 ++++++++++++++---- .../src/gui/gxs/GxsCommentTreeWidget.h | 6 +- 2 files changed, 125 insertions(+), 28 deletions(-) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index 343f88c91..f12c238bd 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -25,6 +25,7 @@ #include "gui/common/RSTreeWidgetItem.h" #include "gui/gxs/GxsCreateCommentDialog.h" #include "gui/gxs/GxsIdTreeWidgetItem.h" +#include "util/qtthreadsutils.h" #include #include @@ -540,14 +541,86 @@ void GxsCommentTreeWidget::service_requestComments(const RsGxsGroupId& group_id, ids_to_ask.push_back(std::make_pair(group_id,*it)); } - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; - opts.mOptions = RS_TOKREQOPT_MSG_THREAD | RS_TOKREQOPT_MSG_LATEST; + RsThread::async([this,group_id,msgIds]() + { + std::vector comments; - uint32_t token; - mTokenQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, ids_to_ask, GXSCOMMENTS_LOADTHREAD); + if(!mCommentService->getRelatedComments(group_id,msgIds,comments)) + { + std::cerr << __PRETTY_FUNCTION__ << " failed to get circles summaries " << std::endl; + return; + } + + RsQThreadUtils::postToObject( [this,comments]() + { + /* 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! + */ + + clearItems(); + + service_loadThread(comments); + + completeItems(); + + emit commentsLoaded(treeCount(this)); + + }, this ); + }); + // RsTokReqOptions opts; + // opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; + // opts.mOptions = RS_TOKREQOPT_MSG_THREAD | RS_TOKREQOPT_MSG_LATEST; + + // uint32_t token; + // mTokenQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, ids_to_ask, GXSCOMMENTS_LOADTHREAD); } +#ifdef TODO +void GxsCommentTreeWidget::async_msg_action(const CmtMethod &action) +{ + RsThread::async([this,action]() + { + // 1 - get message data from p3GxsForums + + std::set msgs_to_request ; + std::vector msgs; + + msgs_to_request.insert(mThreadId); + + if(!rsGxsForums->getForumContent(groupId(),msgs_to_request,msgs)) + { + std::cerr << __PRETTY_FUNCTION__ << " failed to retrieve forum message info for forum " << groupId() << " and thread " << mThreadId << std::endl; + return; + } + + if(msgs.size() != 1) + { + std::cerr << __PRETTY_FUNCTION__ << " more than 1 or no msgs selected in forum " << groupId() << std::endl; + return; + } + + // 2 - sort the messages into a proper hierarchy + + RsGxsForumMsg msg = msgs[0]; + + // 3 - update the model in the UI thread. + + RsQThreadUtils::postToObject( [msg,action,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 */ + + (this->*action)(msg); + + }, this ); + + }); +} +#endif + /* Generic Handling */ void GxsCommentTreeWidget::clearItems() @@ -673,7 +746,7 @@ void GxsCommentTreeWidget::addItem(RsGxsMessageId itemId, RsGxsMessageId parentI } } -int treeCount(QTreeWidget *tree, QTreeWidgetItem *parent = 0) +int GxsCommentTreeWidget::treeCount(QTreeWidget *tree, QTreeWidgetItem *parent) { int count = 0; if (parent == 0) @@ -694,16 +767,16 @@ int treeCount(QTreeWidget *tree, QTreeWidgetItem *parent = 0) } return count; } -void GxsCommentTreeWidget::loadThread(const uint32_t &token) -{ - clearItems(); - - service_loadThread(token); - - completeItems(); - - emit commentsLoaded(treeCount(this)); -} +// void GxsCommentTreeWidget::loadThread(const uint32_t &token) +// { +// clearItems(); +// +// service_loadThread(token); +// +// completeItems(); +// +// emit commentsLoaded(treeCount(this)); +// } void GxsCommentTreeWidget::acknowledgeComment(const uint32_t &token) { @@ -725,14 +798,10 @@ void GxsCommentTreeWidget::acknowledgeVote(const uint32_t &token) } } - -void GxsCommentTreeWidget::service_loadThread(const uint32_t &token) +void GxsCommentTreeWidget::service_loadThread(const std::vector& comments) { - std::cerr << "GxsCommentTreeWidget::service_loadThread() ERROR must be overloaded!"; - std::cerr << std::endl; - - std::vector comments; - mCommentService->getRelatedComments(token, comments); + std::cerr << "GxsCommentTreeWidget::service_loadThread() ERROR must be overloaded!"; + std::cerr << std::endl; // This is inconsistent since we cannot know here that all comments are for the same thread. However they are only // requested in requestComments() where a single MsgId is used. @@ -751,6 +820,32 @@ void GxsCommentTreeWidget::service_loadThread(const uint32_t &token) insertComments(comments); } + +// void GxsCommentTreeWidget::service_loadThread(const uint32_t &token) +// { +// std::cerr << "GxsCommentTreeWidget::service_loadThread() ERROR must be overloaded!"; +// std::cerr << std::endl; +// +// std::vector comments; +// mCommentService->getRelatedComments(token, comments); +// +// // This is inconsistent since we cannot know here that all comments are for the same thread. However they are only +// // requested in requestComments() where a single MsgId is used. +// +// if(mUseCache) +// { +// QMutexLocker lock(&mCacheMutex); +// +// if(!comments.empty()) +// { +// std::cerr << "Updating cache with " << comments.size() << " for thread " << comments[0].mMeta.mThreadId << std::endl; +// mCommentsCache[comments[0].mMeta.mThreadId] = comments; +// } +// } +// +// insertComments(comments); +// } + void GxsCommentTreeWidget::insertComments(const std::vector& comments) { std::list new_comments; @@ -886,9 +981,9 @@ void GxsCommentTreeWidget::loadRequest(const TokenQueue *queue, const TokenReque acknowledgeComment(req.mToken); } break; - case RS_TOKREQ_ANSTYPE_DATA: - loadThread(req.mToken); - break; +// case RS_TOKREQ_ANSTYPE_DATA: +// loadThread(req.mToken); +// break; } } break; diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h index c4840eb46..c750b1fcd 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h @@ -56,7 +56,7 @@ protected: /* to be overloaded */ virtual void service_requestComments(const RsGxsGroupId &group_id, const std::set &msgIds); - virtual void service_loadThread(const uint32_t &token); + virtual void service_loadThread(const std::vector& comments); virtual QTreeWidgetItem *service_createMissingItem(const RsGxsMessageId& parent); @@ -66,10 +66,12 @@ protected: void acknowledgeComment(const uint32_t& token); void acknowledgeVote(const uint32_t &token); - void loadThread(const uint32_t &token); + //void loadThread(const uint32_t &token); void insertComments(const std::vector& comments); void addItem(RsGxsMessageId itemId, RsGxsMessageId parentId, QTreeWidgetItem *item); + + static int treeCount(QTreeWidget *tree, QTreeWidgetItem *parent = 0); public slots: void customPopUpMenu(const QPoint& point); void setCurrentCommentMsgId(QTreeWidgetItem* current, QTreeWidgetItem* previous); From cf61cb3780f319215eca4aad8331612bd7203d10 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 22 Jun 2022 21:07:29 +0200 Subject: [PATCH 07/14] fixed bug introduced by last commit --- retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index f12c238bd..481ad0e81 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -530,24 +530,13 @@ void GxsCommentTreeWidget::service_requestComments(const RsGxsGroupId& group_id, std::cerr << "GxsCommentTreeWidget::service_requestComments for group " << group_id << std::endl; #endif - std::vector ids_to_ask; - - for(std::set::const_iterator it(msgIds.begin());it!=msgIds.end();++it) - { -#ifdef DEBUG_GXSCOMMENT_TREEWIDGET - std::cerr << " asking for msg " << *it << std::endl; -#endif - - ids_to_ask.push_back(std::make_pair(group_id,*it)); - } - RsThread::async([this,group_id,msgIds]() { std::vector comments; if(!mCommentService->getRelatedComments(group_id,msgIds,comments)) { - std::cerr << __PRETTY_FUNCTION__ << " failed to get circles summaries " << std::endl; + std::cerr << __PRETTY_FUNCTION__ << " failed to get comments" << std::endl; return; } From 54fd77822d6810936841c4d7b8e9f209703a07c6 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 30 Jun 2022 14:43:04 +0200 Subject: [PATCH 08/14] fixed blocking API for votes --- .../gui/Posted/PostedListWidgetWithModel.cpp | 7 ++- .../src/gui/gxs/GxsCommentTreeWidget.cpp | 49 +++++++------------ 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp index 7c55931fa..0db786c01 100644 --- a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp @@ -1204,7 +1204,12 @@ void PostedListWidgetWithModel::voteMsg(RsGxsGrpMsgIdPair msg,bool up_or_down) return; } - rsPosted->voteForPost(up_or_down,msg.first,msg.second,voter_id); + RsGxsVoteType tvote = up_or_down?(RsGxsVoteType::UP):(RsGxsVoteType::DOWN); + + std::string error_str; + RsGxsMessageId vote_id; + if(!rsPosted->voteForPost(msg.first,msg.second,voter_id,tvote,vote_id,error_str)) + QMessageBox::critical(nullptr,tr("Could not vote"), tr("Error occured while voting: ")+QString::fromStdString(error_str)); } #ifdef TODO diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index 481ad0e81..4d5fd4708 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -402,35 +403,27 @@ void GxsCommentTreeWidget::setVoteId(const RsGxsId &voterId) void GxsCommentTreeWidget::vote(const RsGxsGroupId &groupId, const RsGxsMessageId &threadId, const RsGxsMessageId &parentId, const RsGxsId &authorId, bool up) { - RsGxsVote vote; + RsThread::async([this,groupId,threadId,parentId,authorId,up]() + { + std::string error_string; + RsGxsMessageId vote_id; + RsGxsVoteType tvote = up?(RsGxsVoteType::UP):(RsGxsVoteType::DOWN); - vote.mMeta.mGroupId = groupId; - vote.mMeta.mThreadId = threadId; - vote.mMeta.mParentId = parentId; - vote.mMeta.mAuthorId = authorId; + bool res = mCommentService->voteForComment(groupId, threadId, parentId, authorId,tvote,vote_id, error_string); - if (up) - { - vote.mVoteType = GXS_VOTE_UP; - } - else - { - vote.mVoteType = GXS_VOTE_DOWN; - } + RsQThreadUtils::postToObject( [this,res,error_string]() + { -#ifdef DEBUG_GXSCOMMENT_TREEWIDGET - std::cerr << "GxsCommentTreeWidget::vote()"; - std::cerr << std::endl; + if(res) + service_requestComments(mGroupId,mMsgVersions); + else + QMessageBox::critical(nullptr,tr("Cannot vote"),tr("Error while voting: ")+QString::fromStdString(error_string)); + }); + }); - std::cerr << "GroupId : " << vote.mMeta.mGroupId << std::endl; - std::cerr << "ThreadId : " << vote.mMeta.mThreadId << std::endl; - std::cerr << "ParentId : " << vote.mMeta.mParentId << std::endl; - std::cerr << "AuthorId : " << vote.mMeta.mAuthorId << std::endl; -#endif - - uint32_t token; - mCommentService->createNewVote(token, vote); - mTokenQueue->queueRequest(token, TOKENREQ_MSGINFO, RS_TOKREQ_ANSTYPE_ACK, COMMENT_VOTE_ACK); + // uint32_t token; + // mCommentService->createNewVote(token, vote); + // mTokenQueue->queueRequest(token, TOKENREQ_MSGINFO, RS_TOKREQ_ANSTYPE_ACK, COMMENT_VOTE_ACK); } @@ -558,12 +551,6 @@ void GxsCommentTreeWidget::service_requestComments(const RsGxsGroupId& group_id, }, this ); }); - // RsTokReqOptions opts; - // opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; - // opts.mOptions = RS_TOKREQOPT_MSG_THREAD | RS_TOKREQOPT_MSG_LATEST; - - // uint32_t token; - // mTokenQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, ids_to_ask, GXSCOMMENTS_LOADTHREAD); } #ifdef TODO From cdc650540b5c7259fea5ad19d62747a0323f9388 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 4 Jul 2022 17:25:11 +0200 Subject: [PATCH 09/14] removed token queue from CreateCircleDialog --- .../src/gui/Circles/CreateCircleDialog.cpp | 234 ++++++++++-------- 1 file changed, 124 insertions(+), 110 deletions(-) diff --git a/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp b/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp index c5c58cb14..f878721c9 100644 --- a/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp +++ b/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp @@ -422,7 +422,7 @@ void CreateCircleDialog::createCircle() close() ; return ; } - + #ifdef DEBUG_CREATE_CIRCLE_DIALOG std::cerr << "CreateCircleDialog::createCircle()"; std::cerr << std::endl; @@ -431,10 +431,10 @@ void CreateCircleDialog::createCircle() QString name = ui.circleName->text(); if(name.isEmpty()) { - /* error message */ - QMessageBox::warning(this, tr("RetroShare"),tr("Please set a name for your Circle"), QMessageBox::Ok, QMessageBox::Ok); + /* error message */ + QMessageBox::warning(this, tr("RetroShare"),tr("Please set a name for your Circle"), QMessageBox::Ok, QMessageBox::Ok); - return; //Don't add a empty Subject!! + return; //Don't add a empty Subject!! } RsGxsCircleGroup circle = mCircleGroup; // init with loaded group @@ -448,23 +448,23 @@ void CreateCircleDialog::createCircle() { case GxsIdChooser::KnowId: case GxsIdChooser::UnKnowId: - circle.mMeta.mAuthorId = authorId; + circle.mMeta.mAuthorId = authorId; circle.mMeta.mAuthenFlags = GXS_SERV::GRP_OPTION_AUTHEN_AUTHOR_SIGN; #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() AuthorId: " << authorId; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() AuthorId: " << authorId; + std::cerr << std::endl; #endif - break; + break; case GxsIdChooser::NoId: case GxsIdChooser::None: circle.mMeta.mAuthorId.clear(); circle.mMeta.mAuthenFlags = 0; default: ; #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() No AuthorId Chosen!"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() No AuthorId Chosen!"; + std::cerr << std::endl; #endif } @@ -472,144 +472,163 @@ void CreateCircleDialog::createCircle() /* copy Ids from GUI */ QTreeWidget *tree = ui.treeWidget_membership; int count = tree->topLevelItemCount(); - for(int i = 0; i < count; ++i) + for(int i = 0; i < count; ++i) { - QTreeWidgetItem *item = tree->topLevelItem(i); - QString keyId = item->text(RSCIRCLEID_COL_KEYID); + QTreeWidgetItem *item = tree->topLevelItem(i); + QString keyId = item->text(RSCIRCLEID_COL_KEYID); - /* insert into circle */ - if (mIsExternalCircle) - { - RsGxsId key_id_gxs(keyId.toStdString()) ; + /* insert into circle */ + if (mIsExternalCircle) + { + RsGxsId key_id_gxs(keyId.toStdString()) ; - if(key_id_gxs.isNull()) - { - std::cerr << "Error: Not a proper keyID: " << keyId.toStdString() << std::endl; - continue ; - } + if(key_id_gxs.isNull()) + { + std::cerr << "Error: Not a proper keyID: " << keyId.toStdString() << std::endl; + continue ; + } - circle.mInvitedMembers.insert(key_id_gxs) ; + circle.mInvitedMembers.insert(key_id_gxs) ; #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() Inserting Member: " << keyId.toStdString(); - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() Inserting Member: " << keyId.toStdString(); + std::cerr << std::endl; #endif - } - else - { - RsPgpId key_id_pgp(keyId.toStdString()) ; + } + else + { + RsPgpId key_id_pgp(keyId.toStdString()) ; - if(key_id_pgp.isNull()) - { - std::cerr << "Error: Not a proper PGP keyID: " << keyId.toStdString() << std::endl; - continue ; - } + if(key_id_pgp.isNull()) + { + std::cerr << "Error: Not a proper PGP keyID: " << keyId.toStdString() << std::endl; + continue ; + } - circle.mLocalFriends.insert(key_id_pgp) ; + circle.mLocalFriends.insert(key_id_pgp) ; #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() Inserting Friend: " << keyId.toStdString(); - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() Inserting Friend: " << keyId.toStdString(); + std::cerr << std::endl; #endif - } + } } - if (mIsExternalCircle) + if (mIsExternalCircle) { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() External Circle"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() External Circle"; + std::cerr << std::endl; #endif - // set distribution from GUI. - circle.mMeta.mCircleId.clear() ; + // set distribution from GUI. + circle.mMeta.mCircleId.clear() ; circle.mMeta.mGroupFlags = GXS_SERV::FLAG_PRIVACY_PUBLIC; - if (ui.radioButton_Public->isChecked()) { + if (ui.radioButton_Public->isChecked()) { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() Public Circle"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() Public Circle"; + std::cerr << std::endl; #endif - circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_PUBLIC; + circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_PUBLIC; - } else if (ui.radioButton_Self->isChecked()) { + } else if (ui.radioButton_Self->isChecked()) { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() ExtSelfRef Circle"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() ExtSelfRef Circle"; + std::cerr << std::endl; #endif - circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXT_SELF; - } else if (ui.radioButton_Restricted->isChecked()) { + circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXT_SELF; + } else if (ui.radioButton_Restricted->isChecked()) { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() External (Other) Circle"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() External (Other) Circle"; + std::cerr << std::endl; #endif - circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXTERNAL; + circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXTERNAL; - /* grab circle ID from chooser */ - RsGxsCircleId chosenId; - if (ui.circleComboBox->getChosenCircle(chosenId)) { + /* grab circle ID from chooser */ + RsGxsCircleId chosenId; + if (ui.circleComboBox->getChosenCircle(chosenId)) { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() ChosenId: " << chosenId; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() ChosenId: " << chosenId; + std::cerr << std::endl; #endif - circle.mMeta.mCircleId = chosenId; - } else {//if (ui.circleComboBox->getChosenCircle(chosenId)) + circle.mMeta.mCircleId = chosenId; + } else {//if (ui.circleComboBox->getChosenCircle(chosenId)) #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() Error no Id Chosen"; - std::cerr << std::endl; + std::cerr << "CreateCircleDialog::createCircle() Error no Id Chosen"; + std::cerr << std::endl; #endif - QMessageBox::warning(this, tr("RetroShare"),tr("No Restriction Circle Selected"), QMessageBox::Ok, QMessageBox::Ok); - return; - }//else (ui.circleComboBox->getChosenCircle(chosenId)) - } - else - { - QMessageBox::warning(this, tr("RetroShare"),tr("No Circle Limitations Selected"), QMessageBox::Ok, QMessageBox::Ok); - return; - } - } - else - { -#ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() Personal Circle"; - std::cerr << std::endl; -#endif - - // set personal distribution - circle.mMeta.mCircleId.clear() ; - circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_LOCAL; - } - - uint32_t token; - - if(mIsExistingCircle) - { -#ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::updateCircle() : mCircleType: " << circle.mMeta.mCircleType << std::endl; - std::cerr << "CreateCircleDialog::updateCircle() : mCircleId: " << circle.mMeta.mCircleId << std::endl; - std::cerr << "CreateCircleDialog::updateCircle() : mGroupId: " << circle.mMeta.mGroupId << std::endl; - - std::cerr << "CreateCircleDialog::updateCircle() Checks and Balances Okay - calling service proper.."<< std::endl; -#endif - - rsGxsCircles->updateGroup(token, circle); + QMessageBox::warning(this, tr("RetroShare"),tr("No Restriction Circle Selected"), QMessageBox::Ok, QMessageBox::Ok); + return; + }//else (ui.circleComboBox->getChosenCircle(chosenId)) + } + else + { + QMessageBox::warning(this, tr("RetroShare"),tr("No Circle Limitations Selected"), QMessageBox::Ok, QMessageBox::Ok); + return; + } } else - { + { #ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::createCircle() : mCircleType: " << circle.mMeta.mCircleType << std::endl; - std::cerr << "CreateCircleDialog::createCircle() : mCircleId: " << circle.mMeta.mCircleId << std::endl; - - std::cerr << "CreateCircleDialog::createCircle() Checks and Balances Okay - calling service proper.."<< std::endl; + std::cerr << "CreateCircleDialog::createCircle() Personal Circle"; + std::cerr << std::endl; #endif - rsGxsCircles->createGroup(token, circle); + // set personal distribution + circle.mMeta.mCircleId.clear() ; + circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_LOCAL; } + + RsThread::async([&circle,this]() + { + RsGxsCircleId circleId; + + if(mIsExistingCircle) + { +#ifdef DEBUG_CREATE_CIRCLE_DIALOG + std::cerr << "CreateCircleDialog::updateCircle() : mCircleType: " << circle.mMeta.mCircleType << std::endl; + std::cerr << "CreateCircleDialog::updateCircle() : mCircleId: " << circle.mMeta.mCircleId << std::endl; + std::cerr << "CreateCircleDialog::updateCircle() : mGroupId: " << circle.mMeta.mGroupId << std::endl; + + std::cerr << "CreateCircleDialog::updateCircle() Checks and Balances Okay - calling service proper.."<< std::endl; +#endif + rsGxsCircles->editCircle(circle); + + circleId = RsGxsCircleId(circle.mMeta.mGroupId); + } + else + { +#ifdef DEBUG_CREATE_CIRCLE_DIALOG + std::cerr << "CreateCircleDialog::createCircle() : mCircleType: " << circle.mMeta.mCircleType << std::endl; + std::cerr << "CreateCircleDialog::createCircle() : mCircleId: " << circle.mMeta.mCircleId << std::endl; + + std::cerr << "CreateCircleDialog::createCircle() Checks and Balances Okay - calling service proper.."<< std::endl; +#endif + rsGxsCircles->createCircle(circle.mMeta.mGroupName, + static_cast(circle.mMeta.mCircleType), + circleId, + circle.mMeta.mCircleId, + circle.mMeta.mAuthorId, + circle.mInvitedMembers, + circle.mLocalFriends); + } + + RsQThreadUtils::postToObject( [this,circle,circleId]() + { + if(!mIsExistingCircle) + QMessageBox::information(nullptr,tr("Circle created"), + tr("Your new circle has been created:\n Name: %1\n Id: %2.") + .arg(QString::fromUtf8(circle.mMeta.mGroupName.c_str())) + .arg(QString::fromStdString(circleId.toStdString()))); + }); + }); + close(); } @@ -810,11 +829,6 @@ void CreateCircleDialog::loadIdentities() void CreateCircleDialog::fillIdentitiesList(const std::vector& id_groups) { -#ifdef DEBUG_CREATE_CIRCLE_DIALOG - std::cerr << "CreateCircleDialog::loadIdentities(" << token << ")"; - std::cerr << std::endl; -#endif - QTreeWidget *tree = ui.treeWidget_IdList; tree->clear(); From 73279db2c5e2347e972f3b8c7d96179be6e63d6f Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 6 Jul 2022 17:13:34 +0200 Subject: [PATCH 10/14] removed tokens from boards and added missing blocking API calls --- .../src/gui/Posted/PostedCreatePostDialog.cpp | 17 +++++++++-- .../src/gui/Posted/PostedDialog.cpp | 28 ------------------- retroshare-gui/src/gui/Posted/PostedItem.cpp | 20 +++++++------ 3 files changed, 26 insertions(+), 39 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedCreatePostDialog.cpp b/retroshare-gui/src/gui/Posted/PostedCreatePostDialog.cpp index ce22fa7f3..c1e0ce5ad 100644 --- a/retroshare-gui/src/gui/Posted/PostedCreatePostDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedCreatePostDialog.cpp @@ -28,6 +28,7 @@ #include "ui_PostedCreatePostDialog.h" #include "util/misc.h" +#include "util/qtthreadsutils.h" #include "util/RichTextEdit.h" #include "gui/feeds/SubFileItem.h" #include "util/rsdir.h" @@ -178,10 +179,20 @@ void PostedCreatePostDialog::createPost() return; } - uint32_t token; - mPosted->createPost(token, post); + RsThread::async([this,post]() + { + RsGxsMessageId post_id; - accept(); + bool res = rsPosted->createPost(post,post_id); + + RsQThreadUtils::postToObject( [res,this]() + { + if(!res) + QMessageBox::information(nullptr,tr("Error while creating post"),tr("An error occurred while creating the post.")); + + accept(); + }, this ); + }); } void PostedCreatePostDialog::fileHashingFinished(QList hashedFiles) diff --git a/retroshare-gui/src/gui/Posted/PostedDialog.cpp b/retroshare-gui/src/gui/Posted/PostedDialog.cpp index 33a9c5854..6d41767d2 100644 --- a/retroshare-gui/src/gui/Posted/PostedDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedDialog.cpp @@ -217,34 +217,6 @@ QWidget *PostedDialog::createCommentHeaderWidget(const RsGxsGroupId &grpId, cons return new PostedItem(NULL, 0, grpId, msgId, true, false); } -#ifdef TO_REMOVE -void PostedDialog::loadGroupSummaryToken(const uint32_t &token, std::list &groupInfo, RsUserdata *&userdata) -{ - std::vector groups; - rsPosted->getGroupData(token, groups); - - /* Save groups to fill description */ - PostedGroupInfoData *postedData = new PostedGroupInfoData; - userdata = postedData; - - std::vector::iterator groupIt; - for (groupIt = groups.begin(); groupIt != groups.end(); ++groupIt) { - RsPostedGroup &group = *groupIt; - groupInfo.push_back(group.mMeta); - - if (group.mGroupImage.mData != NULL) { - QPixmap image; - GxsIdDetails::loadPixmapFromData(group.mGroupImage.mData, group.mGroupImage.mSize, image,GxsIdDetails::ORIGINAL); - postedData->mIcon[group.mMeta.mGroupId] = image; - } - - if (!group.mDescription.empty()) { - postedData->mDescription[group.mMeta.mGroupId] = QString::fromUtf8(group.mDescription.c_str()); - } - } -} -#endif - void PostedDialog::groupInfoToGroupItemInfo(const RsGxsGenericGroupData *groupData, GroupItemInfo &groupItemInfo) { GxsGroupFrameDialog::groupInfoToGroupItemInfo(groupData, groupItemInfo); diff --git a/retroshare-gui/src/gui/Posted/PostedItem.cpp b/retroshare-gui/src/gui/Posted/PostedItem.cpp index d9242c571..dcb5c2c97 100644 --- a/retroshare-gui/src/gui/Posted/PostedItem.cpp +++ b/retroshare-gui/src/gui/Posted/PostedItem.cpp @@ -279,16 +279,20 @@ void BasePostedItem::loadComments() } void BasePostedItem::readToggled(bool checked) { - if (mInFill) { - return; - } + if (mInFill) { + return; + } - RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); + RsThread::async([this,checked]() + { + RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); + rsPosted->setPostReadStatus(msgPair, !checked); - uint32_t token; - rsPosted->setMessageReadStatus(token, msgPair, !checked); - - setReadStatus(false, checked); + RsQThreadUtils::postToObject( [checked,this]() + { + setReadStatus(false, checked); + }, this ); + }); } void BasePostedItem::readAndClearItem() From 1089d1470e28e483d74b2d8f2079eafe62b293e3 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 9 Jul 2022 15:49:33 +0200 Subject: [PATCH 11/14] update posts list after vote --- retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp index 0db786c01..1eae122fe 100644 --- a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp @@ -1190,8 +1190,7 @@ void PostedListWidgetWithModel::subscribeGroup(bool subscribe) RsThread::async([=]() { - uint32_t token; - rsPosted->subscribeToGroup(token,grpId, subscribe); + rsPosted->subscribeToBoard(grpId, subscribe); } ); } @@ -1210,6 +1209,8 @@ void PostedListWidgetWithModel::voteMsg(RsGxsGrpMsgIdPair msg,bool up_or_down) RsGxsMessageId vote_id; if(!rsPosted->voteForPost(msg.first,msg.second,voter_id,tvote,vote_id,error_str)) QMessageBox::critical(nullptr,tr("Could not vote"), tr("Error occured while voting: ")+QString::fromStdString(error_str)); + else + updateDisplay(true); } #ifdef TODO From ac4b9b297131df19a21f9489a5b9c2df2d5b49a6 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 9 Jul 2022 22:33:42 +0200 Subject: [PATCH 12/14] removed token system from GxsCommentDialog --- .../gui/Posted/PostedListWidgetWithModel.cpp | 2 +- .../src/gui/feeds/BoardsCommentsItem.cpp | 16 ++- .../src/gui/feeds/ChannelsCommentsItem.cpp | 2 +- .../src/gui/feeds/GxsChannelPostItem.cpp | 2 +- .../src/gui/feeds/GxsForumMsgItem.cpp | 19 +-- .../src/gui/gxs/GxsCommentContainer.cpp | 2 +- .../src/gui/gxs/GxsCommentDialog.cpp | 8 +- retroshare-gui/src/gui/gxs/GxsCommentDialog.h | 4 +- .../src/gui/gxs/GxsCommentTreeWidget.cpp | 123 +----------------- .../src/gui/gxs/GxsCommentTreeWidget.h | 13 +- .../src/gui/gxs/GxsGroupFrameDialog.cpp | 2 +- .../gui/gxschannels/GxsChannelPostsModel.cpp | 4 +- .../GxsChannelPostsWidgetWithModel.cpp | 4 +- 13 files changed, 42 insertions(+), 159 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp index 1eae122fe..9a46b65f0 100644 --- a/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/Posted/PostedListWidgetWithModel.cpp @@ -795,7 +795,7 @@ void PostedListWidgetWithModel::openComments(const RsGxsMessageId& msgId) ui->idChooser->getChosenId(current_author); RsPostedPost post = index.data(Qt::UserRole).value() ; - auto *commentDialog = new GxsCommentDialog(this,current_author,rsPosted->getTokenService(),rsPosted); + auto *commentDialog = new GxsCommentDialog(this,current_author,rsPosted); std::set msg_versions({post.mMeta.mMsgId}); commentDialog->commentLoad(post.mMeta.mGroupId, msg_versions, post.mMeta.mMsgId); diff --git a/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp b/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp index 814a915d9..02af1afc3 100644 --- a/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp +++ b/retroshare-gui/src/gui/feeds/BoardsCommentsItem.cpp @@ -28,6 +28,7 @@ #include "gui/feeds/FeedHolder.h" #include "gui/RetroShareLink.h" #include "gui/gxs/GxsIdDetails.h" +#include "util/qtthreadsutils.h" #include "util/DateTime.h" #include "util/misc.h" #include "util/stringutil.h" @@ -286,12 +287,15 @@ void BaseBoardsCommentsItem::readToggled(bool checked) return; } - RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); - - uint32_t token; - rsPosted->setMessageReadStatus(token, msgPair, !checked); - - setReadStatus(false, checked); + RsThread::async( [this,checked]() { + RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); + + rsPosted->setCommentReadStatus(msgPair, !checked); + + RsQThreadUtils::postToObject( [this,checked]() { + setReadStatus(false, checked); + } ); + }); } void BaseBoardsCommentsItem::readAndClearItem() diff --git a/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp b/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp index 7f1b23a92..296f3f173 100644 --- a/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp +++ b/retroshare-gui/src/gui/feeds/ChannelsCommentsItem.cpp @@ -617,7 +617,7 @@ void ChannelsCommentsItem::readToggled(bool /*checked*/) RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); - rsGxsChannels->markRead(msgPair, isUnread()); + rsGxsChannels->setCommentReadStatus(msgPair, isUnread()); //setReadStatus(false, checked); // Updated by events } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp index 962ee5327..102dfb637 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp @@ -850,7 +850,7 @@ void GxsChannelPostItem::readToggled(bool /*checked*/) RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); - rsGxsChannels->markRead(msgPair, isUnread()); + rsGxsChannels->setMessageReadStatus(msgPair, isUnread()); //setReadStatus(false, checked); // Updated by events } diff --git a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp index 5c33b4f13..8bf4899f1 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp @@ -475,18 +475,21 @@ void GxsForumMsgItem::unsubscribeForum() void GxsForumMsgItem::setAsRead() { - if (mInFill) { - return; - } + if (mInFill) { + return; + } - mCloseOnRead = false; + mCloseOnRead = false; - RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); + RsThread::async( [this]() { + RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); - uint32_t token; - rsGxsForums->setMessageReadStatus(token, msgPair, true); + rsGxsForums->markRead(msgPair, true); - setReadStatus(false, false); + RsQThreadUtils::postToObject( [this]() { + setReadStatus(false, true); + } ); + }); } void GxsForumMsgItem::on_linkActivated(QString link) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentContainer.cpp b/retroshare-gui/src/gui/gxs/GxsCommentContainer.cpp index b80539cea..5d899104e 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentContainer.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentContainer.cpp @@ -60,7 +60,7 @@ void GxsCommentContainer::commentLoad(const RsGxsGroupId &grpId, const std::set< comments += "..."; } - GxsCommentDialog *commentDialog = new GxsCommentDialog(this, RsGxsId(),getTokenService(), getCommentService()); + GxsCommentDialog *commentDialog = new GxsCommentDialog(this, RsGxsId(),getCommentService()); QWidget *commentHeader = createHeaderWidget(grpId, msgId); commentDialog->setCommentHeader(commentHeader); diff --git a/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp b/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp index b610f9dd3..80d7c9739 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp @@ -30,13 +30,13 @@ #include /** Constructor */ -GxsCommentDialog::GxsCommentDialog(QWidget *parent, const RsGxsId &default_author, RsTokenService *token_service, RsGxsCommentService *comment_service) +GxsCommentDialog::GxsCommentDialog(QWidget *parent, const RsGxsId &default_author, RsGxsCommentService *comment_service) : QWidget(parent), ui(new Ui::GxsCommentDialog) { /* Invoke the Qt Designer generated QObject setup routine */ ui->setupUi(this); - setTokenService(token_service,comment_service); + setTokenService(comment_service); init(default_author); } @@ -67,9 +67,9 @@ void GxsCommentDialog::init(const RsGxsId& default_author) ui->sortBox->setIconSize(QSize(S*1.5,S*1.5)); } -void GxsCommentDialog::setTokenService(RsTokenService *token_service, RsGxsCommentService *comment_service) +void GxsCommentDialog::setTokenService(RsGxsCommentService *comment_service) { - ui->treeWidget->setup(token_service, comment_service); + ui->treeWidget->setup(comment_service); } GxsCommentDialog::GxsCommentDialog(QWidget *parent,const RsGxsId &default_author) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentDialog.h b/retroshare-gui/src/gui/gxs/GxsCommentDialog.h index 4be6edede..ed3c048e6 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsCommentDialog.h @@ -33,10 +33,10 @@ class GxsCommentDialog: public QWidget public: GxsCommentDialog(QWidget *parent=nullptr,const RsGxsId& default_author=RsGxsId()); - GxsCommentDialog(QWidget *parent,const RsGxsId& default_author, RsTokenService *token_service, RsGxsCommentService *comment_service); + GxsCommentDialog(QWidget *parent, const RsGxsId& default_author, RsGxsCommentService *comment_service); virtual ~GxsCommentDialog(); - void setTokenService(RsTokenService *token_service, RsGxsCommentService *comment_service); + void setTokenService(RsGxsCommentService *comment_service); void setCommentHeader(QWidget *header); void commentLoad(const RsGxsGroupId &grpId, const std::set &msg_versions, const RsGxsMessageId &most_recent_msgId, bool use_cache=false); void commentClear(); diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index 4d5fd4708..0b65b7c3d 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -249,7 +249,7 @@ void GxsCommentTreeWidget::mouseMoveEvent(QMouseEvent *e) } GxsCommentTreeWidget::GxsCommentTreeWidget(QWidget *parent) - :QTreeWidget(parent), mTokenQueue(NULL), mRsTokenService(NULL), mCommentService(NULL) + :QTreeWidget(parent), mCommentService(NULL) { setVerticalScrollMode(ScrollPerPixel); setContextMenuPolicy(Qt::CustomContextMenu); @@ -299,9 +299,6 @@ void GxsCommentTreeWidget::updateContent() } GxsCommentTreeWidget::~GxsCommentTreeWidget() { - if (mTokenQueue) { - delete(mTokenQueue); - } } void GxsCommentTreeWidget::setCurrentCommentMsgId(QTreeWidgetItem *current, QTreeWidgetItem *previous) @@ -420,10 +417,6 @@ void GxsCommentTreeWidget::vote(const RsGxsGroupId &groupId, const RsGxsMessageI QMessageBox::critical(nullptr,tr("Cannot vote"),tr("Error while voting: ")+QString::fromStdString(error_string)); }); }); - - // uint32_t token; - // mCommentService->createNewVote(token, vote); - // mTokenQueue->queueRequest(token, TOKENREQ_MSGINFO, RS_TOKREQ_ANSTYPE_ACK, COMMENT_VOTE_ACK); } @@ -478,12 +471,10 @@ void GxsCommentTreeWidget::copyComment() clipboard->setMimeData(mimeData, QClipboard::Clipboard); } -void GxsCommentTreeWidget::setup(RsTokenService *token_service, RsGxsCommentService *comment_service) +void GxsCommentTreeWidget::setup(RsGxsCommentService *comment_service) { - mRsTokenService = token_service; mCommentService = comment_service; - mTokenQueue = new TokenQueue(token_service, this); - connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(customPopUpMenu(QPoint))); + connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(customPopUpMenu(QPoint))); connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(setCurrentCommentMsgId(QTreeWidgetItem*, QTreeWidgetItem*))); return; @@ -743,36 +734,6 @@ int GxsCommentTreeWidget::treeCount(QTreeWidget *tree, QTreeWidgetItem *parent) } return count; } -// void GxsCommentTreeWidget::loadThread(const uint32_t &token) -// { -// clearItems(); -// -// service_loadThread(token); -// -// completeItems(); -// -// emit commentsLoaded(treeCount(this)); -// } - -void GxsCommentTreeWidget::acknowledgeComment(const uint32_t &token) -{ - RsGxsGrpMsgIdPair msgId; - mCommentService->acknowledgeComment(token, msgId); - - // simply reload data - service_requestComments(mGroupId,mMsgVersions); -} - - -void GxsCommentTreeWidget::acknowledgeVote(const uint32_t &token) -{ - RsGxsGrpMsgIdPair msgId; - if (mCommentService->acknowledgeVote(token, msgId)) - { - // reload data if vote was added. - service_requestComments(mGroupId,mMsgVersions); - } -} void GxsCommentTreeWidget::service_loadThread(const std::vector& comments) { @@ -796,32 +757,6 @@ void GxsCommentTreeWidget::service_loadThread(const std::vector& c insertComments(comments); } - -// void GxsCommentTreeWidget::service_loadThread(const uint32_t &token) -// { -// std::cerr << "GxsCommentTreeWidget::service_loadThread() ERROR must be overloaded!"; -// std::cerr << std::endl; -// -// std::vector comments; -// mCommentService->getRelatedComments(token, comments); -// -// // This is inconsistent since we cannot know here that all comments are for the same thread. However they are only -// // requested in requestComments() where a single MsgId is used. -// -// if(mUseCache) -// { -// QMutexLocker lock(&mCacheMutex); -// -// if(!comments.empty()) -// { -// std::cerr << "Updating cache with " << comments.size() << " for thread " << comments[0].mMeta.mThreadId << std::endl; -// mCommentsCache[comments[0].mMeta.mThreadId] = comments; -// } -// } -// -// insertComments(comments); -// } - void GxsCommentTreeWidget::insertComments(const std::vector& comments) { std::list new_comments; @@ -892,10 +827,7 @@ void GxsCommentTreeWidget::insertComments(const std::vector& comme // now set all loaded comments as not new, since they have been loaded. for(auto cid:new_comments) - { - uint32_t token=0; - mCommentService->setCommentAsRead(token,mGroupId,cid); - } + mCommentService->setCommentReadStatus(RsGxsGrpMsgIdPair(mGroupId,cid),true); } QTreeWidgetItem *GxsCommentTreeWidget::service_createMissingItem(const RsGxsMessageId& parent) @@ -923,50 +855,3 @@ QTreeWidgetItem *GxsCommentTreeWidget::service_createMissingItem(const RsGxsMess return item; } - - -void GxsCommentTreeWidget::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ -#ifdef DEBUG_GXSCOMMENT_TREEWIDGET - std::cerr << "GxsCommentTreeWidget::loadRequest() UserType: " << req.mUserType; - std::cerr << std::endl; -#endif - - if (queue != mTokenQueue) - { - std::cerr << "GxsCommentTreeWidget::loadRequest() Queue ERROR"; - std::cerr << std::endl; - return; - } - - /* now switch on req */ - switch(req.mType) - { - - case TOKENREQ_MSGINFO: - { - switch(req.mAnsType) - { - case RS_TOKREQ_ANSTYPE_ACK: - if (req.mUserType == COMMENT_VOTE_ACK) - { - acknowledgeVote(req.mToken); - } - else - { - acknowledgeComment(req.mToken); - } - break; -// case RS_TOKREQ_ANSTYPE_DATA: -// loadThread(req.mToken); -// break; - } - } - break; - default: - std::cerr << "GxsCommentTreeWidget::loadRequest() UNKNOWN UserType "; - std::cerr << std::endl; - break; - - } -} diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h index c750b1fcd..43a6f55a5 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.h @@ -24,26 +24,24 @@ #include #include -#include "util/TokenQueue.h" #include #include class RSTreeWidgetItemCompareRole; -class GxsCommentTreeWidget : public QTreeWidget, public TokenResponse +class GxsCommentTreeWidget : public QTreeWidget { Q_OBJECT public: GxsCommentTreeWidget(QWidget *parent = 0); ~GxsCommentTreeWidget(); - void setup(RsTokenService *token_service, RsGxsCommentService *comment_service); + void setup(RsGxsCommentService *comment_service); void requestComments(const RsGxsGroupId& group, const std::set &message_versions, const RsGxsMessageId &most_recent_message); void getCurrentMsgId(RsGxsMessageId& parentId); void applyRankings(std::map& positions); - void loadRequest(const TokenQueue *queue, const TokenRequest &req); void setVoteId(const RsGxsId &voterId); void setUseCache(bool b) { mUseCache = b ;} @@ -63,11 +61,6 @@ protected: void clearItems(); void completeItems(); - void acknowledgeComment(const uint32_t& token); - void acknowledgeVote(const uint32_t &token); - - //void loadThread(const uint32_t &token); - void insertComments(const std::vector& comments); void addItem(RsGxsMessageId itemId, RsGxsMessageId parentId, QTreeWidgetItem *item); @@ -114,8 +107,6 @@ protected: RSTreeWidgetItemCompareRole *commentsRole; - TokenQueue *mTokenQueue; - RsTokenService *mRsTokenService; RsGxsCommentService *mCommentService; bool mUseCache; diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp index 425b87faf..283d1f48f 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp @@ -724,7 +724,7 @@ void GxsGroupFrameDialog::loadComment(const RsGxsGroupId &grpId, const QVectorgetTokenService(), commentService); + commentDialog = new GxsCommentDialog(this,RsGxsId(), commentService); QWidget *commentHeader = createCommentHeaderWidget(grpId, most_recent_msgId); if (commentHeader) { diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp index 31eef8242..06b671532 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp @@ -798,7 +798,7 @@ void RsGxsChannelPostsModel::setAllMsgReadStatus(bool read_status) for(uint32_t i=0;imarkRead(p,read_status)) + if(!rsGxsChannels->setMessageReadStatus(p,read_status)) RsErr() << "setAllMsgReadStatus: failed to change status of msg " << p.first << " in group " << p.second << " to status " << read_status << std::endl; }); } @@ -816,7 +816,7 @@ void RsGxsChannelPostsModel::setMsgReadStatus(const QModelIndex& i,bool read_sta if(!convertRefPointerToTabEntry(ref,entry) || entry >= mFilteredPosts.size()) return ; - rsGxsChannels->markRead(RsGxsGrpMsgIdPair(mPosts[mFilteredPosts[entry]].mMeta.mGroupId,mPosts[mFilteredPosts[entry]].mMeta.mMsgId),read_status); + rsGxsChannels->setMessageReadStatus(RsGxsGrpMsgIdPair(mPosts[mFilteredPosts[entry]].mMeta.mGroupId,mPosts[mFilteredPosts[entry]].mMeta.mMsgId),read_status); } QModelIndex RsGxsChannelPostsModel::getIndexOfMessage(const RsGxsMessageId& mid) const diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index 129a6a1bf..9fe8e830e 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -487,7 +487,7 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI setAutoDownload(false); #endif - ui->commentsDialog->setTokenService(rsGxsChannels->getTokenService(),rsGxsChannels); + ui->commentsDialog->setTokenService(rsGxsChannels); /* Initialize GUI */ settingsChanged(); @@ -852,7 +852,7 @@ void GxsChannelPostsWidgetWithModel::showPostDetails() postId.second = post.mMeta.mMsgId; postId.first = post.mMeta.mGroupId; - RsThread::async([postId]() { rsGxsChannels->markRead(postId, true) ; } ); + RsThread::async([postId]() { rsGxsChannels->setMessageReadStatus(postId, true) ; } ); } updateDAll_PB(); From 0488293a1f340bf8fc7b8d478fb9bcd28e1e9bad Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 10 Jul 2022 21:34:24 +0200 Subject: [PATCH 13/14] removed more token queue system from forums and comments --- .../src/gui/gxs/GxsCommentDialog.cpp | 4 +- retroshare-gui/src/gui/gxs/GxsCommentDialog.h | 2 +- .../src/gui/gxs/GxsCreateCommentDialog.h | 1 - retroshare-gui/src/gui/gxs/GxsFeedItem.h | 5 - .../GxsChannelPostsWidgetWithModel.cpp | 2 +- .../src/gui/gxsforums/CreateGxsForumMsg.cpp | 330 +++++++----------- .../src/gui/gxsforums/CreateGxsForumMsg.h | 14 +- 7 files changed, 129 insertions(+), 229 deletions(-) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp b/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp index 80d7c9739..7b9e28131 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentDialog.cpp @@ -36,7 +36,7 @@ GxsCommentDialog::GxsCommentDialog(QWidget *parent, const RsGxsId &default_autho /* Invoke the Qt Designer generated QObject setup routine */ ui->setupUi(this); - setTokenService(comment_service); + setGxsService(comment_service); init(default_author); } @@ -67,7 +67,7 @@ void GxsCommentDialog::init(const RsGxsId& default_author) ui->sortBox->setIconSize(QSize(S*1.5,S*1.5)); } -void GxsCommentDialog::setTokenService(RsGxsCommentService *comment_service) +void GxsCommentDialog::setGxsService(RsGxsCommentService *comment_service) { ui->treeWidget->setup(comment_service); } diff --git a/retroshare-gui/src/gui/gxs/GxsCommentDialog.h b/retroshare-gui/src/gui/gxs/GxsCommentDialog.h index ed3c048e6..6a3eee16c 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsCommentDialog.h @@ -36,7 +36,7 @@ public: GxsCommentDialog(QWidget *parent, const RsGxsId& default_author, RsGxsCommentService *comment_service); virtual ~GxsCommentDialog(); - void setTokenService(RsGxsCommentService *comment_service); + void setGxsService(RsGxsCommentService *comment_service); void setCommentHeader(QWidget *header); void commentLoad(const RsGxsGroupId &grpId, const std::set &msg_versions, const RsGxsMessageId &most_recent_msgId, bool use_cache=false); void commentClear(); diff --git a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.h b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.h index 1f38e2a98..4a21c6457 100644 --- a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.h @@ -25,7 +25,6 @@ #include #include "retroshare/rsgxscommon.h" -#include "util/TokenQueue.h" namespace Ui { class GxsCreateCommentDialog; diff --git a/retroshare-gui/src/gui/gxs/GxsFeedItem.h b/retroshare-gui/src/gui/gxs/GxsFeedItem.h index c7c16ea79..bc75d1837 100644 --- a/retroshare-gui/src/gui/gxs/GxsFeedItem.h +++ b/retroshare-gui/src/gui/gxs/GxsFeedItem.h @@ -52,11 +52,6 @@ protected: //virtual bool isLoading(); //virtual void fillDisplay(RsGxsUpdateBroadcastBase *updateBroadcastBase, bool complete); -#ifdef TO_REMOVE - /* TokenResponse */ - virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); -#endif - protected slots: void comments(const QString &title); void copyMessageLink(); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index 9fe8e830e..2a2d12046 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -487,7 +487,7 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI setAutoDownload(false); #endif - ui->commentsDialog->setTokenService(rsGxsChannels); + ui->commentsDialog->setGxsService(rsGxsChannels); /* Initialize GUI */ settingsChanged(); diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp index ffbcb2493..26e2ab608 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp @@ -39,6 +39,7 @@ #include "util/HandleRichText.h" #include "util/misc.h" +#include "util/qtthreadsutils.h" #include #include @@ -60,10 +61,6 @@ CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessage setAttribute(Qt::WA_DeleteOnClose, true); - /* Setup Queue */ - mForumQueue = new TokenQueue(rsGxsForums->getTokenService(), this); - mCirclesQueue = new TokenQueue(rsGxsCircles->getTokenService(), this); - /* Setup UI helper */ mStateHelper = new UIStateHelper(this); mStateHelper->addWidget(CREATEGXSFORUMMSG_FORUMINFO, ui.postButton); @@ -133,8 +130,6 @@ CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessage CreateGxsForumMsg::~CreateGxsForumMsg() { processSettings(false); - delete(mForumQueue); - delete(mCirclesQueue); } void CreateGxsForumMsg::processSettings(bool load) @@ -194,59 +189,109 @@ void CreateGxsForumMsg::newMsg() return; } - {/* request Data */ mStateHelper->setLoading(CREATEGXSFORUMMSG_FORUMINFO, true); - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_GROUP_META; + RsThread::async( [this]() + { + // We only need group Meta information, but forums do not provide it currently - std::list groupIds; - groupIds.push_back(mForumId); + std::vector forums_info; + rsGxsForums->getForumsInfo(std::list{ mForumId },forums_info); - //std::cerr << "ForumsV2Dialog::newMsg() Requesting Group Summary(" << mForumId << ")"<< std::endl; - uint32_t token; - mForumQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, groupIds, CREATEGXSFORUMMSG_FORUMINFO); - }/* request Data */ + RsQThreadUtils::postToObject( [this,forums_info]() + { + if(forums_info.size() != 1) + { + RsErr() << "Cannot retrieve group information for forum " << mForumId ; + mStateHelper->setActive(CREATEGXSFORUMMSG_FORUMINFO, false); + mStateHelper->setLoading(CREATEGXSFORUMMSG_FORUMINFO, false); + return; + } + auto fg(forums_info.front()); - if (mParentId.isNull()) { + const RsGroupMetaData& fi(fg.mMeta); + mForumMetaLoaded = true; + mForumMeta = fi; + + if(!fi.mCircleId.isNull()) + loadCircleInfo(RsGxsGroupId(fi.mCircleId)); + + loadFormInformation(); + + mStateHelper->setActive(CREATEGXSFORUMMSG_FORUMINFO, false); + mStateHelper->setLoading(CREATEGXSFORUMMSG_FORUMINFO, false); + + },this); + }); + + if (mParentId.isNull()) + { mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, true); mParentMsgLoaded = true; - } else { + } + else + { mStateHelper->setLoading(CREATEGXSFORUMMSG_PARENTMSG, true); - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; + RsThread::async( [this]() { - GxsMsgReq msgIds; - std::set &vect = msgIds[mForumId]; - vect.insert(mParentId); + std::vector parent_msgs; + rsGxsForums->getForumContent(mForumId,std::set{ mParentId },parent_msgs); - //std::cerr << "ForumsV2Dialog::newMsg() Requesting Parent Summary(" << mParentId << ")"; - //std::cerr << std::endl; + RsQThreadUtils::postToObject( [this,parent_msgs]() { + if(parent_msgs.size() != 1) + { + RsErr() << "Cannot get parent message from forum." ; - uint32_t token; - mForumQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, CREATEGXSFORUMMSG_PARENTMSG); - } + mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, false); + mStateHelper->setLoading(CREATEGXSFORUMMSG_PARENTMSG, false); - if (mOrigMsgId.isNull()) { + return ; + } + + mParentMsg = parent_msgs.front(); + mParentMsgLoaded = true; + + loadFormInformation(); + + },this); + }); + } + + if (mOrigMsgId.isNull()) + { mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, true); mOrigMsgLoaded = true; - } else { - mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, true); + } + else + { + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG , true); - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; + RsThread::async( [this]() { - GxsMsgReq msgIds; - std::set &vect = msgIds[mForumId]; - vect.insert(mOrigMsgId); + std::vector orig_msgs; + rsGxsForums->getForumContent(mForumId,std::set{ mOrigMsgId },orig_msgs); - //std::cerr << "ForumsV2Dialog::newMsg() Requesting Parent Summary(" << mParentId << ")"; - //std::cerr << std::endl; + RsQThreadUtils::postToObject( [this,orig_msgs]() { + if(orig_msgs.size() != 1) + { + RsErr() << "Cannot get parent message from forum." ; + + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, false); + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, false); + + return ; + } + + mOrigMsg = orig_msgs.front(); + mOrigMsgLoaded = true; + + loadFormInformation(); + + },this); + }); - uint32_t token; - mForumQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, CREATEGXSFORUMMSG_ORIGMSG); } } @@ -330,7 +375,7 @@ void CreateGxsForumMsg::loadFormInformation() else if (!mParentId.isNull()) { QString title = QString::fromUtf8(mParentMsg.mMeta.mMsgName.c_str()); - name += " " + tr("In Reply to") + ": "; + name += " - " + tr("In Reply to") + ": "; name += title; QString text = title; @@ -583,181 +628,52 @@ void CreateGxsForumMsg::fileHashingFinished(QList hashedFiles) ui.hashGroupBox->hide(); } -void CreateGxsForumMsg::loadForumInfo(const uint32_t &token) -{ - //std::cerr << "CreateGxsForumMsg::loadForumInfo()"; - //std::cerr << std::endl; - - std::list groupInfo; - rsGxsForums->getGroupSummary(token, groupInfo); - - if (groupInfo.size() == 1) - { - RsGroupMetaData fi = groupInfo.front(); - - mForumMeta = fi; - mForumMetaLoaded = true; - - if(!fi.mCircleId.isNull()) - { - //std::cerr << "Circle ID is not null: " << fi.mCircleId << ": loading circle info to add constraint to the GXS ID chooser." << std::endl; - - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; - - std::list groupIds; - groupIds.push_back(RsGxsGroupId(fi.mCircleId)); - uint32_t _token; - - mCirclesQueue->requestGroupInfo(_token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds, CREATEGXSFORUMMSG_CIRCLENFO); - } - - loadFormInformation(); - } - else - { - std::cerr << "CreateGxsForumMsg::loadForumInfo() ERROR INVALID Number of Forums"; - std::cerr << std::endl; - - mStateHelper->setActive(CREATEGXSFORUMMSG_FORUMINFO, false); - mStateHelper->setLoading(CREATEGXSFORUMMSG_FORUMINFO, false); - } -} -void CreateGxsForumMsg::loadForumCircleInfo(const uint32_t& token) +void CreateGxsForumMsg::loadCircleInfo(const RsGxsGroupId& circle_id) { //std::cerr << "Loading forum circle info" << std::endl; - std::vector circle_grp_v ; - rsGxsCircles->getGroupData(token, circle_grp_v); - - if (circle_grp_v.empty()) + RsThread::async( [circle_id,this]() { - std::cerr << "(EE) unexpected empty result from getGroupData. Cannot process circle now!" << std::endl; - return ; - } - - if (circle_grp_v.size() != 1) - { - std::cerr << "(EE) very weird result from getGroupData. Should get exactly one circle" << std::endl; - return ; - } - - RsGxsCircleGroup cg = circle_grp_v.front(); + std::vector circle_grp_v ; + rsGxsCircles->getCirclesInfo(std::list{ circle_id }, circle_grp_v); - mForumCircleData = cg; - mForumCircleLoaded = true; - - //std::cerr << "Loaded content of circle " << cg.mMeta.mGroupId << std::endl; - - //for(std::set::const_iterator it(cg.mInvitedMembers.begin());it!=cg.mInvitedMembers.end();++it) - // std::cerr << " added constraint to circle element " << *it << std::endl; - - ui.idChooser->setIdConstraintSet(cg.mInvitedMembers) ; - ui.idChooser->setFlags(IDCHOOSER_NO_CREATE | ui.idChooser->flags()) ; // since there's a circle involved, no ID creation can be needed - - RsGxsId tmpid ; - if(ui.idChooser->countEnabledEntries() == 0) - { - QMessageBox::information(NULL,tr("No compatible ID for this forum"),tr("None of your identities is allowed to post in this forum. This could be due to the forum being limited to a circle that contains none of your identities, or forum flags requiring a PGP-signed identity.")) ; - close() ; - } -} - -void CreateGxsForumMsg::loadOrigMsg(const uint32_t &token) -{ - //std::cerr << "CreateGxsForumMsg::loadParentMsg()"; - //std::cerr << std::endl; - - // Only grab one.... ignore more (shouldn't be any). - std::vector msgs; - if (rsGxsForums->getMsgData(token, msgs)) - { - if (msgs.size() != 1) - { - /* error */ - std::cerr << "CreateGxsForumMsg::loadOrigMsg() ERROR wrong number of msgs"; - std::cerr << std::endl; - - mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, false); - mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, false); - - return; - } - - mOrigMsg = msgs[0]; - mOrigMsgLoaded = true; - - loadFormInformation(); - } -} - - -void CreateGxsForumMsg::loadParentMsg(const uint32_t &token) -{ - //std::cerr << "CreateGxsForumMsg::loadParentMsg()"; - //std::cerr << std::endl; - - // Only grab one.... ignore more (shouldn't be any). - std::vector msgs; - if (rsGxsForums->getMsgData(token, msgs)) - { - if (msgs.size() != 1) - { - /* error */ - std::cerr << "CreateGxsForumMsg::loadParentMsg() ERROR wrong number of msgs"; - std::cerr << std::endl; - - mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, false); - mStateHelper->setLoading(CREATEGXSFORUMMSG_PARENTMSG, false); - - return; - } - - mParentMsg = msgs[0]; - mParentMsgLoaded = true; - - loadFormInformation(); - } -} - -void CreateGxsForumMsg::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ - //std::cerr << "CreateGxsForum::loadRequest() UserType: " << req.mUserType; - //std::cerr << std::endl; - - if (queue == mForumQueue) - { - /* now switch on req */ - switch(req.mUserType) - { - case CREATEGXSFORUMMSG_FORUMINFO: - loadForumInfo(req.mToken); - break; - case CREATEGXSFORUMMSG_ORIGMSG: - loadOrigMsg(req.mToken); - break; - case CREATEGXSFORUMMSG_PARENTMSG: - loadParentMsg(req.mToken); - break; - default: - std::cerr << "CreateGxsForumMsg::loadRequest() UNKNOWN UserType " << req.mUserType << " for token request in mForumQueue"; - std::cerr << std::endl; - } - } - - if(queue == mCirclesQueue) + if (circle_grp_v.empty()) { - switch(req.mUserType) - { - case CREATEGXSFORUMMSG_CIRCLENFO: - loadForumCircleInfo(req.mToken) ; - break ; - default: - std::cerr << "CreateGxsForumMsg::loadRequest() UNKNOWN UserType " << req.mUserType << " for token request in mCirclesQueue"; - std::cerr << std::endl; - } + std::cerr << "(EE) unexpected empty result from getGroupData. Cannot process circle now!" << std::endl; + return ; } + + if (circle_grp_v.size() != 1) + { + std::cerr << "(EE) very weird result from getGroupData. Should get exactly one circle" << std::endl; + return ; + } + + RsGxsCircleGroup cg = circle_grp_v.front(); + + RsQThreadUtils::postToObject( [cg,this]() + { + mForumCircleData = cg; + mForumCircleLoaded = true; + + //std::cerr << "Loaded content of circle " << cg.mMeta.mGroupId << std::endl; + + //for(std::set::const_iterator it(cg.mInvitedMembers.begin());it!=cg.mInvitedMembers.end();++it) + // std::cerr << " added constraint to circle element " << *it << std::endl; + + ui.idChooser->setIdConstraintSet(cg.mInvitedMembers) ; + ui.idChooser->setFlags(IDCHOOSER_NO_CREATE | ui.idChooser->flags()) ; // since there's a circle involved, no ID creation can be needed + + RsGxsId tmpid ; + if(ui.idChooser->countEnabledEntries() == 0) + { + QMessageBox::information(NULL,tr("No compatible ID for this forum"),tr("None of your identities is allowed to post in this forum. This could be due to the forum being limited to a circle that contains none of your identities, or forum flags requiring a PGP-signed identity.")) ; + close() ; + } + }, this); + }); } + void CreateGxsForumMsg::setSubject(const QString& msg) { ui.forumSubject->setText(msg); diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h index 0bb2b22b2..c542e881d 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h @@ -23,14 +23,12 @@ #include "ui_CreateGxsForumMsg.h" -#include "util/TokenQueue.h" - #include #include class UIStateHelper; -class CreateGxsForumMsg : public QDialog, public TokenResponse +class CreateGxsForumMsg : public QDialog { Q_OBJECT @@ -39,7 +37,6 @@ public: ~CreateGxsForumMsg(); void newMsg(); /* cleanup */ - virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); void insertPastedText(const QString& msg) ; void setSubject(const QString& msg); @@ -58,15 +55,11 @@ private slots: protected: void closeEvent (QCloseEvent * event); + void loadCircleInfo(const RsGxsGroupId& circle_id); private: void processSettings(bool load); void loadFormInformation(); - void loadForumInfo(const uint32_t &token); - void loadParentMsg(const uint32_t &token); - void loadOrigMsg(const uint32_t &token); - void loadForumCircleInfo(const uint32_t &token); - RsGxsGroupId mForumId; RsGxsCircleId mCircleId ; RsGxsMessageId mParentId; @@ -84,9 +77,6 @@ private: RsGroupMetaData mForumMeta; RsGxsCircleGroup mForumCircleData ; - TokenQueue *mForumQueue; - TokenQueue *mCirclesQueue; - UIStateHelper *mStateHelper; /** Qt Designer generated object */ From a1c33bf1723a80acbd63ab0fe5fc79b1eece7d8f Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 11 Jul 2022 23:15:09 +0200 Subject: [PATCH 14/14] removed unused include --- libbitdht | 2 +- libretroshare | 2 +- retroshare-gui/src/gui/gxs/GxsUserNotify.h | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libbitdht b/libbitdht index 6abbec950..659423769 160000 --- a/libbitdht +++ b/libbitdht @@ -1 +1 @@ -Subproject commit 6abbec95073f3c1eb5059cbf8441111ef4a317a7 +Subproject commit 659423769541169457c41f71c8a038e2d64ba079 diff --git a/libretroshare b/libretroshare index 72f8b7e8e..86745109f 160000 --- a/libretroshare +++ b/libretroshare @@ -1 +1 @@ -Subproject commit 72f8b7e8e240923731a141c6f2a0438588f04f59 +Subproject commit 86745109f35dddbf9de9ff84537a1c97fa1d30b3 diff --git a/retroshare-gui/src/gui/gxs/GxsUserNotify.h b/retroshare-gui/src/gui/gxs/GxsUserNotify.h index f9c5cd616..cfbec97be 100644 --- a/retroshare-gui/src/gui/gxs/GxsUserNotify.h +++ b/retroshare-gui/src/gui/gxs/GxsUserNotify.h @@ -24,9 +24,8 @@ #include #include "gui/common/UserNotify.h" #include "gui/gxs/GxsGroupFrameDialog.h" -#include "util/TokenQueue.h" -struct RsGxsIfaceHelper; +class RsGxsIfaceHelper; class RsGxsUpdateBroadcastBase; class GxsUserNotify : public UserNotify