mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-07 08:35:16 -04:00
Message Synchronisation now supported by photoshare (photo and comments sync)
Photoshare UI now functional - subscribing to an album enables message sync - TokenQueue now operate with FIFO stack to prevent overlap in request completion - photos are now load on demand as with comments - fixed some noddy bugs (subscribe flag initialises incorrectly) git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-gxs-b1@5624 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
bdd6c6041b
commit
b06214b779
12 changed files with 240 additions and 102 deletions
|
@ -558,11 +558,6 @@ void RsGenExchange::publishMsgs()
|
|||
msg->metaData = new RsGxsMsgMetaData();
|
||||
msg->msg.setBinData(mData, size);
|
||||
*(msg->metaData) = msgItem->meta;
|
||||
size = msg->metaData->serial_size();
|
||||
char metaDataBuff[size];
|
||||
|
||||
msg->metaData->serialise(metaDataBuff, &size);
|
||||
msg->meta.setBinData(metaDataBuff, size);
|
||||
|
||||
ok = createMessage(msg);
|
||||
RsGxsMessageId msgId;
|
||||
|
@ -582,6 +577,14 @@ void RsGenExchange::publishMsgs()
|
|||
{
|
||||
msg->metaData->mOrigMsgId = msg->metaData->mMsgId;
|
||||
}
|
||||
|
||||
// now serialise meta data
|
||||
size = msg->metaData->serial_size();
|
||||
char metaDataBuff[size];
|
||||
msg->metaData->serialise(metaDataBuff, &size);
|
||||
msg->meta.setBinData(metaDataBuff, size);
|
||||
|
||||
|
||||
msgId = msg->msgId;
|
||||
grpId = msg->grpId;
|
||||
ok = mDataAccess->addMsgData(msg);
|
||||
|
@ -716,11 +719,50 @@ void RsGenExchange::createDummyGroup(RsGxsGrpItem *grpItem)
|
|||
void RsGenExchange::processRecvdData()
|
||||
{
|
||||
processRecvdGroups();
|
||||
|
||||
processRecvdMessages();
|
||||
}
|
||||
|
||||
|
||||
void RsGenExchange::processRecvdMessages()
|
||||
{
|
||||
RsStackMutex stack(mGenMtx);
|
||||
|
||||
std::vector<RsNxsMsg*>::iterator vit = mReceivedMsgs.begin();
|
||||
GxsMsgReq msgIds;
|
||||
std::map<RsNxsMsg*, RsGxsMsgMetaData*> msgs;
|
||||
|
||||
for(; vit != mReceivedMsgs.end(); vit++)
|
||||
{
|
||||
RsNxsMsg* msg = *vit;
|
||||
RsGxsMsgMetaData* meta = new RsGxsMsgMetaData();
|
||||
bool ok = meta->deserialise(msg->meta.bin_data, &(msg->meta.bin_len));
|
||||
|
||||
if(ok)
|
||||
{
|
||||
msgs.insert(std::make_pair(msg, meta));
|
||||
msgIds[msg->grpId].push_back(msg->msgId);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef GXS_GENX_DEBUG
|
||||
std::cerr << "failed to deserialise incoming meta, grpId: "
|
||||
<< msg->grpId << ", msgId: " << msg->msgId << std::endl;
|
||||
#endif
|
||||
delete msg;
|
||||
delete meta;
|
||||
}
|
||||
}
|
||||
|
||||
if(!msgIds.empty())
|
||||
{
|
||||
mDataStore->storeMessage(msgs);
|
||||
RsGxsMsgChange* c = new RsGxsMsgChange();
|
||||
c->msgChangeMap = msgIds;
|
||||
mNotifications.push_back(c);
|
||||
}
|
||||
|
||||
mReceivedMsgs.clear();
|
||||
}
|
||||
|
||||
|
||||
|
@ -737,11 +779,22 @@ void RsGenExchange::processRecvdGroups()
|
|||
{
|
||||
RsNxsGrp* grp = *vit;
|
||||
RsGxsGrpMetaData* meta = new RsGxsGrpMetaData();
|
||||
meta->deserialise(grp->meta.bin_data, grp->meta.bin_len);
|
||||
grps.insert(std::make_pair(grp, meta));
|
||||
|
||||
grpIds.push_back(grp->grpId);
|
||||
bool ok = meta->deserialise(grp->meta.bin_data, grp->meta.bin_len);
|
||||
|
||||
if(ok)
|
||||
{
|
||||
grps.insert(std::make_pair(grp, meta));
|
||||
grpIds.push_back(grp->grpId);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef GXS_GENX_DEBUG
|
||||
std::cerr << "failed to deserialise incoming meta, grpId: "
|
||||
<< grp->grpId << std::endl;
|
||||
#endif
|
||||
delete grp;
|
||||
delete meta;
|
||||
}
|
||||
}
|
||||
|
||||
if(!grpIds.empty())
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
RsGxsGrpMetaData::RsGxsGrpMetaData()
|
||||
{
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
uint32_t RsGxsGrpMetaData::serial_size()
|
||||
|
|
|
@ -98,7 +98,8 @@ void RsGxsNetService::syncWithPeers()
|
|||
{
|
||||
RsGxsGrpMetaData* meta = mit->second;
|
||||
|
||||
if(meta->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)
|
||||
if(meta->mSubscribeFlags & (GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED |
|
||||
GXS_SERV::GROUP_SUBSCRIBE_ADMIN) )
|
||||
grpIds.push_back(mit->first);
|
||||
|
||||
delete meta;
|
||||
|
@ -106,21 +107,21 @@ void RsGxsNetService::syncWithPeers()
|
|||
|
||||
sit = peers.begin();
|
||||
|
||||
// TODO msgs
|
||||
// synchronise group msg for groups which we're subscribed to
|
||||
for(; sit != peers.end(); sit++)
|
||||
{
|
||||
RsStackMutex stack(mNxsMutex);
|
||||
RsStackMutex stack(mNxsMutex);
|
||||
|
||||
std::vector<RsGxsGroupId>::iterator vit = grpIds.begin();
|
||||
std::vector<RsGxsGroupId>::iterator vit = grpIds.begin();
|
||||
|
||||
for(; vit != grpIds.end(); vit++)
|
||||
{
|
||||
RsNxsSyncMsg* msg = new RsNxsSyncMsg(mServType);
|
||||
msg->clear();
|
||||
msg->PeerId(*sit);
|
||||
msg->grpId = *vit;
|
||||
sendItem(msg);
|
||||
}
|
||||
for(; vit != grpIds.end(); vit++)
|
||||
{
|
||||
RsNxsSyncMsg* msg = new RsNxsSyncMsg(mServType);
|
||||
msg->clear();
|
||||
msg->PeerId(*sit);
|
||||
msg->grpId = *vit;
|
||||
sendItem(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,15 @@ void p3PhotoServiceV2::groupsChanged(std::list<RsGxsGroupId>& grpIds)
|
|||
void p3PhotoServiceV2::msgsChanged(
|
||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> >& msgs)
|
||||
{
|
||||
RsStackMutex stack(mPhotoMutex);
|
||||
|
||||
while(!mMsgChange.empty())
|
||||
{
|
||||
RsGxsMsgChange* mc = mMsgChange.back();
|
||||
msgs = mc->msgChangeMap;
|
||||
mMsgChange.pop_back();
|
||||
delete mc;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue