mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
prevent to remove old forum messages that have follow-ups.
This commit is contained in:
parent
52a0aea0dc
commit
bd9a8ae3aa
@ -82,14 +82,23 @@ bool RsGxsMessageCleanUp::clean()
|
|||||||
for(; mit != result.end(); ++mit)
|
for(; mit != result.end(); ++mit)
|
||||||
{
|
{
|
||||||
std::vector<RsGxsMsgMetaData*>& metaV = mit->second;
|
std::vector<RsGxsMsgMetaData*>& metaV = mit->second;
|
||||||
std::vector<RsGxsMsgMetaData*>::iterator vit = metaV.begin();
|
|
||||||
|
|
||||||
for(; vit != metaV.end(); )
|
// First, make a map of which message have a child message. This allows to only delete messages that dont have child messages.
|
||||||
|
// A more accurate way to go would be to compute the time of the oldest message and possibly delete all the branch, but in the
|
||||||
|
// end the message tree will be deleted slice after slice, which should still be reasonnably fast.
|
||||||
|
//
|
||||||
|
std::set<RsGxsMessageId> messages_with_kids ;
|
||||||
|
|
||||||
|
for( uint32_t i=0;i<metaV.size();++i)
|
||||||
|
if(!metaV[i]->mParentId.isNull())
|
||||||
|
messages_with_kids.insert(metaV[i]->mParentId) ;
|
||||||
|
|
||||||
|
for( uint32_t i=0;i<metaV.size();++i)
|
||||||
{
|
{
|
||||||
RsGxsMsgMetaData* meta = *vit;
|
RsGxsMsgMetaData* meta = metaV[i];
|
||||||
|
|
||||||
// check if expired
|
// check if expired
|
||||||
bool remove = store_period > 0 && (meta->mPublishTs + store_period) < now;
|
bool remove = store_period > 0 && ((meta->mPublishTs + store_period) < now) && (messages_with_kids.find(meta->mMsgId)==messages_with_kids.end());
|
||||||
|
|
||||||
// check client does not want the message kept regardless of age
|
// check client does not want the message kept regardless of age
|
||||||
remove &= !(meta->mMsgStatus & GXS_SERV::GXS_MSG_STATUS_KEEP);
|
remove &= !(meta->mMsgStatus & GXS_SERV::GXS_MSG_STATUS_KEEP);
|
||||||
@ -106,7 +115,6 @@ bool RsGxsMessageCleanUp::clean()
|
|||||||
}
|
}
|
||||||
|
|
||||||
delete meta;
|
delete meta;
|
||||||
vit = metaV.erase(vit);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user