From 7afb91d1db4f0123d9af93ac58afe6e314c9b59c Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 5 Dec 2016 22:14:48 +0100 Subject: [PATCH] added machinery to allow to set/get sync and store periods for GXS groups --- libretroshare/src/gxs/rsgenexchange.cc | 48 ++++++++++++++++ libretroshare/src/gxs/rsgenexchange.h | 19 +++++-- libretroshare/src/gxs/rsgxsnetservice.cc | 23 ++++++++ libretroshare/src/gxs/rsgxsnetservice.h | 5 ++ libretroshare/src/gxs/rsnxs.h | 9 ++- libretroshare/src/retroshare/rsgxsiface.h | 10 +++- .../src/retroshare/rsgxsifacehelper.h | 26 ++++++++- .../src/gui/Posted/PostedDialog.cpp | 4 +- retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp | 3 - .../src/gui/gxs/GxsGroupFrameDialog.cpp | 57 +++++++++++++++++-- .../src/gui/gxs/GxsGroupFrameDialog.h | 2 + .../src/gui/gxschannels/GxsChannelDialog.cpp | 4 +- .../src/gui/gxsforums/GxsForumsDialog.cpp | 12 +--- 13 files changed, 188 insertions(+), 34 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index 2e38d4ca1..13d9b4634 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -1608,6 +1608,54 @@ void RsGenExchange::publishMsg(uint32_t& token, RsGxsMsgItem *msgItem) } +uint32_t RsGenExchange::getDefaultSyncPeriod() +{ + RS_STACK_MUTEX(mGenMtx) ; + + if(mNetService != NULL) + return mNetService->getDefaultSyncAge(); + else + { + std::cerr << "(EE) No network service available. Cannot get default sync period. " << std::endl; + return 0; + } +} + +uint32_t RsGenExchange::getSyncPeriod(const RsGxsGroupId& grpId) +{ + RS_STACK_MUTEX(mGenMtx) ; + + if(mNetService != NULL) + return mNetService->getSyncAge(grpId); + else + return mNetService->getDefaultSyncAge(); +} + +void RsGenExchange::setSyncPeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) +{ + if(mNetService != NULL) + return mNetService->setKeepAge(grpId,age_in_secs) ; + else + std::cerr << "(EE) No network service available. Cannot set storage period. " << std::endl; +} + +uint32_t RsGenExchange::getStoragePeriod(const RsGxsGroupId& grpId) +{ + RS_STACK_MUTEX(mGenMtx) ; + + if(mNetService != NULL) + return mNetService->getKeepAge(grpId,MESSAGE_STORE_PERIOD) ; + else + return MESSAGE_STORE_PERIOD; +} +void RsGenExchange::setStoragePeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) +{ + if(mNetService != NULL) + return mNetService->setKeepAge(grpId,age_in_secs) ; + else + std::cerr << "(EE) No network service available. Cannot set storage period. " << std::endl; +} + void RsGenExchange::setGroupSubscribeFlags(uint32_t& token, const RsGxsGroupId& grpId, const uint32_t& flag, const uint32_t& mask) { /* TODO APPLY MASK TO FLAGS */ diff --git a/libretroshare/src/gxs/rsgenexchange.h b/libretroshare/src/gxs/rsgenexchange.h index 1f6032853..5ee37add3 100644 --- a/libretroshare/src/gxs/rsgenexchange.h +++ b/libretroshare/src/gxs/rsgenexchange.h @@ -611,11 +611,6 @@ public: */ void updateGroupLastMsgTimeStamp(uint32_t& token, const RsGxsGroupId& grpId); - /*! - * @return storage time of messages in months - */ - int getStoragePeriod(){ return MESSAGE_STORE_PERIOD/(60*60*24*31);} - /*! * sets the msg status flag * @param token this is set to token value associated to this request @@ -647,6 +642,19 @@ public: */ bool getGroupServerUpdateTS(const RsGxsGroupId& gid,time_t& grp_server_update_TS,time_t& msg_server_update_TS) ; + /*! + * \brief getDefaultStoragePeriod. All times in seconds. + * \return + */ + virtual uint32_t getDefaultStoragePeriod() { return MESSAGE_STORE_PERIOD; } + + virtual uint32_t getStoragePeriod(const RsGxsGroupId& grpId) ; + virtual void setStoragePeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) ; + + virtual uint32_t getDefaultSyncPeriod(); + virtual uint32_t getSyncPeriod(const RsGxsGroupId& grpId) ; + virtual void setSyncPeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) ; + protected: /** Notifications **/ @@ -860,7 +868,6 @@ private: std::vector > mMsgPendingValidate; typedef std::vector > NxsMsgPendingVect; - const uint32_t MESSAGE_STORE_PERIOD; bool mCleaning; diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 66249dac5..7505c1720 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -4431,6 +4431,29 @@ void RsGxsNetService::setKeepAge(const RsGxsGroupId &grpId, uint32_t age_in_secs } } +uint32_t RsGxsNetService::getSyncAge(const RsGxsGroupId& grpId) +{ + RS_STACK_MUTEX(mNxsMutex) ; + + GrpConfigMap::const_iterator it = mServerGrpConfigMap.find(grpId) ; + + if(it == mServerGrpConfigMap.end()) + return mSYNC_PERIOD ; + else + return it->second.msg_keep_delay ; +} +uint32_t RsGxsNetService::getKeepAge(const RsGxsGroupId& grpId,uint32_t default_value) +{ + RS_STACK_MUTEX(mNxsMutex) ; + + GrpConfigMap::const_iterator it = mServerGrpConfigMap.find(grpId) ; + + if(it == mServerGrpConfigMap.end()) + return default_value ; + else + return it->second.msg_req_delay ; +} + int RsGxsNetService::requestGrp(const std::list& grpId, const RsPeerId& peerId) { RS_STACK_MUTEX(mNxsMutex) ; diff --git a/libretroshare/src/gxs/rsgxsnetservice.h b/libretroshare/src/gxs/rsgxsnetservice.h index 28f001de8..a29644698 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.h +++ b/libretroshare/src/gxs/rsgxsnetservice.h @@ -109,6 +109,11 @@ public: virtual void setSyncAge(const RsGxsGroupId& grpId,uint32_t age_in_secs); virtual void setKeepAge(const RsGxsGroupId& grpId,uint32_t age_in_secs); + virtual uint32_t getSyncAge(const RsGxsGroupId& id); + virtual uint32_t getKeepAge(const RsGxsGroupId& id,uint32_t default_value); + + virtual uint32_t getDefaultSyncAge() { return mSYNC_PERIOD ; } + /*! * pauses synchronisation of subscribed groups and request for group id * from peers diff --git a/libretroshare/src/gxs/rsnxs.h b/libretroshare/src/gxs/rsnxs.h index 6c4fbba0c..0613560b0 100644 --- a/libretroshare/src/gxs/rsnxs.h +++ b/libretroshare/src/gxs/rsnxs.h @@ -67,8 +67,13 @@ public: * Use this to set how far back synchronisation of messages should take place * @param age in seconds the max age a sync/store item can to be allowed in a synchronisation */ - virtual void setSyncAge(const RsGxsGroupId& id,uint32_t age_in_secs) = 0; - virtual void setKeepAge(const RsGxsGroupId& id,uint32_t age_in_secs) = 0; + virtual void setSyncAge(const RsGxsGroupId& id,uint32_t age_in_secs) =0; + virtual void setKeepAge(const RsGxsGroupId& id,uint32_t age_in_secs) =0; + + virtual uint32_t getSyncAge(const RsGxsGroupId& id) =0; + virtual uint32_t getKeepAge(const RsGxsGroupId& id,uint32_t default_value) =0; + + virtual uint32_t getDefaultSyncAge() =0; /*! * Initiates a search through the network diff --git a/libretroshare/src/retroshare/rsgxsiface.h b/libretroshare/src/retroshare/rsgxsiface.h index a8a28f96f..8eb1ac6ae 100644 --- a/libretroshare/src/retroshare/rsgxsiface.h +++ b/libretroshare/src/retroshare/rsgxsiface.h @@ -172,9 +172,15 @@ public: virtual void setGroupReputationCutOff(uint32_t& token, const RsGxsGroupId& grpId, int CutOff) = 0; /*! - * @return storage time of messages in months + * @return storage/sync time of messages in secs */ - virtual int getStoragePeriod() = 0; + virtual uint32_t getDefaultStoragePeriod() = 0; + virtual uint32_t getStoragePeriod(const RsGxsGroupId& grpId) = 0; + virtual void setStoragePeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) = 0; + + virtual uint32_t getDefaultSyncPeriod() = 0; + virtual uint32_t getSyncPeriod(const RsGxsGroupId& grpId) = 0; + virtual void setSyncPeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) = 0; }; diff --git a/libretroshare/src/retroshare/rsgxsifacehelper.h b/libretroshare/src/retroshare/rsgxsifacehelper.h index 198d1466f..e23f1aeb1 100644 --- a/libretroshare/src/retroshare/rsgxsifacehelper.h +++ b/libretroshare/src/retroshare/rsgxsifacehelper.h @@ -209,11 +209,31 @@ public: } /*! - * @return storage time of messages in months + * @return storage/sync time of messages in secs */ - int getStoragePeriod() + uint32_t getDefaultStoragePeriod() { - return mGxs->getStoragePeriod(); + return mGxs->getDefaultStoragePeriod(); + } + uint32_t getStoragePeriod(const RsGxsGroupId& grpId) + { + return mGxs->getStoragePeriod(grpId); + } + void setStoragePeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) + { + mGxs->setStoragePeriod(grpId,age_in_secs); + } + uint32_t getDefaultSyncPeriod() + { + return mGxs->getDefaultSyncPeriod(); + } + uint32_t getSyncPeriod(const RsGxsGroupId& grpId) + { + return mGxs->getSyncPeriod(grpId); + } + void setSyncPeriod(const RsGxsGroupId& grpId,uint32_t age_in_secs) + { + mGxs->setSyncPeriod(grpId,age_in_secs); } private: diff --git a/retroshare-gui/src/gui/Posted/PostedDialog.cpp b/retroshare-gui/src/gui/Posted/PostedDialog.cpp index d69977fd4..d60387227 100644 --- a/retroshare-gui/src/gui/Posted/PostedDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedDialog.cpp @@ -64,8 +64,8 @@ QString PostedDialog::getHelpString() const

Links can be commented by subscribed users. A promotion system also gives the opportunity to \ enlight important links.

\

There is no restriction on which links are shared. Be careful when clicking on them.

\ -

Posted links get deleted after %1 months.

\ - ").arg(QString::number(rsPosted->getStoragePeriod())); +

Posted links are kept for %1 days, and sync-ed over the last %2 days, unless you change this.

\ + ").arg(QString::number(rsPosted->getDefaultStoragePeriod()/86400)).arg(QString::number(rsPosted->getDefaultSyncPeriod()/86400)); return hlp_str ; } diff --git a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp index 376d04bd6..803c0f6df 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp @@ -576,9 +576,6 @@ bool GxsGroupDialog::prepareGroupMetaData(RsGroupMetaData &meta) meta.mGroupFlags = flags; meta.mSignFlags = getGroupSignFlags(); - meta.mGrpDistribution_MaxStorageAge = ui.keepLimit_SB->value() * 86400 ; - meta.mGrpDistribution_MaxRequestAge = ui.syncLimit_SB->value() * 86400 ; - if (!setCircleParameters(meta)){ std::cerr << "GxsGroupDialog::prepareGroupMetaData()"; std::cerr << " Invalid Circles"; diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp index 0ab1f6f33..6029fb2c1 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp @@ -285,15 +285,29 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) action = contextMnu.addAction(QIcon(IMAGE_EDIT), tr("Edit Details"), this, SLOT(editGroupDetails())); action->setEnabled (!mGroupId.isNull() && isAdmin); + QMenu *ctxMenu2 = contextMnu.addMenu(tr("Store posts for at most...")) ; + ctxMenu2->addAction(tr("5 days" ),this,SLOT(setStorePostDelay()))->setData(QVariant( 5 * 86400)) ; + ctxMenu2->addAction(tr("2 weeks" ),this,SLOT(setStorePostDelay()))->setData(QVariant( 15 * 86400)) ; + ctxMenu2->addAction(tr("1 month" ),this,SLOT(setStorePostDelay()))->setData(QVariant( 30 * 86400)) ; + ctxMenu2->addAction(tr("3 months"),this,SLOT(setStorePostDelay()))->setData(QVariant( 90 * 86400)) ; + ctxMenu2->addAction(tr("6 months"),this,SLOT(setStorePostDelay()))->setData(QVariant(180 * 86400)) ; + ctxMenu2->addAction(tr("1 year" ),this,SLOT(setStorePostDelay()))->setData(QVariant( 0 * 86400)) ; + ctxMenu2->addAction(tr("Indefinitely")) ; + + ctxMenu2 = contextMnu.addMenu(tr("Synchronise posts of last...")) ; + ctxMenu2->addAction(tr("5 days" ),this,SLOT(setSyncPostDelay()))->setData(QVariant( 5 * 86400)) ; + ctxMenu2->addAction(tr("2 weeks" ),this,SLOT(setSyncPostDelay()))->setData(QVariant( 15 * 86400)) ; + ctxMenu2->addAction(tr("1 month" ),this,SLOT(setSyncPostDelay()))->setData(QVariant( 30 * 86400)) ; + ctxMenu2->addAction(tr("3 months"),this,SLOT(setSyncPostDelay()))->setData(QVariant( 90 * 86400)) ; + ctxMenu2->addAction(tr("6 months"),this,SLOT(setSyncPostDelay()))->setData(QVariant(180 * 86400)) ; + ctxMenu2->addAction(tr("1 year" ),this,SLOT(setSyncPostDelay()))->setData(QVariant( 0 * 86400)) ; + ctxMenu2->addAction(tr("Indefinitely")) ; + if (shareKeyType()) { action = contextMnu.addAction(QIcon(IMAGE_SHARE), tr("Share publish permissions"), this, SLOT(sharePublishKey())); action->setEnabled(!mGroupId.isNull() && isPublisher); } - //if (!mGroupId.isNull() && isPublisher && !isAdmin) { - // contextMnu.addAction(QIcon(":/images/settings16.png"), tr("Restore Publish Rights" ), this, SLOT(restoreGroupKeys())); - //} - if (getLinkType() != RetroShareLink::TYPE_UNKNOWN) { action = contextMnu.addAction(QIcon(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyGroupLink())); action->setEnabled(!mGroupId.isNull()); @@ -318,6 +332,41 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) contextMnu.exec(QCursor::pos()); } +void GxsGroupFrameDialog::setStorePostsDelay() +{ + QAction *action = dynamic_cast(sender()) ; + + if(!action || mGroupId.isNull()) + { + std::cerr << "(EE) Cannot find action/group that called me! Group is " << mGroupId << ", action is " << (void*)action << " " << __PRETTY_FUNCTION__ << std::endl; + return; + } + + uint32_t duration = action->data().toUInt() ; + + std::cerr << "Data is " << duration << std::endl; + + mInterface->setStoragePeriod(mGroupId,duration) ; +} + + +void GxsGroupFrameDialog::setSyncPostsDelay() +{ + QAction *action = dynamic_cast(sender()) ; + + if(!action || mGroupId.isNull()) + { + std::cerr << "(EE) Cannot find action/group that called me! Group is " << mGroupId << ", action is " << (void*)action << " " << __PRETTY_FUNCTION__ << std::endl; + return; + } + + uint32_t duration = action->data().toUInt() ; + + std::cerr << "Data is " << duration << std::endl; + + mInterface->setSyncPeriod(mGroupId,duration) ; +} + void GxsGroupFrameDialog::restoreGroupKeys(void) { QMessageBox::warning(this, "RetroShare", "ToDo"); diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h index fa5e19582..3b74b8214 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h @@ -99,6 +99,8 @@ private slots: /** Create the context popup menu and it's submenus */ void groupTreeCustomPopupMenu(QPoint point); void settingsChanged(); + void setSyncPostsDelay(); + void setStorePostsDelay(); void restoreGroupKeys(); void newGroup(); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp index cce28a407..1bd22504e 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp @@ -65,8 +65,8 @@ QString GxsChannelDialog::getHelpString() const the posting rights or the reading rights with friend Retroshare nodes.

\

Channels can be made anonymous, or attached to a Retroshare identity so that readers can contact you if needed.\ Enable \"Allow Comments\" if you want to let users comment on your posts.

\ -

Channel posts get deleted after %1 months.

\ - ").arg(QString::number(rsGxsChannels->getStoragePeriod())); +

Channel posts are kept for %1 days, and sync-ed over the last %2 days, unless you change this.

\ + ").arg(QString::number(rsGxsChannels->getDefaultStoragePeriod()/86400)).arg(QString::number(rsGxsChannels->getDefaultSyncPeriod()/86400)); return hlp_str ; } diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp index 61b0c59c1..9dcbc24f5 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp @@ -54,16 +54,8 @@ QString GxsForumsDialog::getHelpString() const

Retroshare Forums look like internet forums, but they work in a decentralized way

\

You see forums your friends are subscribed to, and you forward subscribed forums to \ your friends. This automatically promotes interesting forums in the network.

\ -

Forum messages get deleted after %1 months.

\ - ").arg(QString::number(rsGxsForums->getStoragePeriod())); - - // not true anymore in v0.6 - /* -

Forums are either Authenticated () \ - or anonymous (). The former \ - class is more resistant to spamming because posts are \ - cryptographically signed using a Retroshare pseudo-identity.

") ; - */ +

Forum messages are kept for %1 days and sync-ed over the last %2 days, unless you configure it otherwise.

\ + ").arg(QString::number(rsGxsForums->getDefaultStoragePeriod()/86400)).arg(QString::number(rsGxsForums->getDefaultSyncPeriod()/86400)); return hlp_str ; }