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 ;
}