fixed merge with upstream/master

This commit is contained in:
csoler 2020-04-08 10:41:47 +02:00
commit c60f1d1331
No known key found for this signature in database
GPG Key ID: 7BCA522266C0804C
23 changed files with 274 additions and 214 deletions

View File

@ -43,7 +43,7 @@ p3GxsTrans::~p3GxsTrans()
} }
} }
bool p3GxsTrans::getStatistics(GxsTransStatistics& stats) bool p3GxsTrans::getDataStatistics(GxsTransStatistics& stats)
{ {
{ {
RS_STACK_MUTEX(mDataMutex); RS_STACK_MUTEX(mDataMutex);
@ -1335,4 +1335,53 @@ bool p3GxsTrans::acceptNewMessage(const RsGxsMsgMetaData *msgMeta,uint32_t msg_s
} }
bool p3GxsTrans::getGroupStatistics(std::map<RsGxsGroupId,RsGxsTransGroupStatistics>& stats)
{
uint32_t token1;
RsTokReqOptions opts1;
opts1.mReqType = GXS_REQUEST_TYPE_GROUP_META;
if( !requestGroupInfo(token1, opts1) || waitToken(token1) != RsTokenService::COMPLETE )
return false;
std::list<RsGroupMetaData> group_metas;
getGroupSummary(token1,group_metas);
for(auto& group_meta:group_metas)
{
RsGxsTransGroupStatistics& stat(stats[group_meta.mGroupId]);
uint32_t token2;
if(!RsGxsIfaceHelper::requestGroupStatistic(token2,group_meta.mGroupId) || waitToken(token2) != RsTokenService::COMPLETE)
continue;
RsGenExchange::getGroupStatistic(token2,stat);
stat.popularity = group_meta.mPop ;
stat.subscribed = IS_GROUP_SUBSCRIBED(group_meta.mSubscribeFlags) ;
stat.mGrpId = group_meta.mGroupId ;
std::vector<RsMsgMetaData> metas;
uint32_t token3;
RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_MSG_META;
std::list<RsGxsGroupId> groupIds;
groupIds.push_back(group_meta.mGroupId);
if( !requestMsgInfo(token3, opts, groupIds) || waitToken(token3, std::chrono::seconds(5)) != RsTokenService::COMPLETE )
continue;
GxsMsgMetaMap metaMap;
if(!RsGenExchange::getMsgMeta(token3, metaMap) || metaMap.size() != 1)
continue;
for(auto& meta: metaMap.begin()->second)
stat.addMessageMeta(group_meta.mGroupId,meta) ;
}
return true;
}

View File

@ -113,13 +113,21 @@ public:
/*! /*!
* \brief getStatistics * \brief getStatistics
* Gathers all sorts of statistics about the internals of p3GxsTrans, in order to display info about the running status, * Gathers all sorts of statistics about the data transported by p3GxsTrans, in order to display info about the running status,
* message transport, etc. * message transport, etc. This is a blocking call. Use it in a thread.
* \param stats This structure contains all statistics information. * \param stats This structure contains all statistics information.
* \return true is the call succeeds. * \return true is the call succeeds.
*/ */
virtual bool getStatistics(GxsTransStatistics& stats); virtual bool getDataStatistics(GxsTransStatistics& stats) override;
/*!
* \brief getGroupStatistics
* Gathers statistics about GXS groups and messages used by GxsTrans to transport data. This is a blocking call. Use it in a thread.
* \param stats
* \return true if the data collection succeeds.
*/
virtual bool getGroupStatistics(std::map<RsGxsGroupId,RsGxsTransGroupStatistics>& stats) override;
/** /**
* Send an email to recipient, in the process author of the email is * Send an email to recipient, in the process author of the email is

View File

@ -409,6 +409,14 @@ public:
virtual bool subscribeToChannel( const RsGxsGroupId& channelId, virtual bool subscribeToChannel( const RsGxsGroupId& channelId,
bool subscribe ) = 0; bool subscribe ) = 0;
/**
* \brief Retrieve statistics about the channel service
* @jsonapi{development}
* \param[out] stat Statistics structure
* \return
*/
virtual bool getChannelServiceStatistics(GxsServiceStatistic& stat) =0;
/** /**
* \brief Retrieve statistics about the given channel * \brief Retrieve statistics about the given channel
* @jsonapi{development} * @jsonapi{development}
@ -418,6 +426,7 @@ public:
*/ */
virtual bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) =0; virtual bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) =0;
/** /**
* @brief Request remote channels search * @brief Request remote channels search
* @jsonapi{development} * @jsonapi{development}

View File

@ -219,6 +219,14 @@ public:
*/ */
virtual bool getForumsSummaries(std::list<RsGroupMetaData>& forums) = 0; virtual bool getForumsSummaries(std::list<RsGroupMetaData>& forums) = 0;
/**
* @brief returns statistics for the forum service
* @jsonapi{development}
* @param[out] stat statistics struct
* @return false if the call fails
*/
virtual bool getForumServiceStatistics(GxsServiceStatistic& stat) =0;
/** /**
* @brief returns statistics about a particular forum * @brief returns statistics about a particular forum
* @jsonapi{development} * @jsonapi{development}
@ -228,6 +236,7 @@ public:
*/ */
virtual bool getForumStatistics(const RsGxsGroupId& forumId,GxsGroupStatistic& stat)=0; virtual bool getForumStatistics(const RsGxsGroupId& forumId,GxsGroupStatistic& stat)=0;
/** /**
* @brief Get forums information (description, thumbnail...). * @brief Get forums information (description, thumbnail...).
* Blocking API. * Blocking API.

View File

@ -85,8 +85,7 @@ public:
* @param groupIds the ids return for given request token * @param groupIds the ids return for given request token
* @return false if request token is invalid, check token status for error report * @return false if request token is invalid, check token status for error report
*/ */
bool getGroupList(const uint32_t &token, bool getGroupList(const uint32_t &token, std::list<RsGxsGroupId> &groupIds)
std::list<RsGxsGroupId> &groupIds)
{ {
return mGxs.getGroupList(token, groupIds); return mGxs.getGroupList(token, groupIds);
} }
@ -119,8 +118,7 @@ public:
* @param groupInfo the ids returned for given request token * @param groupInfo the ids returned for given request token
* @return false if request token is invalid, check token status for error report * @return false if request token is invalid, check token status for error report
*/ */
bool getGroupSummary(const uint32_t &token, bool getGroupSummary(const uint32_t &token, std::list<RsGroupMetaData> &groupInfo)
std::list<RsGroupMetaData> &groupInfo)
{ {
return mGxs.getGroupMeta(token, groupInfo); return mGxs.getGroupMeta(token, groupInfo);
} }
@ -130,8 +128,7 @@ public:
* @param msgInfo the message metadata returned for given request token * @param msgInfo the message metadata returned for given request token
* @return false if request token is invalid, check token status for error report * @return false if request token is invalid, check token status for error report
*/ */
bool getMsgSummary(const uint32_t &token, bool getMsgSummary(const uint32_t &token, GxsMsgMetaMap &msgInfo)
GxsMsgMetaMap &msgInfo)
{ {
return mGxs.getMsgMeta(token, msgInfo); return mGxs.getMsgMeta(token, msgInfo);
} }
@ -358,7 +355,7 @@ public:
{ return mTokenService.requestStatus(token); } { return mTokenService.requestStatus(token); }
/// @see RsTokenService::requestServiceStatistic /// @see RsTokenService::requestServiceStatistic
void requestServiceStatistic(uint32_t& token) bool requestServiceStatistic(uint32_t& token)
{ {
RsTokReqOptions opts; RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_SERVICE_STATS; opts.mReqType = GXS_REQUEST_TYPE_SERVICE_STATS;
@ -369,6 +366,7 @@ public:
mActiveTokens[token]=TokenRequestType::SERVICE_STATISTICS; mActiveTokens[token]=TokenRequestType::SERVICE_STATISTICS;
locked_dumpTokens(); locked_dumpTokens();
return true;
} }
/// @see RsTokenService::requestGroupStatistic /// @see RsTokenService::requestGroupStatistic

View File

@ -70,10 +70,8 @@ enum class GxsTransSendStatus : uint8_t
typedef uint64_t RsGxsTransId; typedef uint64_t RsGxsTransId;
class RsGxsTransGroup class RsGxsTransGroup: public RsGxsGenericGroupData
{ {
public:
RsGroupMetaData mMeta;
}; };
class RsGxsTransMsg class RsGxsTransMsg
@ -103,7 +101,34 @@ struct RsGxsTransOutgoingRecord
RsGxsGroupId group_id ; RsGxsGroupId group_id ;
}; };
class RsGxsTransGroupStatistics: public GxsGroupStatistic
{
public:
RsGxsTransGroupStatistics()
{
last_publish_TS = 0;
popularity = 0;
subscribed = false;
}
void addMessageMeta(const RsGxsGroupId& grp,const RsMsgMetaData& meta)
{
messages_metas[meta.mMsgId] = meta ;
last_publish_TS = std::max(last_publish_TS,meta.mPublishTs) ;
mGrpId = grp ;
}
bool subscribed ;
int popularity ;
rstime_t last_publish_TS;
std::map<RsGxsMessageId,RsMsgMetaData> messages_metas ;
};
/// RetroShare GxsTrans asyncronous redundant small mail trasport on top of GXS /// RetroShare GxsTrans asyncronous redundant small mail trasport on top of GXS
///
class RsGxsTrans: public RsGxsIfaceHelper class RsGxsTrans: public RsGxsIfaceHelper
{ {
public: public:
@ -120,10 +145,8 @@ public:
virtual ~RsGxsTrans() {} virtual ~RsGxsTrans() {}
virtual bool getStatistics(GxsTransStatistics& stats)=0; virtual bool getDataStatistics(GxsTransStatistics& stats)=0;
virtual bool getGroupStatistics(std::map<RsGxsGroupId,RsGxsTransGroupStatistics>& stats) =0;
// virtual bool getGroupData(const uint32_t &token, std::vector<RsGxsTransGroup> &groups) = 0;
// virtual bool getPostData(const uint32_t &token, std::vector<RsGxsTransMsg> &posts) = 0;
}; };
extern RsGxsTrans *rsGxsTrans ; extern RsGxsTrans *rsGxsTrans ;

View File

@ -167,6 +167,8 @@ public:
virtual bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) =0; virtual bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) =0;
virtual bool getBoardsServiceStatistics(GxsServiceStatistic& stat) =0;
enum RS_DEPRECATED RankType {TopRankType, HotRankType, NewRankType }; enum RS_DEPRECATED RankType {TopRankType, HotRankType, NewRankType };
RS_DEPRECATED_FOR(getBoardsInfo) RS_DEPRECATED_FOR(getBoardsInfo)

View File

@ -1062,6 +1062,15 @@ bool p3GxsChannels::getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupS
return RsGenExchange::getGroupStatistic(token,stat); return RsGenExchange::getGroupStatistic(token,stat);
} }
bool p3GxsChannels::getChannelServiceStatistics(GxsServiceStatistic& stat)
{
uint32_t token;
if(!RsGxsIfaceHelper::requestServiceStatistic(token) || waitToken(token) != RsTokenService::COMPLETE)
return false;
return RsGenExchange::getServiceStatistic(token,stat);
}
bool p3GxsChannels::getContentSummaries( bool p3GxsChannels::getContentSummaries(
const RsGxsGroupId& channelId, std::vector<RsMsgMetaData>& summaries ) const RsGxsGroupId& channelId, std::vector<RsMsgMetaData>& summaries )
{ {

View File

@ -204,6 +204,9 @@ virtual bool ExtraFileRemove(const RsFileHash &hash);
/// Implementation of @see RsGxsChannels::getChannelStatistics /// Implementation of @see RsGxsChannels::getChannelStatistics
bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) override; bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) override;
/// Iplementation of @see RsGxsChannels::getChannelServiceStatistics
bool getChannelServiceStatistics(GxsServiceStatistic& stat) override;
/// Implementation of @see RsGxsChannels::createChannelV2 /// Implementation of @see RsGxsChannels::createChannelV2
bool createChannelV2( bool createChannelV2(
const std::string& name, const std::string& description, const std::string& name, const std::string& description,

View File

@ -819,6 +819,15 @@ bool p3GxsForums::createGroup(uint32_t &token, RsGxsForumGroup &group)
return true; return true;
} }
bool p3GxsForums::getForumServiceStatistics(GxsServiceStatistic& stat)
{
uint32_t token;
if(!RsGxsIfaceHelper::requestServiceStatistic(token) || waitToken(token) != RsTokenService::COMPLETE)
return false;
return RsGenExchange::getServiceStatistic(token,stat);
}
bool p3GxsForums::getForumStatistics(const RsGxsGroupId& ForumId,GxsGroupStatistic& stat) bool p3GxsForums::getForumStatistics(const RsGxsGroupId& ForumId,GxsGroupStatistic& stat)
{ {
uint32_t token; uint32_t token;

View File

@ -97,6 +97,9 @@ public:
/// Implementation of @see RsGxsForums::getForumStatistics /// Implementation of @see RsGxsForums::getForumStatistics
bool getForumStatistics(const RsGxsGroupId& ForumId,GxsGroupStatistic& stat) override; bool getForumStatistics(const RsGxsGroupId& ForumId,GxsGroupStatistic& stat) override;
/// Implementation of @see RsGxsForums::getForumServiceStatistics
bool getForumServiceStatistics(GxsServiceStatistic& stat) override;
/// @see RsGxsForums::getForumMsgMetaData /// @see RsGxsForums::getForumMsgMetaData
virtual bool getForumMsgMetaData(const RsGxsGroupId& forumId, std::vector<RsMsgMetaData>& msg_metas) ; virtual bool getForumMsgMetaData(const RsGxsGroupId& forumId, std::vector<RsMsgMetaData>& msg_metas) ;

View File

@ -364,6 +364,16 @@ bool p3Posted::getBoardsSummaries(std::list<RsGroupMetaData>& boards )
return getGroupSummary(token, boards); return getGroupSummary(token, boards);
} }
bool p3Posted::getBoardsServiceStatistics(GxsServiceStatistic& stat)
{
uint32_t token;
if(!RsGxsIfaceHelper::requestServiceStatistic(token) || waitToken(token) != RsTokenService::COMPLETE)
return false;
return RsGenExchange::getServiceStatistic(token,stat);
}
bool p3Posted::getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) bool p3Posted::getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat)
{ {
uint32_t token; uint32_t token;

View File

@ -74,6 +74,8 @@ virtual void receiveHelperChanges(std::vector<RsGxsNotify*>& changes)
bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) override; bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) override;
bool getBoardsServiceStatistics(GxsServiceStatistic& stat) override;
bool editBoard(RsPostedGroup& board) override; bool editBoard(RsPostedGroup& board) override;
bool createBoard(RsPostedGroup& board) override; bool createBoard(RsPostedGroup& board) override;

View File

@ -18,6 +18,7 @@
* * * *
*******************************************************************************/ *******************************************************************************/
#include "retroshare/rsposted.h"
#include "PostedUserNotify.h" #include "PostedUserNotify.h"
#include "gui/MainWindow.h" #include "gui/MainWindow.h"
@ -33,6 +34,10 @@ bool PostedUserNotify::hasSetting(QString *name, QString *group)
return true; return true;
} }
bool PostedUserNotify::getServiceStatistics(GxsServiceStatistic& stat)
{
return rsPosted->getBoardsServiceStatistics(stat);
}
QIcon PostedUserNotify::getIcon() QIcon PostedUserNotify::getIcon()
{ {

View File

@ -31,6 +31,7 @@ public:
PostedUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); PostedUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0);
virtual bool hasSetting(QString *name, QString *group); virtual bool hasSetting(QString *name, QString *group);
virtual bool getServiceStatistics(GxsServiceStatistic& stat) override;
private: private:
virtual QIcon getIcon(); virtual QIcon getIcon();

View File

@ -22,63 +22,50 @@
//#include "gui/gxs/RsGxsUpdateBroadcastBase.h" //#include "gui/gxs/RsGxsUpdateBroadcastBase.h"
#include "retroshare/rsgxsifacehelper.h" #include "retroshare/rsgxsifacehelper.h"
#include "util/qtthreadsutils.h"
#define TOKEN_TYPE_STATISTICS 1 #define TOKEN_TYPE_STATISTICS 1
GxsUserNotify::GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent) : GxsUserNotify::GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent) : UserNotify(parent)
UserNotify(parent), TokenResponse()
{ {
mNewThreadMessageCount = 0; mNewThreadMessageCount = 0;
mNewChildMessageCount = 0; mNewChildMessageCount = 0;
mCountChildMsgs = false; mCountChildMsgs = false;
mInterface = ifaceImpl;
mTokenService = mInterface->getTokenService();
mTokenQueue = new TokenQueue(mInterface->getTokenService(), this);
//mBase = new RsGxsUpdateBroadcastBase(ifaceImpl);
//connect(mBase, SIGNAL(fillDisplay(bool)), this, SLOT(updateIcon()));
} }
GxsUserNotify::~GxsUserNotify() GxsUserNotify::~GxsUserNotify() {}
{
if (mTokenQueue) {
delete(mTokenQueue);
}
//if (mBase) {
//delete(mBase);
//}
}
void GxsUserNotify::startUpdate() void GxsUserNotify::startUpdate()
{ {
mNewThreadMessageCount = 0; mNewThreadMessageCount = 0;
mNewChildMessageCount = 0; mNewChildMessageCount = 0;
uint32_t token; RsThread::async([this]()
RsTokReqOptions opts; {
opts.mReqType = GXS_REQUEST_TYPE_SERVICE_STATS; // 1 - get message data from p3GxsForums
mTokenService->requestServiceStatistic(token,opts); #ifdef DEBUG_FORUMS
mTokenQueue->queueRequest(token, 0, RS_TOKREQ_ANSTYPE_ACK, TOKEN_TYPE_STATISTICS); std::cerr << "Retrieving post data for post " << mThreadId << std::endl;
} #endif
void GxsUserNotify::loadRequest(const TokenQueue *queue, const TokenRequest &req) GxsServiceStatistic stats;
{
if (queue == mTokenQueue) { if(!getServiceStatistics(stats))
/* now switch on req */ return;
switch(req.mUserType) {
case TOKEN_TYPE_STATISTICS: RsQThreadUtils::postToObject( [stats,this]()
{ {
GxsServiceStatistic stats; /* Here it goes any code you want to be executed on the Qt Gui
mInterface->getServiceStatistic(req.mToken, stats); * thread, for example to update the data model with new information
* after a blocking call to RetroShare API complete */
mNewThreadMessageCount = stats.mNumThreadMsgsNew; mNewThreadMessageCount = stats.mNumThreadMsgsNew;
mNewChildMessageCount = stats.mNumChildMsgsNew; mNewChildMessageCount = stats.mNumChildMsgsNew;
update(); update();
}
break; }, this );
}
} });
} }

View File

@ -28,7 +28,7 @@
struct RsGxsIfaceHelper; struct RsGxsIfaceHelper;
class RsGxsUpdateBroadcastBase; class RsGxsUpdateBroadcastBase;
class GxsUserNotify : public UserNotify, public TokenResponse class GxsUserNotify : public UserNotify
{ {
Q_OBJECT Q_OBJECT
@ -36,11 +36,9 @@ public:
GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0);
virtual ~GxsUserNotify(); virtual ~GxsUserNotify();
/* TokenResponse */
virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req);
protected: protected:
virtual void startUpdate(); virtual void startUpdate();
virtual bool getServiceStatistics(GxsServiceStatistic& stat)=0;
private: private:
virtual unsigned int getNewCount() { return mCountChildMsgs ? (mNewThreadMessageCount + mNewChildMessageCount) : mNewThreadMessageCount; } virtual unsigned int getNewCount() { return mCountChildMsgs ? (mNewThreadMessageCount + mNewChildMessageCount) : mNewThreadMessageCount; }
@ -49,9 +47,6 @@ protected:
bool mCountChildMsgs; // Count new child messages? bool mCountChildMsgs; // Count new child messages?
private: private:
RsGxsIfaceHelper *mInterface;
RsTokenService *mTokenService;
TokenQueue *mTokenQueue;
RsGxsUpdateBroadcastBase *mBase; RsGxsUpdateBroadcastBase *mBase;
unsigned int mNewThreadMessageCount; unsigned int mNewThreadMessageCount;
unsigned int mNewChildMessageCount; unsigned int mNewChildMessageCount;

