From e309dd6fed323c716cccfeca832f656aadbd6a07 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 11 Oct 2015 10:00:11 -0400 Subject: [PATCH] fixed banning users from forum threads --- libretroshare/src/retroshare/rsidentity.h | 1 + .../gui/gxsforums/GxsForumThreadWidget.cpp | 65 ++++++++++++++++--- .../src/gui/gxsforums/GxsForumThreadWidget.h | 2 + 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index 66957ee92..b7e9856c1 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -177,6 +177,7 @@ public: // reputation details. GxsReputation mReputation; + bool mBanned ; // avatar RsGxsImage mAvatar ; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index f1a7d6204..a542fa87f 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -733,6 +733,9 @@ void GxsForumThreadWidget::insertGroupData() case GXS_ID_DETAILS_TYPE_LOADING: author = GxsIdDetails::getLoadingText(details.mId); break; + case GXS_ID_DETAILS_TYPE_BANNED: + author = tr("[Banned]") ; + break ; case GXS_ID_DETAILS_TYPE_DONE: author = GxsIdDetails::getName(details); break; @@ -1715,19 +1718,30 @@ static QString buildReplyHeader(const RsMsgMetaData &meta) void GxsForumThreadWidget::flagpersonasbad() { // no need to use the token system for that, since we just need to find out the author's name, which is in the item. + + if (groupId().isNull() || mThreadId.isNull()) { + QMessageBox::information(this, tr("RetroShare"),tr("You cant reply to a non-existant Message")); + return; + } - QTreeWidgetItem *item = ui->threadTreeWidget->currentItem(); + // Get Message ... then complete replyMessageData(). + RsGxsGrpMsgIdPair postId = std::make_pair(groupId(), mThreadId); + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; - std::cerr << "Author string: \"" << item->data(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR).toString().toStdString()<< std::endl; - std::cerr << "Messagestring: \"" << item->data(COLUMN_THREAD_DATA, ROLE_THREAD_MSGID).toString().toStdString()<< std::endl; - std::cerr << "Messagestring: \"" << item->data(COLUMN_THREAD_DATA, ROLE_THREAD_STATUS).toString().toStdString()<< std::endl; - RsGxsId gxsId(item->data(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR).toString().toStdString()); +#ifdef DEBUG_FORUMS + std::cerr << "GxsForumThreadWidget::requestMsgData_BanAuthor(" << postId.first << "," << postId.second << ")"; + std::cerr << std::endl; +#endif - // Get Message ... then complete replyMessageData(). - std::cerr << "GxsForumThreadWidget::flagpersonasbad(): setting opinion for peer " << gxsId << " to " << RsReputations::OPINION_NEGATIVE << std::endl; - rsReputations->setOwnOpinion(gxsId,RsReputations::OPINION_NEGATIVE) ; + GxsMsgReq msgIds; + std::vector &vect = msgIds[postId.first]; + vect.push_back(postId.second); + + uint32_t token; + mTokenQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, mTokenTypeBanAuthor); - emit groupChanged(this); } void GxsForumThreadWidget::replytomessage() @@ -2011,6 +2025,34 @@ void GxsForumThreadWidget::loadMsgData_ReplyMessage(const uint32_t &token) } } +void GxsForumThreadWidget::loadMsgData_BanAuthor(const uint32_t &token) +{ +#ifdef DEBUG_FORUMS + std::cerr << "GxsForumThreadWidget::loadMsgData_BanAuthor()"; + std::cerr << std::endl; +#endif + + std::vector msgs; + if (rsGxsForums->getMsgData(token, msgs)) + { + if (msgs.size() != 1) + { + std::cerr << "GxsForumThreadWidget::loadMsgData_ReplyMessage() ERROR Wrong number of answers"; + std::cerr << std::endl; + return; + } + + std::cerr << " banning author id " << msgs[0].mMeta.mAuthorId << std::endl; + rsReputations->setOwnOpinion(msgs[0].mMeta.mAuthorId,RsReputations::OPINION_NEGATIVE) ; + } + else + { + std::cerr << "GxsForumThreadWidget::loadMsgData_ReplyMessage() ERROR Missing Message Data..."; + std::cerr << std::endl; + } + + emit groupChanged(this) ; +} /*********************** **** **** **** ***********************/ /*********************** **** **** **** ***********************/ @@ -2038,6 +2080,11 @@ void GxsForumThreadWidget::loadRequest(const TokenQueue *queue, const TokenReque loadMsgData_ReplyMessage(req.mToken); return; } + + if (req.mUserType == mTokenTypeBanAuthor) { + loadMsgData_BanAuthor(req.mToken); + return; + } } GxsMessageFrameWidget::loadRequest(queue, req); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index 4c3a85497..7048e7925 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -141,6 +141,7 @@ private: void loadMessageData(const uint32_t &token); void requestMsgData_ReplyMessage(const RsGxsGrpMsgIdPair &msgId); void loadMsgData_ReplyMessage(const uint32_t &token); + void loadMsgData_BanAuthor(const uint32_t &token); private: RsGxsGroupId mLastForumID; @@ -160,6 +161,7 @@ private: uint32_t mTokenTypeInsertThreads; uint32_t mTokenTypeMessageData; uint32_t mTokenTypeReplyMessage; + uint32_t mTokenTypeBanAuthor; /* Color definitions (for standard see qss.default) */ QColor mTextColorRead;