always rebuild local tracking status during slow and refresh syncs
git-svn-id: https://zeitsenke.de/svn/SyncEvolution/trunk@499 15ad00c4-1369-45f4-8270-35d70d36bdcd
This commit is contained in:
parent
1a21c06a2e
commit
918400b4b0
1 changed files with 19 additions and 1 deletions
|
@ -33,6 +33,19 @@ void TrackingSyncSource::beginSyncThrow(bool needAll,
|
||||||
RevisionMap_t revisions;
|
RevisionMap_t revisions;
|
||||||
listAllItems(revisions);
|
listAllItems(revisions);
|
||||||
|
|
||||||
|
// slow sync or refresh-from-server/client: clear tracking node and
|
||||||
|
// recreate it based on current content of database
|
||||||
|
if (!needPartial) {
|
||||||
|
ArrayList uids;
|
||||||
|
ArrayList modTimes;
|
||||||
|
m_trackingNode->readProperties(&uids, &modTimes);
|
||||||
|
for (int i = 0; i < uids.size(); i++ ) {
|
||||||
|
const StringBuffer *uid = (StringBuffer *)uids[i];
|
||||||
|
m_deletedItems.addItem(uid->c_str());
|
||||||
|
m_trackingNode->removeProperty(uid->c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (RevisionMap_t::const_iterator it = revisions.begin();
|
for (RevisionMap_t::const_iterator it = revisions.begin();
|
||||||
it != revisions.end();
|
it != revisions.end();
|
||||||
it++) {
|
it++) {
|
||||||
|
@ -41,7 +54,6 @@ void TrackingSyncSource::beginSyncThrow(bool needAll,
|
||||||
|
|
||||||
if (deleteLocal) {
|
if (deleteLocal) {
|
||||||
deleteItem(uid);
|
deleteItem(uid);
|
||||||
m_trackingNode->removeProperty(uid.c_str());
|
|
||||||
} else {
|
} else {
|
||||||
// always remember the item, need full list to find deleted items
|
// always remember the item, need full list to find deleted items
|
||||||
m_allItems.addItem(uid);
|
m_allItems.addItem(uid);
|
||||||
|
@ -58,10 +70,16 @@ void TrackingSyncSource::beginSyncThrow(bool needAll,
|
||||||
m_trackingNode->setPropertyValue(uid.c_str(), revision.c_str());
|
m_trackingNode->setPropertyValue(uid.c_str(), revision.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// refresh-from-client: make sure that all items we are about
|
||||||
|
// to send to server are also in our tracking node (otherwise
|
||||||
|
// the next incremental sync will go wrong)
|
||||||
|
m_trackingNode->setPropertyValue(uid.c_str(), revision.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clear information about all items that we recognized as deleted
|
||||||
if (needPartial) {
|
if (needPartial) {
|
||||||
ArrayList uids;
|
ArrayList uids;
|
||||||
ArrayList modTimes;
|
ArrayList modTimes;
|
||||||
|
|
Loading…
Reference in a new issue