On Wed, 2014-01-22 at 11:41 +0100, Lukas Zeller wrote:
> So I see no easy way to run the preflight earlier :-(
Perhaps we don't have to. What about adding the NumberOfChanges later
on? That should be SyncML compliant, shouldn't it?
Below is a patch which achieves that. It results in a sync where the
first Sync command of the client has no NumberOfChanges yet. Then in the
second message, the Sync command gets continued, but this time with a
NumberOfChanges value.
That's good enough for my purposes. If the sync is so short that all
items fit into one message, there's only a short period of time without
information about the total number of changes, which is okay.
diff --git a/src/sysync/synccommand.cpp b/src/sysync/synccommand.cpp
index 3b27d63..c37e9d3 100755
--- a/src/sysync/synccommand.cpp
+++ b/src/sysync/synccommand.cpp
@@ -742,7 +742,8 @@ TSyncCommand::TSyncCommand(
fSyncElementP->meta=NULL; // %%% no search grammar for now
// add number of changes for SyncML 1.1 if remote supports it
fSyncElementP->noc=NULL; // default to none
- if (aSessionP->fRemoteWantsNOC) {
+ fRemoteWantsNOC=aSessionP->fRemoteWantsNOC;
+ if (fRemoteWantsNOC) {
sInt32 noc = fLocalDataStoreP->getNumberOfChanges();
if (noc>=0) {
// we have a valid NOC value, add it
@@ -954,6 +955,17 @@ bool TSyncCommand::generateOpen(void)
// issue command Start <Sync> with SyncML toolkit
fPrepared=false; // force re-preparing in all cases (as this might be
continuing a command)
PrepareIssue(&fSyncElementP->cmdID,&fSyncElementP->flags);
+
+ // (re-)check NumberOfChanges, because in a SyncML client that number might
not
+ // have been available right away when constructing the TSyncCommand.
+ if (!fSyncElementP->noc &&
+ fRemoteWantsNOC) {
+ sInt32 noc = fLocalDataStoreP->getNumberOfChanges();
+ if (noc>=0) {
+ fSyncElementP->noc=newPCDataLong(noc);
+ }
+ }
+
if (!fEvalMode) {
#ifdef SYDEBUG
if (fSessionP->fXMLtranslate && fSessionP->fOutgoingXMLInstance)
diff --git a/src/sysync/synccommand.h b/src/sysync/synccommand.h
index 8d9e41d..dc12877 100755
--- a/src/sysync/synccommand.h
+++ b/src/sysync/synccommand.h
@@ -365,6 +365,7 @@ private:
// involved datastores and mode
TLocalEngineDS *fLocalDataStoreP;
TRemoteDataStore *fRemoteDataStoreP;
+ bool fRemoteWantsNOC;
}; // TSyncCommand
--
Best Regards, Patrick Ohly
The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.
_______________________________________________
os-libsynthesis mailing list
[email protected]
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis