mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-04-17 05:52:56 -04:00
made RsReputation::overallReputationLevel() to also return the identity ownership flags so that we dont need to rely on async calls to p3IdService to get them
This commit is contained in:
parent
013eb93f70
commit
6a9b697e42
@ -177,7 +177,7 @@ class RsGixsReputation
|
||||
{
|
||||
public:
|
||||
// get Reputation.
|
||||
virtual RsReputations::ReputationLevel overallReputationLevel(const RsGxsId& id) = 0;
|
||||
virtual RsReputations::ReputationLevel overallReputationLevel(const RsGxsId& id,uint32_t *identity_flags=NULL) = 0;
|
||||
};
|
||||
|
||||
/*** This Class pulls all the GXS Interfaces together ****/
|
||||
|
@ -63,7 +63,10 @@ public:
|
||||
virtual bool setOwnOpinion(const RsGxsId& key_id, const Opinion& op) =0;
|
||||
virtual bool getOwnOpinion(const RsGxsId& key_id, Opinion& op) =0;
|
||||
virtual bool getReputationInfo(const RsGxsId& id, const RsPgpId &ownerNode, ReputationInfo& info,bool stamp=true) =0;
|
||||
virtual ReputationLevel overallReputationLevel(const RsGxsId& id)=0;
|
||||
|
||||
// This returns the reputation level and also the flags of the identity service for that id. This is useful in order to get these flags without relying on the async method of p3Identity
|
||||
|
||||
virtual ReputationLevel overallReputationLevel(const RsGxsId& id,uint32_t *identity_flags=NULL)=0;
|
||||
|
||||
// parameters
|
||||
|
||||
|
@ -768,14 +768,45 @@ bool p3GxsReputation::updateLatestUpdate(RsPeerId peerid,time_t latest_update)
|
||||
* Opinion
|
||||
****/
|
||||
|
||||
RsReputations::ReputationLevel p3GxsReputation::overallReputationLevel(const RsGxsId& id)
|
||||
RsReputations::ReputationLevel p3GxsReputation::overallReputationLevel(const RsGxsId& id,uint32_t *identity_flags)
|
||||
{
|
||||
ReputationInfo info ;
|
||||
getReputationInfo(id,RsPgpId(),info) ;
|
||||
|
||||
RsPgpId owner_id ;
|
||||
|
||||
if(identity_flags)
|
||||
getIdentityFlagsAndOwnerId(id,*identity_flags,owner_id);
|
||||
|
||||
return info.mOverallReputationLevel ;
|
||||
}
|
||||
|
||||
bool p3GxsReputation::getIdentityFlagsAndOwnerId(const RsGxsId& gxsid, uint32_t& identity_flags,RsPgpId& owner_id)
|
||||
{
|
||||
if(gxsid.isNull())
|
||||
return false ;
|
||||
|
||||
RsStackMutex stack(mReputationMtx); /****** LOCKED MUTEX *******/
|
||||
|
||||
std::map<RsGxsId,Reputation>::iterator it = mReputations.find(gxsid) ;
|
||||
|
||||
if(it == mReputations.end())
|
||||
return false ;
|
||||
|
||||
if(!(it->second.mIdentityFlags & REPUTATION_IDENTITY_FLAG_UP_TO_DATE))
|
||||
return false ;
|
||||
|
||||
if(it->second.mIdentityFlags & REPUTATION_IDENTITY_FLAG_PGP_LINKED)
|
||||
identity_flags |= RS_IDENTITY_FLAGS_PGP_LINKED ;
|
||||
|
||||
if(it->second.mIdentityFlags & REPUTATION_IDENTITY_FLAG_PGP_KNOWN)
|
||||
identity_flags |= RS_IDENTITY_FLAGS_PGP_KNOWN ;
|
||||
|
||||
owner_id = it->second.mOwnerNode ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool p3GxsReputation::getReputationInfo(const RsGxsId& gxsid, const RsPgpId& ownerNode, RsReputations::ReputationInfo& info, bool stamp)
|
||||
{
|
||||
if(gxsid.isNull())
|
||||
|
@ -115,7 +115,7 @@ public:
|
||||
|
||||
virtual bool isNodeBanned(const RsPgpId& id);
|
||||
virtual void banNode(const RsPgpId& id,bool b) ;
|
||||
virtual ReputationLevel overallReputationLevel(const RsGxsId& id);
|
||||
virtual ReputationLevel overallReputationLevel(const RsGxsId& id,uint32_t *identity_flags=NULL);
|
||||
|
||||
virtual void setNodeAutoPositiveOpinionForContacts(bool b) ;
|
||||
virtual bool nodeAutoPositiveOpinionForContacts() ;
|
||||
@ -143,6 +143,7 @@ public:
|
||||
virtual bool loadList(std::list<RsItem*>& load) ;
|
||||
|
||||
private:
|
||||
bool getIdentityFlagsAndOwnerId(const RsGxsId& gxsid, uint32_t& identity_flags, RsPgpId &owner_id);
|
||||
|
||||
bool processIncoming();
|
||||
|
||||
|
@ -1110,18 +1110,12 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum
|
||||
// Early check for a message that should be hidden because its author
|
||||
// is flagged with a bad reputation
|
||||
|
||||
RsIdentityDetails iddetails;
|
||||
|
||||
RsReputations::ReputationLevel reputation_level = RsReputations::REPUTATION_NEUTRAL;
|
||||
uint32_t idflags =0;
|
||||
RsReputations::ReputationLevel reputation_level = rsReputations->overallReputationLevel(msg.mMeta.mAuthorId,&idflags) ;
|
||||
bool redacted = false;
|
||||
|
||||
if( rsIdentity->getIdDetails(msg.mMeta.mAuthorId,iddetails) )
|
||||
{
|
||||
reputation_level = iddetails.mReputation.mOverallReputationLevel;
|
||||
redacted = (reputation_level == RsReputations::REPUTATION_LOCALLY_NEGATIVE);
|
||||
}
|
||||
else
|
||||
reputation_level = RsReputations::REPUTATION_UNKNOWN;
|
||||
redacted = (reputation_level == RsReputations::REPUTATION_LOCALLY_NEGATIVE);
|
||||
|
||||
GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(mThreadCompareRole,GxsIdDetails::ICON_TYPE_AVATAR );
|
||||
item->moveToThread(ui->threadTreeWidget->thread());
|
||||
@ -1144,7 +1138,7 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum
|
||||
rep_warning_level = 2 ;
|
||||
rep_tooltip_str = tr("You have banned this ID. The message will not be\ndisplayed nor forwarded to your friends.") ;
|
||||
}
|
||||
else if(reputation_level < rsGxsForums->minReputationForForwardingMessages(mForumGroup.mMeta.mSignFlags,iddetails.mFlags))
|
||||
else if(reputation_level < rsGxsForums->minReputationForForwardingMessages(mForumGroup.mMeta.mSignFlags,idflags))
|
||||
{
|
||||
rep_warning_level = 1 ;
|
||||
rep_tooltip_str = tr("You have not set an opinion for this person,\n and your friends do not vote positively: Spam regulation \nprevents the message to be forwarded to your friends.") ;
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
#define DEBUG_FORUMS
|
||||
//#define DEBUG_FORUMS
|
||||
|
||||
#define PROGRESSBAR_MAX 100
|
||||
|
||||
@ -158,7 +158,9 @@ void GxsForumsFillThread::run()
|
||||
|
||||
for(uint32_t i=0;i<msgs_array.size();++i)
|
||||
{
|
||||
#ifdef DEBUG_FORUMS
|
||||
std::cerr << "Adding message " << msgs_array[i].mMeta.mMsgId << " with parent " << msgs_array[i].mMeta.mParentId << " to message map" << std::endl;
|
||||
#endif
|
||||
msgs[msgs_array[i].mMeta.mMsgId] = msgs_array[i] ;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user