diff --git a/libretroshare/src/retroshare/rsgxschannels.h b/libretroshare/src/retroshare/rsgxschannels.h index 418afc670..83f21a5e9 100644 --- a/libretroshare/src/retroshare/rsgxschannels.h +++ b/libretroshare/src/retroshare/rsgxschannels.h @@ -409,6 +409,14 @@ public: virtual bool subscribeToChannel( const RsGxsGroupId& channelId, 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 * @jsonapi{development} @@ -418,6 +426,7 @@ public: */ virtual bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) =0; + /** * @brief Request remote channels search * @jsonapi{development} diff --git a/libretroshare/src/retroshare/rsgxsforums.h b/libretroshare/src/retroshare/rsgxsforums.h index 4e368792e..5bff8e267 100644 --- a/libretroshare/src/retroshare/rsgxsforums.h +++ b/libretroshare/src/retroshare/rsgxsforums.h @@ -219,6 +219,14 @@ public: */ virtual bool getForumsSummaries(std::list& 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 * @jsonapi{development} @@ -228,6 +236,7 @@ public: */ virtual bool getForumStatistics(const RsGxsGroupId& forumId,GxsGroupStatistic& stat)=0; + /** * @brief Get forums information (description, thumbnail...). * Blocking API. diff --git a/libretroshare/src/retroshare/rsgxsifacehelper.h b/libretroshare/src/retroshare/rsgxsifacehelper.h index 4a84a946d..ac8185b27 100644 --- a/libretroshare/src/retroshare/rsgxsifacehelper.h +++ b/libretroshare/src/retroshare/rsgxsifacehelper.h @@ -355,7 +355,7 @@ public: { return mTokenService.requestStatus(token); } /// @see RsTokenService::requestServiceStatistic - void requestServiceStatistic(uint32_t& token) + bool requestServiceStatistic(uint32_t& token) { mTokenService.requestServiceStatistic(token); @@ -363,6 +363,7 @@ public: mActiveTokens[token]=TokenRequestType::SERVICE_STATISTICS; locked_dumpTokens(); + return true; } /// @see RsTokenService::requestGroupStatistic diff --git a/libretroshare/src/retroshare/rsposted.h b/libretroshare/src/retroshare/rsposted.h index 347419082..066232d5b 100644 --- a/libretroshare/src/retroshare/rsposted.h +++ b/libretroshare/src/retroshare/rsposted.h @@ -167,6 +167,8 @@ public: virtual bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) =0; + virtual bool getBoardsServiceStatistics(GxsServiceStatistic& stat) =0; + enum RS_DEPRECATED RankType {TopRankType, HotRankType, NewRankType }; RS_DEPRECATED_FOR(getBoardsInfo) diff --git a/libretroshare/src/services/p3gxschannels.cc b/libretroshare/src/services/p3gxschannels.cc index 931098059..1e7538c57 100644 --- a/libretroshare/src/services/p3gxschannels.cc +++ b/libretroshare/src/services/p3gxschannels.cc @@ -1062,6 +1062,15 @@ bool p3GxsChannels::getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupS 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( const RsGxsGroupId& channelId, std::vector& summaries ) { diff --git a/libretroshare/src/services/p3gxschannels.h b/libretroshare/src/services/p3gxschannels.h index e529c227b..843023fb8 100644 --- a/libretroshare/src/services/p3gxschannels.h +++ b/libretroshare/src/services/p3gxschannels.h @@ -204,6 +204,9 @@ virtual bool ExtraFileRemove(const RsFileHash &hash); /// Implementation of @see RsGxsChannels::getChannelStatistics bool getChannelStatistics(const RsGxsGroupId& channelId,GxsGroupStatistic& stat) override; + /// Iplementation of @see RsGxsChannels::getChannelServiceStatistics + bool getChannelServiceStatistics(GxsServiceStatistic& stat) override; + /// Implementation of @see RsGxsChannels::createChannelV2 bool createChannelV2( const std::string& name, const std::string& description, diff --git a/libretroshare/src/services/p3gxsforums.cc b/libretroshare/src/services/p3gxsforums.cc index c7f3fddcf..a37a62098 100644 --- a/libretroshare/src/services/p3gxsforums.cc +++ b/libretroshare/src/services/p3gxsforums.cc @@ -819,6 +819,15 @@ bool p3GxsForums::createGroup(uint32_t &token, RsGxsForumGroup &group) 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) { uint32_t token; diff --git a/libretroshare/src/services/p3gxsforums.h b/libretroshare/src/services/p3gxsforums.h index c95acf447..347714acb 100644 --- a/libretroshare/src/services/p3gxsforums.h +++ b/libretroshare/src/services/p3gxsforums.h @@ -97,6 +97,9 @@ public: /// Implementation of @see RsGxsForums::getForumStatistics bool getForumStatistics(const RsGxsGroupId& ForumId,GxsGroupStatistic& stat) override; + /// Implementation of @see RsGxsForums::getForumServiceStatistics + bool getForumServiceStatistics(GxsServiceStatistic& stat) override; + /// @see RsGxsForums::getForumMsgMetaData virtual bool getForumMsgMetaData(const RsGxsGroupId& forumId, std::vector& msg_metas) ; diff --git a/libretroshare/src/services/p3posted.cc b/libretroshare/src/services/p3posted.cc index 299a990b1..db1de62ca 100644 --- a/libretroshare/src/services/p3posted.cc +++ b/libretroshare/src/services/p3posted.cc @@ -364,6 +364,16 @@ bool p3Posted::getBoardsSummaries(std::list& 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) { uint32_t token; diff --git a/libretroshare/src/services/p3posted.h b/libretroshare/src/services/p3posted.h index 3cc016ee7..b6f3ccee5 100644 --- a/libretroshare/src/services/p3posted.h +++ b/libretroshare/src/services/p3posted.h @@ -74,6 +74,8 @@ virtual void receiveHelperChanges(std::vector& changes) bool getBoardStatistics(const RsGxsGroupId& boardId,GxsGroupStatistic& stat) override; + bool getBoardsServiceStatistics(GxsServiceStatistic& stat) override; + bool editBoard(RsPostedGroup& board) override; bool createBoard(RsPostedGroup& board) override; diff --git a/retroshare-gui/src/gui/Posted/PostedUserNotify.cpp b/retroshare-gui/src/gui/Posted/PostedUserNotify.cpp index ef0cfa31d..5e7d75040 100644 --- a/retroshare-gui/src/gui/Posted/PostedUserNotify.cpp +++ b/retroshare-gui/src/gui/Posted/PostedUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "retroshare/rsposted.h" #include "PostedUserNotify.h" #include "gui/MainWindow.h" @@ -33,6 +34,10 @@ bool PostedUserNotify::hasSetting(QString *name, QString *group) return true; } +bool PostedUserNotify::getServiceStatistics(GxsServiceStatistic& stat) +{ + return rsPosted->getBoardsServiceStatistics(stat); +} QIcon PostedUserNotify::getIcon() { diff --git a/retroshare-gui/src/gui/Posted/PostedUserNotify.h b/retroshare-gui/src/gui/Posted/PostedUserNotify.h index 11552669a..8fd4ccdf9 100644 --- a/retroshare-gui/src/gui/Posted/PostedUserNotify.h +++ b/retroshare-gui/src/gui/Posted/PostedUserNotify.h @@ -31,6 +31,7 @@ public: PostedUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); virtual bool hasSetting(QString *name, QString *group); + virtual bool getServiceStatistics(GxsServiceStatistic& stat) override; private: virtual QIcon getIcon(); diff --git a/retroshare-gui/src/gui/gxs/GxsUserNotify.cpp b/retroshare-gui/src/gui/gxs/GxsUserNotify.cpp index bca319e9a..c6765f417 100644 --- a/retroshare-gui/src/gui/gxs/GxsUserNotify.cpp +++ b/retroshare-gui/src/gui/gxs/GxsUserNotify.cpp @@ -31,51 +31,41 @@ GxsUserNotify::GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent) : mNewThreadMessageCount = 0; mNewChildMessageCount = 0; 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() -{ - if (mTokenQueue) { - delete(mTokenQueue); - } - //if (mBase) { - //delete(mBase); - //} -} +GxsUserNotify::~GxsUserNotify() {} void GxsUserNotify::startUpdate() { mNewThreadMessageCount = 0; mNewChildMessageCount = 0; - uint32_t token; - mTokenService->requestServiceStatistic(token); - mTokenQueue->queueRequest(token, 0, RS_TOKREQ_ANSTYPE_ACK, TOKEN_TYPE_STATISTICS); -} + RsThread::async([this]() + { + // 1 - get message data from p3GxsForums -void GxsUserNotify::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ - if (queue == mTokenQueue) { - /* now switch on req */ - switch(req.mUserType) { - case TOKEN_TYPE_STATISTICS: - { - GxsServiceStatistic stats; - mInterface->getServiceStatistic(req.mToken, stats); +#ifdef DEBUG_FORUMS + std::cerr << "Retrieving post data for post " << mThreadId << std::endl; +#endif + + GxsServiceStatistic stats; + + if(!getServiceStatistics(stats)) + 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 */ mNewThreadMessageCount = stats.mNumThreadMsgsNew; mNewChildMessageCount = stats.mNumChildMsgsNew; update(); - } - break; - } - } + + }, this ); + + }); } + diff --git a/retroshare-gui/src/gui/gxs/GxsUserNotify.h b/retroshare-gui/src/gui/gxs/GxsUserNotify.h index c4dca9995..cc1cd3809 100644 --- a/retroshare-gui/src/gui/gxs/GxsUserNotify.h +++ b/retroshare-gui/src/gui/gxs/GxsUserNotify.h @@ -28,7 +28,7 @@ struct RsGxsIfaceHelper; class RsGxsUpdateBroadcastBase; -class GxsUserNotify : public UserNotify, public TokenResponse +class GxsUserNotify : public UserNotify { Q_OBJECT @@ -36,11 +36,9 @@ public: GxsUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); virtual ~GxsUserNotify(); - /* TokenResponse */ - virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); - protected: virtual void startUpdate(); + virtual bool getServiceStatistics(GxsServiceStatistic& stat)=0; private: virtual unsigned int getNewCount() { return mCountChildMsgs ? (mNewThreadMessageCount + mNewChildMessageCount) : mNewThreadMessageCount; } @@ -49,9 +47,6 @@ protected: bool mCountChildMsgs; // Count new child messages? private: - RsGxsIfaceHelper *mInterface; - RsTokenService *mTokenService; - TokenQueue *mTokenQueue; RsGxsUpdateBroadcastBase *mBase; unsigned int mNewThreadMessageCount; unsigned int mNewChildMessageCount; diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.cpp index aa82953ed..3e5212476 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "retroshare/rsgxschannels.h" #include "GxsChannelUserNotify.h" #include "gui/MainWindow.h" @@ -34,6 +35,11 @@ bool GxsChannelUserNotify::hasSetting(QString *name, QString *group) return true; } +bool GxsChannelUserNotify::getServiceStatistics(GxsServiceStatistic& stat) +{ + return rsGxsChannels->getChannelServiceStatistics(stat); +} + QIcon GxsChannelUserNotify::getIcon() { return QIcon(":/icons/png/channel.png"); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.h b/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.h index d36b92bd7..d69848aba 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelUserNotify.h @@ -31,6 +31,7 @@ public: GxsChannelUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); virtual bool hasSetting(QString *name, QString *group); + virtual bool getServiceStatistics(GxsServiceStatistic& stat) override; private: virtual QIcon getIcon(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.cpp index 8a910659a..8c07e2099 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "retroshare/rsgxsforums.h" #include "GxsForumUserNotify.h" #include "gui/MainWindow.h" @@ -34,6 +35,10 @@ bool GxsForumUserNotify::hasSetting(QString *name, QString *group) return true; } +bool GxsForumUserNotify::getServiceStatistics(GxsServiceStatistic& stat) +{ + return rsGxsForums->getForumServiceStatistics(stat); +} QIcon GxsForumUserNotify::getIcon() { diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.h b/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.h index 190f177e7..bc97550de 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumUserNotify.h @@ -29,6 +29,7 @@ class GxsForumUserNotify : public GxsUserNotify public: GxsForumUserNotify(RsGxsIfaceHelper *ifaceImpl, QObject *parent = 0); + virtual bool getServiceStatistics(GxsServiceStatistic& stat) override; virtual bool hasSetting(QString *name, QString *group);