On Tue, 2004-05-11 at 12:45, Stewart Heitmann wrote:
> Good, I'm pleased you find my contributions useful.
> 
> However you only partially answered  my question.
> You explained that some devices natively support ADD/MODIFY/DELETE status,
> and other devices only support ADD/MODIFY (indirectly via timestamps) and
> yet others support none. But that is not my question.
> 
> My question (or rather my point) is this:
>       It is NOT necessary for the plugins to return the state (ADD/MODIFY/DELETE)
>       of each item to the sync-engine because the sync-engine is capable of
>         determining that itself by comparing the items it sees now with those
>       it saw before (at the previous synchronization).
>       So why ask the plugins to return that state info at all?
> 
> Currently, a plugin's get_changes() function must return the ADD/MODIFY/DELETE
> state of each item on the device that has been modified since the last
> synchronisation. That can be tricky, especially for the lesser capable
> devices, and it makes the plugins all the more awkward to write.

Thats right. You would have to write a logic which determins the state
of each item yourself. How hard this is depends on what your device
returns.

> 
> I suggest a change to the plugin design to make them easier to develop:
>       Relax the requirements of the get_changes() function so it simply has to
>       return a verbatim copy of all items held in the device (regardless of state).

That would not work with some plugins (eg the Palm Plugin). When i query
the palm it returns only those entries that were modified since the last
time. So if i wanted to return a copy of _all_ data, i would either have
to make a slow sync or keep a local copy of the data, which would be
error prone and just plain stupid.

And you would have to transfer a lot of data, even when just one contact
was modified (my bosses pocketpc has ~ 3000 contacts in it)

> 
> When the sync-engine calls this function, it determines the state of
> each item returned from the plugin by comparing its UID with a list of UIDs
> that it stored in a file at the previous synchronisation of the sync-pair.
> The logic for determining an item's state is as follows:
>       If an incoming item's UID is NOT in the sync-pair's UID file
>               then its state is ADDED
>       else
>               its state must be either MODIFIED or UNALTERED.
>               These can then be distinguised by comparing the
>               revision date of the incoming item with the date of
>               the previson synchronisation (or by direct comparision
>               of the vcard data).
>       Lastly, any UIDs present in the sync-pair's UID file but omitted
>       from the list returned by the plugin are state DELETED.
> 
> Thus the sync-engine can releive the plugin of it state-tracking duties.
> Remember too, the sync-engine already maintains a list of UIDs in the
> sync-pair's ids file so it shouldnt require much change to the sync-engine.
> 
> Make sense?

> 
> Stewart
> 
> 
> On Tue, 11 May 2004 01:40 pm, Tom Foottit wrote:
> > The plugin doc is up at:
> > http://www.multisync.org/developer/plugin_howto.html
> >
> > It looks pretty good. I need to review a few of the details (memory
> > management, etc.) and give it some more review before giving it to a wider
> > audience. This should be a very useful document, so thanks for getting it
> > going.
> >
> > To answer your question about whether the plugin has to know the state of
> > each object on the device: yes. The reason for this is that sync APIs vary
> > between devices - some have an API that tells you about all
> > adds/deletes/modifies every time you ask. Other APIs work via timestamp
> > and can tell you about modified and added, but not deleted. Still others
> > don't tell you anything and then plugin has to keep track of all states
> > (the Opie plugin does this with MD5 sums for example).
> >
> > I have looked at the KDE PIM plugin code and it looks like a good start
> > for addressbook. I set up autoconf/automake for it so makefiles are
> > generated and don't have to be hand-editied. However, I need KDE 3.2
> > (running 3.1.X right now) to build it, so my compile fails. I'll get y KDE
> > upgraded tonight and then once I can build I'll check things in tomrrow.
> >
> > Thanks again for getting involved - we're happy to have the help :)
> >
> > Tom



-------------------------------------------------------
This SF.Net email is sponsored by Sleepycat Software
Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to 
deliver higher performing products faster, at low TCO.
http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3
_______________________________________________
Multisync-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/multisync-devel

Reply via email to