Re: Multisync: patch and question

Armin Bauer <[email protected]>
Newsgroups gmane.comp.gnome.apps.multisync.user
Message-ID <[email protected]>

Gonzalo Diethelm wrote:
> Hello list, first post here.
>
> If you get two copies of this message, apologies in advance.
>
> First, a small patch that changes "Ximan" for "Ximian"...

oh, right. but i think it should be patched again since its Novell now :)

>
> Now that it looks like I'm helping out, I do have a question. I'm using
> multisync (off CVS) to synchronize Evolution 2 (2.0.3) and a Sony
> Ericsson T616 mobile phone. When my initial conditions are these:
>
> 1. Mobile phone with empty contacts and calendar
> 2. Evolution without any msync DBs under ~/.evolution
>
> then the (full) synchronization succeeds, printing in the log:
>
>   Synchronization of 2124 entries succeeded.
>
> Sweet! But if I try to synchronize again (even immediately after the
> successful synch) I will get the following error:
>
>   Failed to get first plugin changes: Unknown error.
>
> The first plugin is the evo2 connector. From here, nothing I do will
> allow me to synchronize again. The only way to achieve that is to go
> back to the two initial conditions listed above (that is, clearing up
> the phone and evolution changes databases).
>
> Does anybody have any hints? Is there anything I can do to help
> tracking this bug? Since I have gone through the pain of compiling
> multisync from CVS, I don't mind touching source code.

i think this bug should be fixed now in multisync 0.9 (there are quite a
lot of fixes and improvements there). so you can take a look at the
source code there and see what has changed:

http://svn.opensync.org/trunk/plugins/evolution2_sync/

>
> In fact, after some debugging, I'm starting to form a suspicion about
> where the problem lies. Function get_changes() in evolution_sync.c has
> the following code (wrapped by me to ease reading):
>
> 216     if (env->adressbook &&
>             env->commondata.object_types & SYNC_OBJECT_TYPE_PHONEBOOK)
>         {
> 217       if (!e_book_get_changes(env->adressbook,
>                                   env->change_id, &changes, NULL))
>           {
>             sync_set_pair_status(env->handle,
>                          "Couldnt get changes from addressbook");
>             sync_set_requestfailed(env->handle);
>             return;
>           }
> 222       evo_get_changes(&chinfo_list, changes,
>                           SYNC_OBJECT_TYPE_PHONEBOOK);
>           //e_cal_free_change_list(changes);
>           changes = NULL;
>         }
>
> 227     if (env->calendar &&
>             env->commondata.object_types & SYNC_OBJECT_TYPE_CALENDAR)
>         {
> 228       if (!e_cal_get_changes(env->calendar,
>                                  env->change_id, &changes, NULL))
>           {
> 229         sync_set_pair_status(env->handle,
>                          "Couldnt get changes from calendar");
>             sync_set_requestfailed(env->handle);
>             return;
>           }
>           evo_get_changes(&chinfo_list, changes,
>                           SYNC_OBJECT_TYPE_CALENDAR);
>           //e_cal_free_change_list(changes);
>           changes = NULL;
>         }
>
> I have selected to sync everything (calendar, tasks and phone book).
> The flow goes like this:
>
> 216: enter the if for address book
> 217: will find no outstanding changes (but will NOT fail)
> 222: set no changes for phone book
> 227: enter the if for calendar
> 228: will FAIL when getting outstanding changes
> 229: will exit the function
>

What you definetly should do is set the last parameter to a GError * so
you can see what evo2 is complaining about :)

so:

add a GError *error = NULL;

then do a &error as the last parameter

and print the error in the failing branch of the if:

printf("Error was %s\n", error ? error->message : "None");

> Now, evolution 2 is keeping the following change DBs:
>
> calendar: calendar.ics-msyncid2.db
> tasks: tasks.ics-msyncid2.db
> address book: msyncid2.changes.db
>
> In 217 and 228, it is trying to get changes with an env->change_id
> value of "msyncid2"; notice how that matches parts of the names for my
> change DBs in evolution. However, you can see the names do not have the
> same structure; for both calendar and tasks, the names are
>
>   <FULL DB NAME>-<CHANGE ID NAME>.db
>
> but for address book it is
>
>   <CHANGE ID NAME>.changes.db

I dont think thats the cause. Its the same here.

>
> I tried synchronizing each thing separately. Tasks and address book
> work, only calendar fails. My theory is that this is somehow related to
> the name for the calendar change DB in evolution; it is weakened
> because I would have expected address book to be the one that fails,
> since it is the odd one out. Oh well, this could be an avenue to
> explore.
>
> In any case, thanks to everyone for a great piece of software.
>
> Best regards,
>
>
>
> ------------------------------------------------------------------------
>
> Index: plugins/evolution2_sync/src/evolution_sync.c
> ===================================================================
> RCS file: /cvsroot/multisync/multisync/plugins/evolution2_sync/src/evolution_sync.c,v
> retrieving revision 1.2.2.11
> diff -w -c -r1.2.2.11 evolution_sync.c
> *** plugins/evolution2_sync/src/evolution_sync.c	26 Nov 2004 16:06:20 -0000	1.2.2.11
> --- plugins/evolution2_sync/src/evolution_sync.c	9 Mar 2005 17:42:23 -0000
> ***************
> *** 403,409 ****
>   char *long_name()
>   {
>     printf ("%s\n", __func__);
> !   return "Ximan Evolution 2";
>   }
>
>
> --- 403,409 ----
>   char *long_name()
>   {
>     printf ("%s\n", __func__);
> !   return "Ximian Evolution 2";
>   }
>
>
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD8DBQFCMgFuq9z7v9k9UakRAkX8AJ983Fco3gAUFFL4VJIN56mNQZKECwCfbLVS
7uX1AdaqgMRL7WcQ8i+Vbuc=
=CL7D
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.