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
Description: OpenPGP digital signature