mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-17 21:40:36 -04:00
added config saving feature to distrib services. you can now save configurations that is local to
a particular distrib service (forum, channels, and blogs) -- needs full rs-gui recompile - added ability of forum's to save 'msg read' status (meant to supercede current similar feature implement in qt gui side) - updated test for distrib items, added forum items test - added doxygen comments for rsinit and others. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3314 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
cee8600a93
commit
e40c469aa4
12 changed files with 227 additions and 21 deletions
|
@ -510,7 +510,19 @@ void p3Blogs::locked_notifyGroupChanged(GroupInfo &grp, uint32_t flags)
|
|||
return p3GroupDistrib::locked_notifyGroupChanged(grp, flags);
|
||||
}
|
||||
|
||||
//TODO: if you want to enable config saving and loading implement this
|
||||
bool p3Blogs::childLoadList(std::list<RsItem* >& configSaves)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO:
|
||||
std::list<RsItem *> p3Blogs::childSaveList()
|
||||
{
|
||||
std::list<RsItem *> saveL;
|
||||
|
||||
return saveL;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
|
||||
|
|
|
@ -118,8 +118,8 @@ virtual RsSerialType *createSerialiser();
|
|||
virtual bool locked_checkDistribMsg(RsDistribMsg *msg);
|
||||
virtual RsDistribGrp *locked_createPublicDistribGrp(GroupInfo &info);
|
||||
virtual RsDistribGrp *locked_createPrivateDistribGrp(GroupInfo &info);
|
||||
|
||||
|
||||
virtual bool childLoadList(std::list<RsItem* >& configSaves);
|
||||
virtual std::list<RsItem *> childSaveList();
|
||||
/****************************************/
|
||||
|
||||
private:
|
||||
|
|
|
@ -757,6 +757,17 @@ void p3Channels::cleanUpOldFiles(){
|
|||
return;
|
||||
}
|
||||
|
||||
//TODO: if you want to config saving and loading for channel distrib service implement this method further
|
||||
bool p3Channels::childLoadList(std::list<RsItem* >& configSaves)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
std::list<RsItem *> p3Channels::childSaveList()
|
||||
{
|
||||
return saveList;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
|
||||
#if 0
|
||||
|
|
|
@ -92,6 +92,8 @@ virtual RsSerialType *createSerialiser();
|
|||
virtual bool locked_checkDistribMsg(RsDistribMsg *msg);
|
||||
virtual RsDistribGrp *locked_createPublicDistribGrp(GroupInfo &info);
|
||||
virtual RsDistribGrp *locked_createPrivateDistribGrp(GroupInfo &info);
|
||||
virtual bool childLoadList(std::list<RsItem* >& configSaves);
|
||||
virtual std::list<RsItem *> childSaveList();
|
||||
|
||||
|
||||
/****************************************/
|
||||
|
@ -102,6 +104,7 @@ bool cpyMsgFileToChFldr(std::string path, std::string fname, std::string chId, b
|
|||
|
||||
RsFiles *mRsFiles;
|
||||
std::string mChannelsDir;
|
||||
std::list<RsItem *> saveList;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -1424,6 +1424,27 @@ std::list<RsItem *> p3GroupDistrib::saveList(bool &cleanup)
|
|||
|
||||
}
|
||||
|
||||
std::list<RsItem *> childSaveL = childSaveList();
|
||||
std::list<RsItem *>::iterator cit = childSaveL.begin();
|
||||
RsSerialType *childSer = createSerialiser();
|
||||
uint32_t pktSize = 0;
|
||||
unsigned char *data = NULL;
|
||||
|
||||
for(; cit != childSaveL.end() ; cit++)
|
||||
{
|
||||
RsDistribConfigData* childConfig = new RsDistribConfigData();
|
||||
|
||||
pktSize = childSer->size(*cit);
|
||||
data = new unsigned char[pktSize];
|
||||
childSer->serialise(*cit, data, &pktSize);
|
||||
childConfig->service_data.setBinData(data, pktSize);
|
||||
delete[] data;
|
||||
saveData.push_back(childConfig);
|
||||
saveCleanupList.push_back(childConfig);
|
||||
}
|
||||
|
||||
delete childSer;
|
||||
|
||||
return saveData;
|
||||
}
|
||||
|
||||
|
@ -1445,6 +1466,12 @@ void p3GroupDistrib::saveDone()
|
|||
bool p3GroupDistrib::loadList(std::list<RsItem *> load)
|
||||
{
|
||||
std::list<RsItem *>::iterator lit;
|
||||
|
||||
/* for child config data */
|
||||
std::list<RsItem* > childLoadL;
|
||||
RsSerialType* childSer = createSerialiser();
|
||||
uint32_t pktSize;
|
||||
|
||||
for(lit = load.begin(); lit != load.end(); lit++)
|
||||
{
|
||||
/* decide what type it is */
|
||||
|
@ -1452,6 +1479,7 @@ bool p3GroupDistrib::loadList(std::list<RsItem *> load)
|
|||
RsDistribGrp *newGrp = NULL;
|
||||
RsDistribGrpKey *newKey = NULL;
|
||||
RsDistribSignedMsg *newMsg = NULL;
|
||||
RsDistribConfigData* newChildConfig = NULL;
|
||||
|
||||
if ((newGrp = dynamic_cast<RsDistribGrp *>(*lit)))
|
||||
{
|
||||
|
@ -1469,12 +1497,23 @@ bool p3GroupDistrib::loadList(std::list<RsItem *> load)
|
|||
newMsg->PeerId(mOwnId);
|
||||
loadMsg(newMsg, mOwnId, false); /* false so it'll pushed to PendingPublish list */
|
||||
}
|
||||
else if ((newChildConfig = dynamic_cast<RsDistribConfigData *>(*lit)))
|
||||
{
|
||||
RsItem* childConfigItem = childSer->deserialise(newChildConfig->service_data.bin_data,
|
||||
&newChildConfig->service_data.bin_len);
|
||||
|
||||
childLoadL.push_back(childConfigItem);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* no need to republish until something new comes in */
|
||||
RsStackMutex stack(distribMtx); /******* STACK LOCKED MUTEX ***********/
|
||||
mGroupsRepublish = false;
|
||||
|
||||
childLoadList(childLoadL); // send configurations down to child
|
||||
|
||||
mGroupsRepublish = false;
|
||||
delete childSer;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -420,6 +420,16 @@ class p3GroupDistrib: public CacheSource, public CacheStore, public p3Config, pu
|
|||
virtual void saveDone();
|
||||
virtual bool loadList(std::list<RsItem *> load);
|
||||
|
||||
/*!
|
||||
* called by top class, child can use to save configs
|
||||
*/
|
||||
virtual std::list<RsItem *> childSaveList() = 0;
|
||||
|
||||
/*!
|
||||
* called by top class, child can use to load configs
|
||||
*/
|
||||
virtual bool childLoadList(std::list<RsItem *>& configSaves) = 0;
|
||||
|
||||
/***************************************************************************************/
|
||||
/***************************************************************************************/
|
||||
|
||||
|
|
|
@ -262,9 +262,18 @@ bool p3Forums::ForumMessageSend(ForumMsgInfo &info)
|
|||
{
|
||||
bool signIt = (info.msgflags == RS_DISTRIB_AUTHEN_REQ);
|
||||
|
||||
createForumMsg(info.forumId, info.parentId,
|
||||
std::string mId = createForumMsg(info.forumId, info.parentId,
|
||||
info.title, info.msg, signIt);
|
||||
|
||||
setMessageStatus(info.forumId, mId, FORUM_MSG_STATUS_READ);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool p3Forums::setMessageStatus(const std::string& fId,const std::string& mId,const uint32_t status)
|
||||
{
|
||||
setReadStatus(fId, mId, status);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -517,4 +526,60 @@ void p3Forums::loadDummyData()
|
|||
mForumsChanged = true;
|
||||
}
|
||||
|
||||
std::list<RsItem* > p3Forums::childSaveList()
|
||||
{
|
||||
return mSaveList;
|
||||
}
|
||||
|
||||
void p3Forums::setReadStatus(const std::string& forumId, const std::string& msgId, const uint32_t status)
|
||||
{
|
||||
RsStackMutex stack(distribMtx);
|
||||
|
||||
std::list<RsForumReadStatus *>::iterator lit = mReadStatus.begin();
|
||||
|
||||
for(; lit != mReadStatus.end(); lit++)
|
||||
{
|
||||
|
||||
if((*lit)->forumId == forumId)
|
||||
{
|
||||
(*lit)->msgReadStatus[msgId] = status;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// if forum id does not exist create one
|
||||
if(lit == mReadStatus.end())
|
||||
{
|
||||
RsForumReadStatus* rsi = new RsForumReadStatus();
|
||||
rsi->forumId = forumId;
|
||||
rsi->msgReadStatus[msgId] = status;
|
||||
mReadStatus.push_back(rsi);
|
||||
mSaveList.push_back(rsi);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool p3Forums::childLoadList(std::list<RsItem* >& configSaves)
|
||||
{
|
||||
RsForumReadStatus* drs = NULL;
|
||||
std::list<RsItem* >::iterator it;
|
||||
|
||||
for(it = configSaves.begin(); it != configSaves.end(); it++)
|
||||
{
|
||||
if(NULL != (drs = dynamic_cast<RsForumReadStatus* >(*it)))
|
||||
{
|
||||
mReadStatus.push_back(drs);
|
||||
mSaveList.push_back(drs);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "p3Forums::childLoadList(): Configs items loaded were incorrect!"
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ class RsForumMsg: public RsDistribMsg
|
|||
|
||||
#endif
|
||||
|
||||
const uint32_t FORUM_MSG_STATUS_READ = 1;
|
||||
|
||||
class p3Forums: public p3GroupDistrib, public RsForums
|
||||
{
|
||||
|
@ -90,8 +91,9 @@ virtual bool getForumList(std::list<ForumInfo> &forumList);
|
|||
virtual bool getForumThreadList(std::string fId, std::list<ThreadInfoSummary> &msgs);
|
||||
virtual bool getForumThreadMsgList(std::string fId, std::string tId, std::list<ThreadInfoSummary> &msgs);
|
||||
virtual bool getForumMessage(std::string fId, std::string mId, ForumMsgInfo &msg);
|
||||
|
||||
virtual void setReadStatus(const std::string& forumId,const std::string& msgId,const uint32_t status);
|
||||
virtual bool ForumMessageSend(ForumMsgInfo &info);
|
||||
virtual bool setMessageStatus(const std::string& fId, const std::string& mId,const uint32_t status);
|
||||
|
||||
virtual bool forumSubscribe(std::string fId, bool subscribe);
|
||||
|
||||
|
@ -115,6 +117,8 @@ virtual RsSerialType *createSerialiser();
|
|||
virtual bool locked_checkDistribMsg(RsDistribMsg *msg);
|
||||
virtual RsDistribGrp *locked_createPublicDistribGrp(GroupInfo &info);
|
||||
virtual RsDistribGrp *locked_createPrivateDistribGrp(GroupInfo &info);
|
||||
virtual bool childLoadList(std::list<RsItem *>& );
|
||||
virtual std::list<RsItem *> childSaveList();
|
||||
|
||||
|
||||
/****************************************/
|
||||
|
@ -128,6 +132,10 @@ std::string createForumMsg(std::string fId, std::string pId,
|
|||
|
||||
bool mForumsChanged;
|
||||
std::string mForumsDir;
|
||||
std::list<RsItem *> mSaveList; // store save data
|
||||
|
||||
std::list<RsForumReadStatus *> mReadStatus;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue