[maemo-developers] syncing address book and calendars

From: Patrick Ohly Patrick.Ohly at gmx.de
Date: Tue Mar 20 23:31:21 EET 2007

I've got my SyncEvolution client at a point that I am nearly ready to
release a first package. There were a few obstacles that had to be
solved first, thus the delay.

The biggest problem were DBus timeouts because the EDS backend simply
took too long to reply. In some, but not all cases using the
asynchronous libebook calls helped. Increasing the default timeout would
have been okay for the non-interactive command line tool SyncEvolution,
but there is no way how the default DBus timeout can be increased. My
current solution is to link the SyncEvolution binary against a patched
libdbus-1.a where the DBUS_DEFAULT_TIMEOUT env variable is set by the
application and checked by the library.

Another problem was that the official EDS-DBus libraries need a fix to
make e_book_get_changes() work properly. I discussed this with Ross
Burton and for a while it seemed like I would have to distribute updated
libebook/evolution-data-server-addressbook .debs together with
SyncEvolution - not so nice for me and users. Then it occurred to me
that I can implement the same fix by wrapping a libebook function; so
far this seems to work.

Finally I wanted to be able to sync address book and calendar if the
user has installed both, but did not want to introduce a hard dependency
on a non-standard package. Therefore I turned the SyncEvolution backends
into dynamically loadable modules; unfortunately this in combination
with the dbus-1 hack leads to errors in libebook which I still need to

Now after this (lengthy) recap on to my open questions - equally
lengthy, I hope you are still with me... ;-)

I can install o-hand's evolution-data-server-calendar from
http://maemo.o-hand.com/ mistral on my 770 (latest official OS), but the
most recent 0.3.1-1 dates application itself depends on hildon-libs0 >=
0.12.24-3 while I only have 0.12.22-1. I can install dates 0.2-1, but I
wonder whether I miss something here?

While testing contact syncs I found that deleting a contact in the
address book does not really delete it. Instead
X-OSSO-CONTACT-STATE:DELETED was set, which is synced to the SyncML
server but not acted upon by the server or SyncEvolution. What is the
semantic of X-OSSO-CONTACT-STATE:DELETED? Who is responsible for
cleaning up these deleted contacts?

Is there a package which installs a "diff" tool? In the post-processing
of a sync a comparison of before/after dumps of the address book are
done by a Perl script which at some point invokes diff and parses the
output. I found patch and diffstat .debs in the standard repositories,
but not diff itself.

The same Perl script tries to use UTF-8 encoded strings to get the
character counting in vcards right, but "use encoding 'utf8'" fails with
"encoding.pm not found". Is there some way how I can check for the
existance of encoding.pm without triggering errors? I already tried to
execute the 'use encoding' inside an eval block, to no avail.

Bye, Patrick Ohly
Patrick.Ohly at gmx.de

More information about the maemo-developers mailing list