View File

@ -18,6 +18,7 @@
* * * *
*******************************************************************************/ *******************************************************************************/
#include "retroshare/rsgxschannels.h"
#include "GxsChannelUserNotify.h" #include "GxsChannelUserNotify.h"
#include "gui/MainWindow.h" #include "gui/MainWindow.h"
@ -34,6 +35,11 @@ bool GxsChannelUserNotify::hasSetting(QString *name, QString *group)
return true; return true;
} }
bool GxsChannelUserNotify::getServiceStatistics(GxsServiceStatistic& stat)
{
return rsGxsChannels->getChannelServiceStatistics(stat);
}
QIcon GxsChannelUserNotify::getIcon() QIcon GxsChannelUserNotify::getIcon()
{ {
return QIcon(":/icons/png/channel.png"); return QIcon(":/icons/png/channel.png");

View File

@ -31,6 +31,7 @@ public:
GxsChannelUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); GxsChannelUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0);
virtual bool hasSetting(QString *name, QString *group); virtual bool hasSetting(QString *name, QString *group);
virtual bool getServiceStatistics(GxsServiceStatistic& stat) override;
private: private:
virtual QIcon getIcon(); virtual QIcon getIcon();

View File

@ -18,6 +18,7 @@
* * * *
*******************************************************************************/ *******************************************************************************/
#include "retroshare/rsgxsforums.h"
#include "GxsForumUserNotify.h" #include "GxsForumUserNotify.h"
#include "gui/MainWindow.h" #include "gui/MainWindow.h"
@ -34,6 +35,10 @@ bool GxsForumUserNotify::hasSetting(QString *name, QString *group)
return true; return true;
} }
bool GxsForumUserNotify::getServiceStatistics(GxsServiceStatistic& stat)
{
return rsGxsForums->getForumServiceStatistics(stat);
}
QIcon GxsForumUserNotify::getIcon() QIcon GxsForumUserNotify::getIcon()
{ {

View File

@ -29,6 +29,7 @@ class GxsForumUserNotify : public GxsUserNotify
public: public:
GxsForumUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); GxsForumUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0);
virtual bool getServiceStatistics(GxsServiceStatistic& stat) override;
virtual bool hasSetting(QString *name, QString *group); virtual bool hasSetting(QString *name, QString *group);

View File

@ -45,6 +45,7 @@
#include "util/QtVersion.h" #include "util/QtVersion.h"
#include "gui/common/UIStateHelper.h" #include "gui/common/UIStateHelper.h"
#include "util/misc.h" #include "util/misc.h"
#include "util/qtthreadsutils.h"
#include "gui/gxs/GxsIdLabel.h" #include "gui/gxs/GxsIdLabel.h"
#include "gui/gxs/GxsIdDetails.h" #include "gui/gxs/GxsIdDetails.h"
#include "gui/gxs/GxsIdTreeWidgetItem.h" #include "gui/gxs/GxsIdTreeWidgetItem.h"
@ -85,8 +86,6 @@ GxsTransportStatistics::GxsTransportStatistics(QWidget *parent)
mStateHelper = new UIStateHelper(this); mStateHelper = new UIStateHelper(this);
mStateHelper->addWidget(GXSTRANS_GROUP_META, treeWidget); mStateHelper->addWidget(GXSTRANS_GROUP_META, treeWidget);
mTransQueue = new TokenQueue(rsGxsTrans->getTokenService(), this);
m_bProcessSettings = false; m_bProcessSettings = false;
mLastGroupReqTS = 0 ; mLastGroupReqTS = 0 ;
@ -154,7 +153,8 @@ void GxsTransportStatistics::updateDisplay(bool)
std::cerr << "GxsTransportStatistics::updateDisplay()" << std::endl; std::cerr << "GxsTransportStatistics::updateDisplay()" << std::endl;
#endif #endif
requestGroupMeta(); loadGroups();
mLastGroupReqTS = now ; mLastGroupReqTS = now ;
} }
@ -201,7 +201,7 @@ void GxsTransportStatistics::updateContent()
{ {
RsGxsTrans::GxsTransStatistics transinfo ; RsGxsTrans::GxsTransStatistics transinfo ;
rsGxsTrans->getStatistics(transinfo) ; rsGxsTrans->getDataStatistics(transinfo) ;
// clear // clear
@ -333,95 +333,8 @@ void GxsTransportStatistics::personDetails()
dialog->show(); dialog->show();
} }
void GxsTransportStatistics::loadRequest(const TokenQueue *queue, const TokenRequest &req) #ifdef TO_REMOVE
{ void GxsTransportStatistics::loadGroupMeta(const std::vector<RsGroupMetaData>& groupInfo)
#ifdef DEBUG_GXSTRANS_STATS
std::cerr << "GxsTransportStatistics::loadRequest() UserType: " << req.mUserType << std::endl;
#endif
if (queue != mTransQueue)
{
std::cerr << "Wrong queue!" << std::endl;
return ;
}
/* now switch on req */
switch(req.mUserType)
{
case GXSTRANS_GROUP_META: loadGroupMeta(req.mToken);
break;
case GXSTRANS_GROUP_STAT: loadGroupStat(req.mToken);
break;
case GXSTRANS_MSG_META: loadMsgMeta(req.mToken);
break;
default:
std::cerr << "GxsTransportStatistics::loadRequest() ERROR: INVALID TYPE";
std::cerr << std::endl;
break;
}
updateContent();
}
void GxsTransportStatistics::requestGroupMeta()
{
mStateHelper->setLoading(GXSTRANS_GROUP_META, true);
#ifdef DEBUG_GXSTRANS_STATS
std::cerr << "GxsTransportStatisticsWidget::requestGroupMeta()";
std::cerr << std::endl;
#endif
RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_GROUP_META;
uint32_t token;
mTransQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, GXSTRANS_GROUP_META);
}
void GxsTransportStatistics::requestGroupStat(const RsGxsGroupId &groupId)
{
uint32_t token;
RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_GROUP_STATS;
rsGxsTrans->getTokenService()->requestGroupStatistic(token, groupId,opts);
mTransQueue->queueRequest(token, 0, RS_TOKREQ_ANSTYPE_ACK, GXSTRANS_GROUP_STAT);
}
void GxsTransportStatistics::requestMsgMeta(const RsGxsGroupId& grpId)
{
mStateHelper->setLoading(GXSTRANS_MSG_META, true);
#ifdef DEBUG_GXSTRANS_STATS
std::cerr << "GxsTransportStatisticsWidget::requestGroupMeta()";
std::cerr << std::endl;
#endif
RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_MSG_META;
std::list<RsGxsGroupId> grouplist ;
grouplist.push_back(grpId) ;
uint32_t token;
rsGxsTrans->getTokenService()->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, grouplist);
mTransQueue->queueRequest(token, 0, RS_TOKREQ_ANSTYPE_ACK, GXSTRANS_MSG_META);
}
void GxsTransportStatistics::loadGroupStat(const uint32_t &token)
{
GxsGroupStatistic stats;
rsGxsTrans->getGroupStatistic(token, stats);
#ifdef DEBUG_GXSTRANS_STATS
std::cerr << "Loading group stats: " << stats.mGrpId << ", num msgs=" << stats.mNumMsgs << ", total size=" << stats.mTotalSizeOfMsgs << std::endl;
#endif
dynamic_cast<GxsGroupStatistic&>(mGroupStats[stats.mGrpId]) = stats ;
}
void GxsTransportStatistics::loadGroupMeta(const uint32_t& token)
{ {
mStateHelper->setLoading(GXSTRANS_GROUP_META, false); mStateHelper->setLoading(GXSTRANS_GROUP_META, false);
@ -430,22 +343,11 @@ void GxsTransportStatistics::loadGroupMeta(const uint32_t& token)
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
std::list<RsGroupMetaData> groupInfo;
std::list<RsGroupMetaData>::iterator vit;
if (!rsGxsTrans->getGroupSummary(token,groupInfo))
{
std::cerr << "GxsTransportStatistics::loadGroupMeta() Error getting GroupMeta";
std::cerr << std::endl;
mStateHelper->setActive(GXSTRANS_GROUP_META, false);
return;
}
mStateHelper->setActive(GXSTRANS_GROUP_META, true); mStateHelper->setActive(GXSTRANS_GROUP_META, true);
std::set<RsGxsGroupId> existing_groups ; std::set<RsGxsGroupId> existing_groups ;
for(vit = groupInfo.begin(); vit != groupInfo.end(); ++vit) for(auto vit = groupInfo.begin(); vit != groupInfo.end(); ++vit)
{ {
existing_groups.insert(vit->mGroupId) ; existing_groups.insert(vit->mGroupId) ;
@ -454,8 +356,8 @@ void GxsTransportStatistics::loadGroupMeta(const uint32_t& token)
std::cerr << "GxsTransportStatisticsWidget::loadGroupMeta() GroupId: " << vit->mGroupId << " Group: " << vit->mGroupName << std::endl; std::cerr << "GxsTransportStatisticsWidget::loadGroupMeta() GroupId: " << vit->mGroupId << " Group: " << vit->mGroupName << std::endl;
#endif #endif
requestGroupStat(vit->mGroupId) ; loadGroupStats(vit->mGroupId) ;
requestMsgMeta(vit->mGroupId) ; loadMsgMetas(vit->mGroupId) ;
RsGxsTransGroupStatistics& s(mGroupStats[vit->mGroupId]); RsGxsTransGroupStatistics& s(mGroupStats[vit->mGroupId]);
s.popularity = vit->mPop ; s.popularity = vit->mPop ;
@ -472,17 +374,74 @@ void GxsTransportStatistics::loadGroupMeta(const uint32_t& token)
++it; ++it;
} }
void GxsTransportStatistics::loadMsgMeta(const uint32_t& token) void GxsTransportStatistics::loadGroupStats(const RsGxsGroupId& groupId)
{ {
mStateHelper->setLoading(GXSTRANS_MSG_META, false); #ifdef DEBUG_GXSTRANS_STATS
std::cerr << "Loading group stats: " << stats.mGrpId << ", num msgs=" << stats.mNumMsgs << ", total size=" << stats.mTotalSizeOfMsgs << std::endl;
#endif
GxsMsgMetaMap m ; RsThread::async([this]()
{
// 1 - get message data from p3GxsForums
if (!rsGxsTrans->getMsgSummary(token,m)) #ifdef DEBUG_FORUMS
return ; std::cerr << "Retrieving post data for post " << mThreadId << std::endl;
#endif
GxsGroupStatistic stats;
rsGxsTrans->getGroupStatistic(groupId,stats);
for(GxsMsgMetaMap::const_iterator it(m.begin());it!=m.end();++it) RsQThreadUtils::postToObject( [stats,this]()
for(uint32_t i=0;i<it->second.size();++i) {
mGroupStats[it->first].addMessageMeta(it->first,it->second[i]) ; /* 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 */
dynamic_cast<GxsGroupStatistic&>(mGroupStats[stats.mGrpId]) = stats ;
mStateHelper->setLoading(GXSTRANS_GROUP_STAT, false);
}, this );
});
}
#endif
void GxsTransportStatistics::loadGroups()
{
mStateHelper->setLoading(GXSTRANS_GROUP_META, true);
RsThread::async([this]()
{
// 1 - get message data from p3GxsForums
#ifdef DEBUG_FORUMS
std::cerr << "Retrieving post data for post " << mThreadId << std::endl;
#endif
std::map<RsGxsGroupId,RsGxsTransGroupStatistics> stats;
if(!rsGxsTrans->getGroupStatistics(stats))
{
RsErr() << "Cannot retrieve group statistics in GxsTransportStatistics" << std::endl;
return;
}
RsQThreadUtils::postToObject( [stats,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 */
mGroupStats = stats;
updateContent();
mStateHelper->setLoading(GXSTRANS_GROUP_META, false);
}, this );
});
} }

View File

@ -25,8 +25,8 @@
#include <QPoint> #include <QPoint>
#include <retroshare/rsgrouter.h> #include <retroshare/rsgrouter.h>
#include <retroshare/rstypes.h> #include <retroshare/rstypes.h>
#include <retroshare/rsgxstrans.h>
#include "util/TokenQueue.h"
#include "RsAutoUpdatePage.h" #include "RsAutoUpdatePage.h"
#include "ui_GxsTransportStatistics.h" #include "ui_GxsTransportStatistics.h"
#include "gui/gxs/RsGxsUpdateBroadcastPage.h" #include "gui/gxs/RsGxsUpdateBroadcastPage.h"
@ -35,32 +35,7 @@
class GxsTransportStatisticsWidget ; class GxsTransportStatisticsWidget ;
class UIStateHelper; class UIStateHelper;
class RsGxsTransGroupStatistics: public GxsGroupStatistic class GxsTransportStatistics: public MainPage, public Ui::GxsTransportStatistics
{
public:
RsGxsTransGroupStatistics()
{
last_publish_TS = 0;
popularity = 0;
subscribed = false;
}
void addMessageMeta(const RsGxsGroupId& grp,const RsMsgMetaData& meta)
{
messages_metas[meta.mMsgId] = meta ;
last_publish_TS = std::max(last_publish_TS,meta.mPublishTs) ;
mGrpId = grp ;
}
bool subscribed ;
int popularity ;
rstime_t last_publish_TS;
std::map<RsGxsMessageId,RsMsgMetaData> messages_metas ;
};
class GxsTransportStatistics: public MainPage, public TokenResponse, public Ui::GxsTransportStatistics
{ {
Q_OBJECT Q_OBJECT
@ -71,8 +46,6 @@ public:
// Cache for peer names. // Cache for peer names.
static QString getPeerName(const RsPeerId& peer_id) ; static QString getPeerName(const RsPeerId& peer_id) ;
virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req) ;
void updateContent() ; void updateContent() ;
private slots: private slots:
@ -82,19 +55,12 @@ private slots:
private: private:
void updateDisplay(bool complete) ; void updateDisplay(bool complete) ;
void loadGroupMeta(const uint32_t& token); void loadGroups();
void loadGroupStat(const uint32_t& token);
void loadMsgMeta(const uint32_t& token);
void requestGroupMeta();
void requestMsgMeta(const RsGxsGroupId& groupId);
void requestGroupStat(const RsGxsGroupId &groupId);
void processSettings(bool bLoad); void processSettings(bool bLoad);
bool m_bProcessSettings; bool m_bProcessSettings;
GxsTransportStatisticsWidget *_tst_CW ; GxsTransportStatisticsWidget *_tst_CW ;
TokenQueue *mTransQueue ;
UIStateHelper *mStateHelper; UIStateHelper *mStateHelper;
uint32_t mLastGroupReqTS ; uint32_t mLastGroupReqTS ;