mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
added photo comment serialisation and addition
reimplemented getmsgrelatedinfo and getmsginfo as previous was incorrectly done, rstokenservice for msgs buggy now updated test, commiting to transfer work to windows git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-gxs-b1@5576 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
33d001898f
commit
2e3e5b4ee4
@ -807,9 +807,9 @@ void RsDataService::retrieveMessages(RetroCursor *c, std::vector<RsNxsMsg *> &ms
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RsDataService::retrieveGxsMsgMetaData(GxsMsgReq& reqIds, GxsMsgMetaResult &msgMeta)
|
int RsDataService::retrieveGxsMsgMetaData(const GxsMsgReq& reqIds, GxsMsgMetaResult &msgMeta)
|
||||||
{
|
{
|
||||||
GxsMsgReq::iterator mit = reqIds.begin();
|
GxsMsgReq::const_iterator mit = reqIds.begin();
|
||||||
|
|
||||||
for(; mit != reqIds.end(); mit++)
|
for(; mit != reqIds.end(); mit++)
|
||||||
{
|
{
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
* @param cache whether to store retrieval in mem for faster later retrieval
|
* @param cache whether to store retrieval in mem for faster later retrieval
|
||||||
* @return error code
|
* @return error code
|
||||||
*/
|
*/
|
||||||
int retrieveGxsMsgMetaData(GxsMsgReq& reqIds, GxsMsgMetaResult& msgMeta);
|
int retrieveGxsMsgMetaData(const GxsMsgReq& reqIds, GxsMsgMetaResult& msgMeta);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* remove msgs in data store
|
* remove msgs in data store
|
||||||
|
@ -151,7 +151,7 @@ public:
|
|||||||
* @param cache whether to store retrieval in mem for faster later retrieval
|
* @param cache whether to store retrieval in mem for faster later retrieval
|
||||||
* @return error code
|
* @return error code
|
||||||
*/
|
*/
|
||||||
virtual int retrieveGxsMsgMetaData(GxsMsgReq& msgIds, GxsMsgMetaResult& msgMeta) = 0;
|
virtual int retrieveGxsMsgMetaData(const GxsMsgReq& msgIds, GxsMsgMetaResult& msgMeta) = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* remove msgs in data store listed in msgIds param
|
* remove msgs in data store listed in msgIds param
|
||||||
|
@ -270,11 +270,11 @@ bool RsGxsDataAccess::requestMsgInfo(uint32_t &token, uint32_t ansType,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RsGxsDataAccess::requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts,
|
bool RsGxsDataAccess::requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts,
|
||||||
const GxsMsgReq& msgIds)
|
const RsGxsGrpMsgIdPair &msgIds)
|
||||||
{
|
{
|
||||||
|
|
||||||
MsgRelatedInfoReq* req = new MsgRelatedInfoReq();
|
MsgRelatedInfoReq* req = new MsgRelatedInfoReq();
|
||||||
req->mMsgIds = msgIds;
|
req->mMsgId = msgIds;
|
||||||
|
|
||||||
generateToken(token);
|
generateToken(token);
|
||||||
|
|
||||||
@ -723,7 +723,13 @@ bool RsGxsDataAccess::getGroupList(GroupIdReq* req)
|
|||||||
bool RsGxsDataAccess::getMsgData(MsgDataReq* req)
|
bool RsGxsDataAccess::getMsgData(MsgDataReq* req)
|
||||||
{
|
{
|
||||||
GxsMsgResult result;
|
GxsMsgResult result;
|
||||||
mDataStore->retrieveNxsMsgs(req->mMsgIds, result, true, true);
|
|
||||||
|
GxsMsgReq msgIdOut;
|
||||||
|
|
||||||
|
// filter based on options
|
||||||
|
getMsgList(req->mMsgIds, req->Options, msgIdOut);
|
||||||
|
|
||||||
|
mDataStore->retrieveNxsMsgs(msgIdOut, result, true, true);
|
||||||
|
|
||||||
req->mMsgData = result;
|
req->mMsgData = result;
|
||||||
return true;
|
return true;
|
||||||
@ -733,22 +739,24 @@ bool RsGxsDataAccess::getMsgData(MsgDataReq* req)
|
|||||||
bool RsGxsDataAccess::getMsgSummary(MsgMetaReq* req)
|
bool RsGxsDataAccess::getMsgSummary(MsgMetaReq* req)
|
||||||
{
|
{
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
mDataStore->retrieveGxsMsgMetaData(req->mMsgIds, result);
|
|
||||||
|
GxsMsgReq msgIdOut;
|
||||||
|
|
||||||
|
// filter based on options
|
||||||
|
getMsgList(req->mMsgIds, req->Options, msgIdOut);
|
||||||
|
|
||||||
|
mDataStore->retrieveGxsMsgMetaData(msgIdOut, result);
|
||||||
req->mMsgMetaData = result;
|
req->mMsgMetaData = result;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq* req)
|
bool RsGxsDataAccess::getMsgList(const GxsMsgReq& msgIds, const RsTokReqOptionsV2& opts, GxsMsgReq msgIdsOut)
|
||||||
{
|
{
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
|
|
||||||
const RsTokReqOptionsV2& opts = req->Options;
|
mDataStore->retrieveGxsMsgMetaData(msgIds, result);
|
||||||
|
|
||||||
mDataStore->retrieveGxsMsgMetaData(req->mMsgIds, result);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* CASEs this handles.
|
/* CASEs this handles.
|
||||||
* Input is groupList + Flags.
|
* Input is groupList + Flags.
|
||||||
@ -798,105 +806,104 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq* req)
|
|||||||
{
|
{
|
||||||
std::vector<RsGxsMsgMetaData*>::const_iterator vit = metaV.begin();
|
std::vector<RsGxsMsgMetaData*>::const_iterator vit = metaV.begin();
|
||||||
|
|
||||||
|
|
||||||
// RUN THROUGH ALL MSGS... in map origId -> TS.
|
// RUN THROUGH ALL MSGS... in map origId -> TS.
|
||||||
std::map<RsGxsGroupId, std::pair<RsGxsMessageId, time_t> > origMsgTs;
|
std::map<RsGxsGroupId, std::pair<RsGxsMessageId, time_t> > origMsgTs;
|
||||||
std::map<RsGxsGroupId, std::pair<RsGxsMessageId, time_t> >::iterator oit;
|
std::map<RsGxsGroupId, std::pair<RsGxsMessageId, time_t> >::iterator oit;
|
||||||
|
|
||||||
for(; vit != metaV.end(); vit++)
|
for(; vit != metaV.end(); vit++)
|
||||||
{
|
{
|
||||||
RsGxsMsgMetaData* msgMeta = *vit;
|
RsGxsMsgMetaData* msgMeta = *vit;
|
||||||
|
|
||||||
/* if we are grabbing thread Head... then parentId == empty. */
|
/* if we are grabbing thread Head... then parentId == empty. */
|
||||||
if (onlyThreadHeadMsgs)
|
if (onlyThreadHeadMsgs)
|
||||||
|
{
|
||||||
|
if (!(msgMeta->mParentId.empty()))
|
||||||
{
|
{
|
||||||
if (!(msgMeta->mParentId.empty()))
|
continue;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
oit = origMsgTs.find(msgMeta->mOrigMsgId);
|
oit = origMsgTs.find(msgMeta->mOrigMsgId);
|
||||||
bool addMsg = false;
|
bool addMsg = false;
|
||||||
if (oit == origMsgTs.end())
|
if (oit == origMsgTs.end())
|
||||||
{
|
{
|
||||||
std::cerr << "RsGxsDataAccess::getMsgList() Found New OrigMsgId: ";
|
std::cerr << "RsGxsDataAccess::getMsgList() Found New OrigMsgId: ";
|
||||||
std::cerr << msgMeta->mOrigMsgId;
|
std::cerr << msgMeta->mOrigMsgId;
|
||||||
std::cerr << " MsgId: " << msgMeta->mMsgId;
|
std::cerr << " MsgId: " << msgMeta->mMsgId;
|
||||||
std::cerr << " TS: " << msgMeta->mPublishTs;
|
std::cerr << " TS: " << msgMeta->mPublishTs;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
addMsg = true;
|
addMsg = true;
|
||||||
}
|
}
|
||||||
// check timestamps.
|
// check timestamps.
|
||||||
else if (oit->second.second < msgMeta->mPublishTs)
|
else if (oit->second.second < msgMeta->mPublishTs)
|
||||||
{
|
{
|
||||||
std::cerr << "RsGxsDataAccess::getMsgList() Found Later Msg. OrigMsgId: ";
|
std::cerr << "RsGxsDataAccess::getMsgList() Found Later Msg. OrigMsgId: ";
|
||||||
std::cerr << msgMeta->mOrigMsgId;
|
std::cerr << msgMeta->mOrigMsgId;
|
||||||
std::cerr << " MsgId: " << msgMeta->mMsgId;
|
std::cerr << " MsgId: " << msgMeta->mMsgId;
|
||||||
std::cerr << " TS: " << msgMeta->mPublishTs;
|
std::cerr << " TS: " << msgMeta->mPublishTs;
|
||||||
|
|
||||||
addMsg = true;
|
addMsg = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addMsg)
|
if (addMsg)
|
||||||
{
|
{
|
||||||
// add as latest. (overwriting if necessary)
|
// add as latest. (overwriting if necessary)
|
||||||
origMsgTs[msgMeta->mOrigMsgId] = std::make_pair(msgMeta->mMsgId, msgMeta->mPublishTs);
|
origMsgTs[msgMeta->mOrigMsgId] = std::make_pair(msgMeta->mMsgId, msgMeta->mPublishTs);
|
||||||
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the discovered Latest Msgs.
|
// Add the discovered Latest Msgs.
|
||||||
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); oit++)
|
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); oit++)
|
||||||
{
|
{
|
||||||
req->mMsgIdResult[grpId].push_back(oit->second.first);
|
msgIdsOut[grpId].push_back(oit->second.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else // ALL OTHER CASES.
|
else // ALL OTHER CASES.
|
||||||
{
|
{
|
||||||
std::vector<RsGxsMsgMetaData*>::const_iterator vit = metaV.begin();
|
std::vector<RsGxsMsgMetaData*>::const_iterator vit = metaV.begin();
|
||||||
|
|
||||||
for(; vit != metaV.end(); vit++)
|
for(; vit != metaV.end(); vit++)
|
||||||
|
{
|
||||||
|
RsGxsMsgMetaData* msgMeta = *vit;
|
||||||
|
bool add = false;
|
||||||
|
|
||||||
|
/* if we are grabbing thread Head... then parentId == empty. */
|
||||||
|
if (onlyThreadHeadMsgs)
|
||||||
{
|
{
|
||||||
RsGxsMsgMetaData* msgMeta = *vit;
|
if (!(msgMeta->mParentId.empty()))
|
||||||
bool add = false;
|
|
||||||
|
|
||||||
/* if we are grabbing thread Head... then parentId == empty. */
|
|
||||||
if (onlyThreadHeadMsgs)
|
|
||||||
{
|
{
|
||||||
if (!(msgMeta->mParentId.empty()))
|
continue;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (onlyOrigMsgs)
|
|
||||||
{
|
|
||||||
if (msgMeta->mMsgId == msgMeta->mOrigMsgId)
|
|
||||||
{
|
|
||||||
add = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
add = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (add)
|
|
||||||
{
|
|
||||||
req->mMsgIdResult[grpId].push_back(msgMeta->mMsgId);
|
|
||||||
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (onlyOrigMsgs)
|
||||||
|
{
|
||||||
|
if (msgMeta->mMsgId == msgMeta->mOrigMsgId)
|
||||||
|
{
|
||||||
|
add = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
add = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add)
|
||||||
|
{
|
||||||
|
msgIdsOut[grpId].push_back(msgMeta->mMsgId);
|
||||||
|
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
filterMsgList(req->mMsgIdResult, opts, metaFilter);
|
filterMsgList(msgIdsOut, opts, metaFilter);
|
||||||
|
|
||||||
metaFilter.clear();
|
metaFilter.clear();
|
||||||
|
|
||||||
@ -906,12 +913,263 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq* req)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
||||||
|
{
|
||||||
|
/* CASEs this handles.
|
||||||
|
* Input is msgList + Flags.
|
||||||
|
* 1) No Flags => return nothing
|
||||||
|
*/
|
||||||
|
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
const RsTokReqOptionsV2& opts = req->Options;
|
||||||
|
|
||||||
|
bool onlyLatestMsgs = false;
|
||||||
|
bool onlyAllVersions = false;
|
||||||
|
bool onlyChildMsgs = false;
|
||||||
|
bool onlyThreadMsgs = false;
|
||||||
|
|
||||||
|
if (opts.mOptions & RS_TOKREQOPT_MSG_LATEST)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() MSG_LATEST";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
onlyLatestMsgs = true;
|
||||||
|
}
|
||||||
|
else if (opts.mOptions & RS_TOKREQOPT_MSG_VERSIONS)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() MSG_VERSIONS";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
onlyAllVersions = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.mOptions & RS_TOKREQOPT_MSG_PARENT)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() MSG_PARENTS";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
onlyChildMsgs = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.mOptions & RS_TOKREQOPT_MSG_THREAD)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() MSG_THREAD";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
onlyThreadMsgs = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyAllVersions && onlyChildMsgs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (VERSIONS & PARENT)";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyAllVersions && onlyThreadMsgs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (VERSIONS & THREAD)";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!onlyLatestMsgs) && onlyChildMsgs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (!LATEST & PARENT)";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!onlyLatestMsgs) && onlyThreadMsgs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (!LATEST & THREAD)";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyChildMsgs && onlyThreadMsgs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (PARENT & THREAD)";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* FALL BACK OPTION */
|
||||||
|
if ((!onlyLatestMsgs) && (!onlyAllVersions) && (!onlyChildMsgs) && (!onlyThreadMsgs))
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() FALLBACK -> NO FLAGS -> SIMPLY RETURN nothing";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
MsgMetaFilter filterMap;
|
||||||
|
|
||||||
|
RsStackMutex stack(mDataMutex); /***** LOCKED *****/
|
||||||
|
|
||||||
|
// get meta data for all in group
|
||||||
|
GxsMsgMetaResult result;
|
||||||
|
GxsMsgReq msgIds;
|
||||||
|
msgIds.insert(std::make_pair(req->mMsgId.first, std::vector<RsGxsMessageId>()));
|
||||||
|
mDataStore->retrieveGxsMsgMetaData(msgIds, result);
|
||||||
|
std::vector<RsGxsMsgMetaData*>& metaV = result[req->mMsgId.first];
|
||||||
|
std::vector<RsGxsMsgMetaData*>::iterator vit_meta;
|
||||||
|
|
||||||
|
// msg id to relate to
|
||||||
|
const RsGxsMessageId& msgId = req->mMsgId.second;
|
||||||
|
const RsGxsGroupId& grpId = req->mMsgId.first;
|
||||||
|
|
||||||
|
std::vector<RsGxsMessageId> outMsgIds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RsGxsMsgMetaData* origMeta = NULL;
|
||||||
|
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); vit_meta++)
|
||||||
|
{
|
||||||
|
RsGxsMsgMetaData* meta = *vit_meta;
|
||||||
|
|
||||||
|
if(msgId == meta->mMsgId)
|
||||||
|
{
|
||||||
|
origMeta = meta;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!origMeta)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedInfo(): Cannot find meta of msgId (to relate to)!"
|
||||||
|
<< std::endl;
|
||||||
|
cleanseMsgMetaMap(result);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const RsGxsMessageId& origMsgId = origMeta->mOrigMsgId;
|
||||||
|
std::map<RsGxsMessageId, RsGxsMsgMetaData*>& metaMap = filterMap[grpId];
|
||||||
|
|
||||||
|
if (onlyLatestMsgs)
|
||||||
|
{
|
||||||
|
if (onlyChildMsgs || onlyThreadMsgs)
|
||||||
|
{
|
||||||
|
// RUN THROUGH ALL MSGS... in map origId -> TS.
|
||||||
|
std::map<std::string, std::pair<std::string, time_t> > origMsgTs;
|
||||||
|
std::map<std::string, std::pair<std::string, time_t> >::iterator oit;
|
||||||
|
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); vit_meta++)
|
||||||
|
{
|
||||||
|
|
||||||
|
RsGxsMsgMetaData* meta = *vit_meta;
|
||||||
|
|
||||||
|
// skip msgs that aren't children.
|
||||||
|
if (onlyChildMsgs)
|
||||||
|
{
|
||||||
|
if (meta->mParentId != origMsgId)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* onlyThreadMsgs */
|
||||||
|
{
|
||||||
|
if (meta->mThreadId != msgId)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
oit = origMsgTs.find(meta->mOrigMsgId);
|
||||||
|
|
||||||
|
bool addMsg = false;
|
||||||
|
if (oit == origMsgTs.end())
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() Found New OrigMsgId: ";
|
||||||
|
std::cerr << meta->mOrigMsgId;
|
||||||
|
std::cerr << " MsgId: " << meta->mMsgId;
|
||||||
|
std::cerr << " TS: " << meta->mPublishTs;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
addMsg = true;
|
||||||
|
}
|
||||||
|
// check timestamps.
|
||||||
|
else if (oit->second.second < meta->mPublishTs)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsDataAccess::getMsgRelatedList() Found Later Msg. OrigMsgId: ";
|
||||||
|
std::cerr << meta->mOrigMsgId;
|
||||||
|
std::cerr << " MsgId: " << meta->mMsgId;
|
||||||
|
std::cerr << " TS: " << meta->mPublishTs;
|
||||||
|
|
||||||
|
addMsg = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addMsg)
|
||||||
|
{
|
||||||
|
// add as latest. (overwriting if necessary)
|
||||||
|
origMsgTs[meta->mOrigMsgId] = std::make_pair(meta->mMsgId, meta->mPublishTs);
|
||||||
|
metaMap.insert(std::make_pair(meta->mOrigMsgId, meta));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the discovered Latest Msgs.
|
||||||
|
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); oit++)
|
||||||
|
{
|
||||||
|
outMsgIds.push_back(oit->second.first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
/* first guess is potentially better than Orig (can't be worse!) */
|
||||||
|
time_t latestTs = 0;
|
||||||
|
RsGxsMessageId latestMsgId;
|
||||||
|
RsGxsMsgMetaData* latestMeta;
|
||||||
|
|
||||||
|
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); vit_meta++)
|
||||||
|
{
|
||||||
|
RsGxsMsgMetaData* meta = *vit_meta;
|
||||||
|
|
||||||
|
if (meta->mOrigMsgId == origMsgId)
|
||||||
|
{
|
||||||
|
if (meta->mPublishTs > latestTs)
|
||||||
|
{
|
||||||
|
latestTs = meta->mPublishTs;
|
||||||
|
latestMsgId = meta->mMsgId;
|
||||||
|
latestMeta = meta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
outMsgIds.push_back(latestMsgId);
|
||||||
|
metaMap.insert(std::make_pair(latestMsgId, latestMeta));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (onlyAllVersions)
|
||||||
|
{
|
||||||
|
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); vit_meta++)
|
||||||
|
{
|
||||||
|
RsGxsMsgMetaData* meta = *vit_meta;
|
||||||
|
|
||||||
|
if (meta->mOrigMsgId == origMsgId)
|
||||||
|
{
|
||||||
|
outMsgIds.push_back(meta->mMsgId);
|
||||||
|
metaMap.insert(std::make_pair(meta->mOrigMsgId, meta));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
req->mMsgIdResult[grpId] = outMsgIds;
|
||||||
|
filterMsgList(req->mMsgIdResult, opts, filterMap);
|
||||||
|
|
||||||
|
cleanseMsgMetaMap(result);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool RsGxsDataAccess::getMsgList(MsgIdReq* req)
|
bool RsGxsDataAccess::getMsgList(MsgIdReq* req)
|
||||||
{
|
{
|
||||||
|
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
|
|
||||||
|
|
||||||
mDataStore->retrieveGxsMsgMetaData(req->mMsgIds, result);
|
mDataStore->retrieveGxsMsgMetaData(req->mMsgIds, result);
|
||||||
|
|
||||||
|
|
||||||
@ -931,6 +1189,13 @@ bool RsGxsDataAccess::getMsgList(MsgIdReq* req)
|
|||||||
delete meta; // discard meta data mem
|
delete meta; // discard meta data mem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GxsMsgReq msgIdOut;
|
||||||
|
|
||||||
|
// filter based on options
|
||||||
|
getMsgList(req->mMsgIdResult, req->Options, msgIdOut);
|
||||||
|
req->mMsgIdResult = msgIdOut;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1116,7 +1381,7 @@ bool RsGxsDataAccess::disposeOfPublicToken(const uint32_t& token)
|
|||||||
bool RsGxsDataAccess::checkMsgFilter(const RsTokReqOptionsV2& opts, const RsGxsMsgMetaData* meta) const
|
bool RsGxsDataAccess::checkMsgFilter(const RsTokReqOptionsV2& opts, const RsGxsMsgMetaData* meta) const
|
||||||
{
|
{
|
||||||
bool statusMatch = false;
|
bool statusMatch = false;
|
||||||
if (opts.mStatusMask)
|
if (opts.mStatusMask)
|
||||||
{
|
{
|
||||||
// Exact Flags match required.
|
// Exact Flags match required.
|
||||||
if ((opts.mStatusMask & opts.mStatusFilter) == (opts.mStatusMask & meta->mMsgStatus))
|
if ((opts.mStatusMask & opts.mStatusFilter) == (opts.mStatusMask & meta->mMsgStatus))
|
||||||
@ -1141,5 +1406,33 @@ bool RsGxsDataAccess::checkMsgFilter(const RsTokReqOptionsV2& opts, const RsGxsM
|
|||||||
// no status comparision,
|
// no status comparision,
|
||||||
statusMatch = true;
|
statusMatch = true;
|
||||||
}
|
}
|
||||||
return statusMatch;
|
|
||||||
|
bool flagMatch = false;
|
||||||
|
|
||||||
|
if(opts.mMsgFlagMask)
|
||||||
|
{
|
||||||
|
// Exact Flags match required.
|
||||||
|
if ((opts.mMsgFlagMask & opts.mMsgFlagFilter) == (opts.mMsgFlagMask & meta->mMsgFlags))
|
||||||
|
{
|
||||||
|
std::cerr << "checkMsgFilter() Accepting Msg as FlagMatches: ";
|
||||||
|
std::cerr << " Mask: " << opts.mMsgFlagMask << " FlagFilter: " << opts.mMsgFlagFilter;
|
||||||
|
std::cerr << " MsgFlag: " << meta->mMsgFlags << " MsgId: " << meta->mMsgId;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
flagMatch = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "checkMsgFilter() Dropping Msg due to !FlagMatch ";
|
||||||
|
std::cerr << " Mask: " << opts.mMsgFlagMask << " FlagFilter: " << opts.mMsgFlagFilter;
|
||||||
|
std::cerr << " MsgFlag: " << meta->mMsgFlags << " MsgId: " << meta->mMsgId;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
flagMatch = false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
flagMatch = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return statusMatch && flagMatch;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ public:
|
|||||||
* @param groupIds The ids of the groups to get, second entry of map empty to query for all msgs
|
* @param groupIds The ids of the groups to get, second entry of map empty to query for all msgs
|
||||||
* @return true if request successful false otherwise
|
* @return true if request successful false otherwise
|
||||||
*/
|
*/
|
||||||
bool requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts, const GxsMsgReq& msgIds);
|
bool requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts, const RsGxsGrpMsgIdPair &msgIds);
|
||||||
|
|
||||||
/* Poll */
|
/* Poll */
|
||||||
uint32_t requestStatus(const uint32_t token);
|
uint32_t requestStatus(const uint32_t token);
|
||||||
@ -343,6 +343,15 @@ private:
|
|||||||
*/
|
*/
|
||||||
bool checkMsgFilter(const RsTokReqOptionsV2& opts, const RsGxsMsgMetaData* meta) const;
|
bool checkMsgFilter(const RsTokReqOptionsV2& opts, const RsGxsMsgMetaData* meta) const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* This is a filter method which applies the request options to the list of ids
|
||||||
|
* requested
|
||||||
|
* @param msgIds the msg ids for filter to be applied to
|
||||||
|
* @param opts the options used to parameterise the id filter
|
||||||
|
* @param msgIdsOut the left overs ids after filter is applied to msgIds
|
||||||
|
*/
|
||||||
|
bool getMsgList(const GxsMsgReq& msgIds, const RsTokReqOptionsV2& opts, GxsMsgReq msgIdsOut);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
RsGeneralDataService* mDataStore;
|
RsGeneralDataService* mDataStore;
|
||||||
|
@ -99,7 +99,7 @@ class MsgRelatedInfoReq : public GxsRequest
|
|||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GxsMsgReq mMsgIds;
|
RsGxsGrpMsgIdPair mMsgId;
|
||||||
GxsMsgIdResult mMsgIdResult;
|
GxsMsgIdResult mMsgIdResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ public:
|
|||||||
* @param groupIds The ids of the groups to get, second entry of map empty to query for all msgs
|
* @param groupIds The ids of the groups to get, second entry of map empty to query for all msgs
|
||||||
* @return true if request successful false otherwise
|
* @return true if request successful false otherwise
|
||||||
*/
|
*/
|
||||||
virtual bool requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts, const GxsMsgReq& msgIds) = 0;
|
virtual bool requestMsgRelatedInfo(uint32_t &token, uint32_t ansType, const RsTokReqOptionsV2 &opts, const RsGxsGrpMsgIdPair& msgIds) = 0;
|
||||||
|
|
||||||
|
|
||||||
/* Poll */
|
/* Poll */
|
||||||
|
@ -23,10 +23,11 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "rsphotov2items.h"
|
#include "rsphotov2items.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include <iostream>
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
#define GXS_PHOTO_SERIAL_DEBUG
|
#define GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
|
||||||
@ -35,6 +36,7 @@ uint32_t RsGxsPhotoSerialiser::size(RsItem* item)
|
|||||||
{
|
{
|
||||||
RsGxsPhotoPhotoItem* ppItem = NULL;
|
RsGxsPhotoPhotoItem* ppItem = NULL;
|
||||||
RsGxsPhotoAlbumItem* paItem = NULL;
|
RsGxsPhotoAlbumItem* paItem = NULL;
|
||||||
|
RsGxsPhotoCommentItem* cItem = NULL;
|
||||||
|
|
||||||
if((ppItem = dynamic_cast<RsGxsPhotoPhotoItem*>(item)) != NULL)
|
if((ppItem = dynamic_cast<RsGxsPhotoPhotoItem*>(item)) != NULL)
|
||||||
{
|
{
|
||||||
@ -44,6 +46,10 @@ uint32_t RsGxsPhotoSerialiser::size(RsItem* item)
|
|||||||
{
|
{
|
||||||
return sizeGxsPhotoAlbumItem(paItem);
|
return sizeGxsPhotoAlbumItem(paItem);
|
||||||
}
|
}
|
||||||
|
else if((cItem = dynamic_cast<RsGxsPhotoCommentItem*>(item)) != NULL)
|
||||||
|
{
|
||||||
|
return sizeGxsPhotoCommentItem(cItem);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
@ -57,24 +63,28 @@ uint32_t RsGxsPhotoSerialiser::size(RsItem* item)
|
|||||||
bool RsGxsPhotoSerialiser::serialise(RsItem* item, void* data, uint32_t* size)
|
bool RsGxsPhotoSerialiser::serialise(RsItem* item, void* data, uint32_t* size)
|
||||||
{
|
{
|
||||||
|
|
||||||
RsGxsPhotoPhotoItem* ppItem = NULL;
|
RsGxsPhotoPhotoItem* ppItem = NULL;
|
||||||
RsGxsPhotoAlbumItem* paItem = NULL;
|
RsGxsPhotoAlbumItem* paItem = NULL;
|
||||||
|
RsGxsPhotoCommentItem* cItem = NULL;
|
||||||
|
|
||||||
if((ppItem = dynamic_cast<RsGxsPhotoPhotoItem*>(item)) != NULL)
|
if((ppItem = dynamic_cast<RsGxsPhotoPhotoItem*>(item)) != NULL)
|
||||||
{
|
{
|
||||||
return serialiseGxsPhotoPhotoItem(ppItem, data, size);
|
return serialiseGxsPhotoPhotoItem(ppItem, data, size);
|
||||||
}
|
}
|
||||||
else if((paItem = dynamic_cast<RsGxsPhotoAlbumItem*>(item)) != NULL)
|
else if((paItem = dynamic_cast<RsGxsPhotoAlbumItem*>(item)) != NULL)
|
||||||
{
|
{
|
||||||
return serialiseGxsPhotoAlbumItem(paItem, data, size);
|
return serialiseGxsPhotoAlbumItem(paItem, data, size);
|
||||||
}
|
}else if((cItem = dynamic_cast<RsGxsPhotoCommentItem*>(item)) != NULL)
|
||||||
else
|
{
|
||||||
{
|
return serialiseGxsPhotoCommentItem(cItem, data, size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,11 +110,13 @@ RsItem* RsGxsPhotoSerialiser::deserialise(void* data, uint32_t* size)
|
|||||||
return deserialiseGxsPhotoPhotoItem(data, size);
|
return deserialiseGxsPhotoPhotoItem(data, size);
|
||||||
case RS_PKT_SUBTYPE_PHOTO_ITEM:
|
case RS_PKT_SUBTYPE_PHOTO_ITEM:
|
||||||
return deserialiseGxsPhotoAlbumItem(data, size);
|
return deserialiseGxsPhotoAlbumItem(data, size);
|
||||||
|
case RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM:
|
||||||
|
return deserialiseGxsPhotoCommentItem(data, size);
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
std::cerr << "RsGxsPhotoSerialiser::deserialise(): subtype could not be dealt with"
|
std::cerr << "RsGxsPhotoSerialiser::deserialise(): subtype could not be dealt with"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -136,6 +148,19 @@ uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoCommentItem(RsGxsPhotoCommentItem *item)
|
||||||
|
{
|
||||||
|
|
||||||
|
const RsPhotoComment& comment = item->comment;
|
||||||
|
uint32_t s = 8; // header
|
||||||
|
|
||||||
|
s += GetTlvStringSize(comment.mComment);
|
||||||
|
s += 4; // mflags
|
||||||
|
|
||||||
|
return s;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item, void* data,
|
bool RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item, void* data,
|
||||||
uint32_t* size)
|
uint32_t* size)
|
||||||
{
|
{
|
||||||
@ -443,19 +468,123 @@ RsGxsPhotoPhotoItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem(void* da
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoCommentItem(RsGxsPhotoCommentItem *item)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem (RsGxsPhotoCommentItem *item, void *data, uint32_t *size)
|
bool RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem (RsGxsPhotoCommentItem *item, void *data, uint32_t *size)
|
||||||
{
|
{
|
||||||
return false;
|
|
||||||
|
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint32_t tlvsize = sizeGxsPhotoCommentItem(item);
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
if(*size < tlvsize){
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem()" << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*size = tlvsize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize);
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
/* GxsPhotoAlbumItem */
|
||||||
|
|
||||||
|
ok &= SetTlvString(data, tlvsize, &offset, 0, item->comment.mComment);
|
||||||
|
ok &= setRawUInt32(data, tlvsize, &offset, item->comment.mCommentFlag);
|
||||||
|
|
||||||
|
if(offset != tlvsize)
|
||||||
|
{
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem() FAIL Size Error! " << std::endl;
|
||||||
|
#endif
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem() NOK" << std::endl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
RsGxsPhotoCommentItem * RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem(void *data, uint32_t *size)
|
RsGxsPhotoCommentItem * RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem(void *data, uint32_t *size)
|
||||||
{
|
{
|
||||||
return NULL;
|
|
||||||
|
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem()" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* get the type and size */
|
||||||
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
uint32_t rssize = getRsItemSize(data);
|
||||||
|
|
||||||
|
uint32_t offset = 0;
|
||||||
|
|
||||||
|
|
||||||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
|
(RS_SERVICE_GXSV1_TYPE_PHOTO != getRsItemService(rstype)) ||
|
||||||
|
(RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM != getRsItemSubType(rstype)))
|
||||||
|
{
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL wrong type" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* wrong type */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*size < rssize) /* check size */
|
||||||
|
{
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL wrong size" << std::endl;
|
||||||
|
#endif
|
||||||
|
return NULL; /* not enough data */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the packet length */
|
||||||
|
*size = rssize;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
RsGxsPhotoCommentItem* item = new RsGxsPhotoCommentItem();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
offset += 8;
|
||||||
|
|
||||||
|
ok &= GetTlvString(data, rssize, &offset, 1, item->comment.mComment);
|
||||||
|
ok &= getRawUInt32(data, rssize, &offset, &(item->comment.mCommentFlag));
|
||||||
|
|
||||||
|
if (offset != rssize)
|
||||||
|
{
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL size mismatch" << std::endl;
|
||||||
|
#endif
|
||||||
|
/* error */
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() NOK" << std::endl;
|
||||||
|
#endif
|
||||||
|
delete item;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsPhotoAlbumItem::clear()
|
void RsGxsPhotoAlbumItem::clear()
|
||||||
@ -474,12 +603,17 @@ void RsGxsPhotoAlbumItem::clear()
|
|||||||
|
|
||||||
void RsGxsPhotoCommentItem::clear()
|
void RsGxsPhotoCommentItem::clear()
|
||||||
{
|
{
|
||||||
|
comment.mComment.clear();
|
||||||
|
comment.mCommentFlag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& RsGxsPhotoCommentItem::print(std::ostream& out, uint16_t indent)
|
std::ostream& RsGxsPhotoCommentItem::print(std::ostream& out, uint16_t indent)
|
||||||
{
|
{
|
||||||
|
printRsItemBase(out, "RsGxsPhotoCommentItem", indent);
|
||||||
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
|
||||||
|
printRsItemEnd(out ,"RsGxsPhotoCommentItem", indent);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -488,6 +622,7 @@ std::ostream& RsGxsPhotoAlbumItem::print(std::ostream& out, uint16_t indent)
|
|||||||
printRsItemBase(out, "RsGxsPhotoAlbumItem", indent);
|
printRsItemBase(out, "RsGxsPhotoAlbumItem", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
out << album << std::endl;
|
||||||
|
|
||||||
printRsItemEnd(out ,"RsGxsPhotoAlbumItem", indent);
|
printRsItemEnd(out ,"RsGxsPhotoAlbumItem", indent);
|
||||||
return out;
|
return out;
|
||||||
|
@ -827,7 +827,7 @@ bool GenExchangeTester::testSpecificMsgMetaRetrieval()
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GenExchangeTester::testRelatedMsgIdRetrieval_Parents()
|
bool GenExchangeTester::testMsgIdRetrieval_OptParents()
|
||||||
{
|
{
|
||||||
// start up
|
// start up
|
||||||
setUp();
|
setUp();
|
||||||
@ -884,7 +884,7 @@ bool GenExchangeTester::testRelatedMsgIdRetrieval_Parents()
|
|||||||
|
|
||||||
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
||||||
opts.mOptions = RS_TOKREQOPT_MSG_THREAD;
|
opts.mOptions = RS_TOKREQOPT_MSG_THREAD;
|
||||||
mTokenService->requestMsgRelatedInfo(token, 0, opts, req);
|
mTokenService->requestMsgInfo(token, 0, opts, req);
|
||||||
|
|
||||||
pollForToken(token, opts);
|
pollForToken(token, opts);
|
||||||
|
|
||||||
@ -925,7 +925,7 @@ bool GenExchangeTester::testRelatedMsgIdRetrieval_Parents()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GenExchangeTester::testRelatedMsgIdRetrieval_OrigMsgId()
|
bool GenExchangeTester::testMsgIdRetrieval_OptOrigMsgId()
|
||||||
{
|
{
|
||||||
// start up
|
// start up
|
||||||
setUp();
|
setUp();
|
||||||
@ -981,7 +981,7 @@ bool GenExchangeTester::testRelatedMsgIdRetrieval_OrigMsgId()
|
|||||||
|
|
||||||
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
||||||
opts.mOptions = RS_TOKREQOPT_MSG_ORIGMSG;
|
opts.mOptions = RS_TOKREQOPT_MSG_ORIGMSG;
|
||||||
mTokenService->requestMsgRelatedInfo(token, 0, opts, req);
|
mTokenService->requestMsgInfo(token, 0, opts, req);
|
||||||
|
|
||||||
pollForToken(token, opts);
|
pollForToken(token, opts);
|
||||||
|
|
||||||
@ -1022,7 +1022,7 @@ bool GenExchangeTester::testRelatedMsgIdRetrieval_OrigMsgId()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool GenExchangeTester::testRelatedMsgIdRetrieval_Latest()
|
bool GenExchangeTester::testMsgIdRetrieval_OptLatest()
|
||||||
{
|
{
|
||||||
|
|
||||||
// testing for latest, create msg which are origMsgIds then
|
// testing for latest, create msg which are origMsgIds then
|
||||||
@ -1189,7 +1189,7 @@ bool GenExchangeTester::testRelatedMsgIdRetrieval_Latest()
|
|||||||
|
|
||||||
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS;
|
||||||
opts.mOptions = RS_TOKREQOPT_MSG_LATEST;
|
opts.mOptions = RS_TOKREQOPT_MSG_LATEST;
|
||||||
mTokenService->requestMsgRelatedInfo(token, 0, opts, req);
|
mTokenService->requestMsgInfo(token, 0, opts, req);
|
||||||
|
|
||||||
pollForToken(token, opts);
|
pollForToken(token, opts);
|
||||||
|
|
||||||
|
@ -27,9 +27,9 @@ public:
|
|||||||
|
|
||||||
bool testMsgSubmissionRetrieval();
|
bool testMsgSubmissionRetrieval();
|
||||||
bool testMsgIdRetrieval();
|
bool testMsgIdRetrieval();
|
||||||
bool testRelatedMsgIdRetrieval_Parents();
|
bool testMsgIdRetrieval_OptParents();
|
||||||
bool testRelatedMsgIdRetrieval_OrigMsgId();
|
bool testMsgIdRetrieval_OptOrigMsgId();
|
||||||
bool testRelatedMsgIdRetrieval_Latest();
|
bool testMsgIdRetrieval_OptLatest();
|
||||||
bool testSpecificMsgMetaRetrieval();
|
bool testSpecificMsgMetaRetrieval();
|
||||||
|
|
||||||
bool testGrpSubmissionRetrieval();
|
bool testGrpSubmissionRetrieval();
|
||||||
|
123
libretroshare/src/tests/gxs/nxs_tests.pro
Normal file
123
libretroshare/src/tests/gxs/nxs_tests.pro
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2012-05-06T09:19:26
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
QT += core network
|
||||||
|
|
||||||
|
QT -= gui
|
||||||
|
|
||||||
|
CONFIG += gen_exchange_target #dstore_target
|
||||||
|
|
||||||
|
dstore_target {
|
||||||
|
|
||||||
|
TARGET = rs_dstore_test
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_exchange_target {
|
||||||
|
|
||||||
|
TARGET = gen_exchange_test
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG += console
|
||||||
|
CONFIG -= app_bundle
|
||||||
|
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
CONFIG += debug
|
||||||
|
|
||||||
|
debug {
|
||||||
|
# DEFINES *= DEBUG
|
||||||
|
# DEFINES *= OPENDHT_DEBUG DHT_DEBUG CONN_DEBUG DEBUG_UDP_SORTER P3DISC_DEBUG DEBUG_UDP_LAYER FT_DEBUG EXTADDRSEARCH_DEBUG
|
||||||
|
# DEFINES *= CONTROL_DEBUG FT_DEBUG DEBUG_FTCHUNK P3TURTLE_DEBUG
|
||||||
|
# DEFINES *= P3TURTLE_DEBUG
|
||||||
|
# DEFINES *= NET_DEBUG
|
||||||
|
# DEFINES *= DISTRIB_DEBUG
|
||||||
|
# DEFINES *= P3TURTLE_DEBUG FT_DEBUG DEBUG_FTCHUNK MPLEX_DEBUG
|
||||||
|
# DEFINES *= STATUS_DEBUG SERV_DEBUG RSSERIAL_DEBUG #CONN_DEBUG
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS -= -O2 -fomit-frame-pointer
|
||||||
|
QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer
|
||||||
|
}
|
||||||
|
################################# Linux ##########################################
|
||||||
|
# Put lib dir in QMAKE_LFLAGS so it appears before -L/usr/lib
|
||||||
|
linux-* {
|
||||||
|
#CONFIG += version_detail_bash_script
|
||||||
|
QMAKE_CXXFLAGS *= -D_FILE_OFFSET_BITS=64
|
||||||
|
|
||||||
|
system(which gpgme-config >/dev/null 2>&1) {
|
||||||
|
INCLUDEPATH += $$system(gpgme-config --cflags | sed -e "s/-I//g")
|
||||||
|
} else {
|
||||||
|
message(Could not find gpgme-config on your system, assuming gpgme.h is in /usr/include)
|
||||||
|
}
|
||||||
|
|
||||||
|
PRE_TARGETDEPS *= ../../lib/libretroshare.a
|
||||||
|
|
||||||
|
LIBS += ../../lib/libretroshare.a
|
||||||
|
LIBS += ../../../../libbitdht/src/lib/libbitdht.a
|
||||||
|
LIBS += ../../../../openpgpsdk/src/lib/libops.a
|
||||||
|
LIBS += -lssl -lgpgme -lupnp -lixml -lgnome-keyring -lsqlite3 -lbz2
|
||||||
|
LIBS *= -rdynamic -frtti
|
||||||
|
DEFINES *= HAVE_XSS # for idle time, libx screensaver extensions
|
||||||
|
DEFINES *= UBUNTU
|
||||||
|
}
|
||||||
|
|
||||||
|
linux-g++ {
|
||||||
|
OBJECTS_DIR = temp/linux-g++/obj
|
||||||
|
}
|
||||||
|
|
||||||
|
linux-g++-64 {
|
||||||
|
OBJECTS_DIR = temp/linux-g++-64/obj
|
||||||
|
}
|
||||||
|
|
||||||
|
version_detail_bash_script {
|
||||||
|
DEFINES += ADD_LIBRETROSHARE_VERSION_INFO
|
||||||
|
QMAKE_EXTRA_TARGETS += write_version_detail
|
||||||
|
PRE_TARGETDEPS = write_version_detail
|
||||||
|
write_version_detail.commands = ./version_detail.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
install_rs {
|
||||||
|
INSTALLS += binary_rs
|
||||||
|
binary_rs.path = $$(PREFIX)/usr/bin
|
||||||
|
binary_rs.files = ./RetroShare
|
||||||
|
}
|
||||||
|
|
||||||
|
dstore_target {
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
support.cc \
|
||||||
|
rsdataservice_test.cc \
|
||||||
|
data_support.cc
|
||||||
|
|
||||||
|
HEADERS += support.h \
|
||||||
|
rsdataservice_test.h \
|
||||||
|
data_support.h
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gen_exchange_target {
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
support.cc \
|
||||||
|
genexchangetester.cpp \
|
||||||
|
genexchangetestservice.cpp \
|
||||||
|
rsdummyservices.cc \
|
||||||
|
rsgenexchange_test.cc
|
||||||
|
|
||||||
|
HEADERS += support.h \
|
||||||
|
rsdataservice_test.h \
|
||||||
|
rsdummyservices.h \
|
||||||
|
data_support.h
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../
|
@ -15,17 +15,17 @@ int main()
|
|||||||
GenExchangeTester tester;
|
GenExchangeTester tester;
|
||||||
|
|
||||||
CHECK(tester.testMsgSubmissionRetrieval()); REPORT("testMsgSubmissionRetrieval()");
|
CHECK(tester.testMsgSubmissionRetrieval()); REPORT("testMsgSubmissionRetrieval()");
|
||||||
CHECK(tester.testSpecificMsgMetaRetrieval()); REPORT("testSpecificMsgMetaRetrieval()");
|
// CHECK(tester.testSpecificMsgMetaRetrieval()); REPORT("testSpecificMsgMetaRetrieval()");
|
||||||
CHECK(tester.testMsgIdRetrieval()); REPORT("tester.testMsgIdRetrieval()");
|
// CHECK(tester.testMsgIdRetrieval()); REPORT("tester.testMsgIdRetrieval()");
|
||||||
CHECK(tester.testRelatedMsgIdRetrieval_Parents()); REPORT("tester.testRelatedMsgIdRetrieval_Parents()");
|
// CHECK(tester.testMsgIdRetrieval_OptParents()); REPORT("tester.testRelatedMsgIdRetrieval_Parents()");
|
||||||
CHECK(tester.testRelatedMsgIdRetrieval_OrigMsgId()); REPORT("tester.testRelatedMsgIdRetrieval_OrigMsgId()");
|
// CHECK(tester.testMsgIdRetrieval_OptOrigMsgId()); REPORT("tester.testRelatedMsgIdRetrieval_OrigMsgId()");
|
||||||
CHECK(tester.testRelatedMsgIdRetrieval_Latest()); REPORT("tester.testRelatedMsgIdRetrieval_Latest()");
|
// CHECK(tester.testMsgIdRetrieval_OptLatest()); REPORT("tester.testRelatedMsgIdRetrieval_Latest()");
|
||||||
CHECK(tester.testMsgMetaModRequest()); REPORT("tester.testMsgMetaModRequest()");
|
// CHECK(tester.testMsgMetaModRequest()); REPORT("tester.testMsgMetaModRequest()");
|
||||||
|
|
||||||
CHECK(tester.testGrpSubmissionRetrieval()); REPORT("tester.testGrpSubmissionRetrieval()");
|
// CHECK(tester.testGrpSubmissionRetrieval()); REPORT("tester.testGrpSubmissionRetrieval()");
|
||||||
CHECK(tester.testGrpMetaRetrieval()); REPORT("tester.testGrpMetaRetrieval()");
|
// CHECK(tester.testGrpMetaRetrieval()); REPORT("tester.testGrpMetaRetrieval()");
|
||||||
CHECK(tester.testGrpIdRetrieval()); REPORT("tester.testGrpIdRetrieval()");
|
// CHECK(tester.testGrpIdRetrieval()); REPORT("tester.testGrpIdRetrieval()");
|
||||||
CHECK(tester.testGrpMetaModRequest()); REPORT("tester.testGrpMetaModRequest()");
|
// CHECK(tester.testGrpMetaModRequest()); REPORT("tester.testGrpMetaModRequest()");
|
||||||
|
|
||||||
FINALREPORT("RsGenExchangeTest");
|
FINALREPORT("RsGenExchangeTest");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user