GNOME Bugzilla – Bug 523632
Google contacts backend
Last modified: 2013-09-14 16:52:31 UTC
I'm proposing the inclusion of a google contacts backend into EDS. I've started working on this; the result can be found here (git repository): http://www.wh-hms.uni-ulm.de/~mfcn/eds-google-contacts.git/ Besides offline-mode all major features should be already implemented. There is of course still a lot of details that needs to be improved, but I think it's ready enough to get some attention and hopefully someone is interessted in reviewing it :-)
*** Bug 522656 has been marked as a duplicate of this bug. ***
Wow. Jorgen, can you make a patch out of it and post it? I would be interested in taking it for GNOME 2.24's Evolution release. I can review and comment it for sure. (You can mail to me or attach to the bug). Thx for your awesome work.
now bug 523630 is in svn, so this can get in if reviewed and seems fine.
Ok, cool :-) will do a patch over the weekend!
Created attachment 109934 [details] [review] Patch for trunk that adds the backend Hope this works (should apply and build fine with trunk). I haven't actually done 'make install' though, since i miss some dependencies to build the full e-d-s.
Ebby, the above patch needs some review love :-)
Jörgen, your base code seems fine interms of the api implementation for the backend. You haven't yet impl the offline thing, that should be pretty simple to do. I haven't tested it, I will ask some one to test it and may be we'll commit after that and we can fix bugs in the code after that.
Hey Jorgen, I applied your patch for testing but i couldn't find any GUI to access google contacts. Am i missed any thing ? I got build error during compilation /bin/sh ../../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../.. -DG_LOG_DOMAIN=\"libebookbackendgoogle\" -I../../../addressbook -I../../../addressbook -I../../../servers/google/libgdata -I../../../servers/google/libgdata -I../../../servers/google/libgdata-google -I../../../servers/google/libgdata-google -I/home/build/opt/gnome2/include/libsoup-2.4 -I/home/build/opt/gnome2/include/libxml2 -I/home/build/opt/gnome2/include -I/home/build/opt/gnome2/include/glib-2.0 -I/home/build/opt/gnome2/lib/glib-2.0/include -DORBIT2=1 -pthread -I/home/build/opt/gnome2/include/libxml2 -I/home/build/opt/gnome2/include/libgnome-2.0 -I/home/build/opt/gnome2/include/orbit-2.0 -I/home/build/opt/gnome2/include/gconf/2 -I/home/build/opt/gnome2/include/gnome-vfs-2.0 -I/home/build/opt/gnome2/lib/gnome-vfs-2.0/include -I/home/build/opt/gnome2/include -I/home/build/opt/gnome2/include/glib-2.0 -I/home/build/opt/gnome2/lib/glib-2.0/include -I/home/build/opt/gnome2/include/libbonobo-2.0 -I/home/build/opt/gnome2/include/bonobo-activation-2.0 -g -O2 -Wl,--allow-shlib-undefined -Wall -Wmissing-prototypes -Wno-sign-compare -Wno-pointer-sign -MT e-book-backend-google-factory.lo -MD -MP -MF .deps/e-book-backend-google-factory.Tpo -c -o e-book-backend-google-factory.lo e-book-backend-google-factory.c gcc -DHAVE_CONFIG_H -I. -I../../.. -DG_LOG_DOMAIN=\"libebookbackendgoogle\" -I../../../addressbook -I../../../addressbook -I../../../servers/google/libgdata -I../../../servers/google/libgdata -I../../../servers/google/libgdata-google -I../../../servers/google/libgdata-google -I/home/build/opt/gnome2/include/libsoup-2.4 -I/home/build/opt/gnome2/include/libxml2 -I/home/build/opt/gnome2/include -I/home/build/opt/gnome2/include/glib-2.0 -I/home/build/opt/gnome2/lib/glib-2.0/include -DORBIT2=1 -pthread -I/home/build/opt/gnome2/include/libxml2 -I/home/build/opt/gnome2/include/libgnome-2.0 -I/home/build/opt/gnome2/include/orbit-2.0 -I/home/build/opt/gnome2/include/gconf/2 -I/home/build/opt/gnome2/include/gnome-vfs-2.0 -I/home/build/opt/gnome2/lib/gnome-vfs-2.0/include -I/home/build/opt/gnome2/include -I/home/build/opt/gnome2/include/glib-2.0 -I/home/build/opt/gnome2/lib/glib-2.0/include -I/home/build/opt/gnome2/include/libbonobo-2.0 -I/home/build/opt/gnome2/include/bonobo-activation-2.0 -g -O2 -Wl,--allow-shlib-undefined -Wall -Wmissing-prototypes -Wno-sign-compare -Wno-pointer-sign -MT e-book-backend-google-factory.lo -MD -MP -MF .deps/e-book-backend-google-factory.Tpo -c e-book-backend-google-factory.c -fPIC -DPIC -o .libs/e-book-backend-google-factory.o e-book-backend-google-factory.c:24:49: error: libedataserver/e-data-server-module.h: No such file or directory e-book-backend-google-factory.c:81: warning: no previous prototype for 'eds_module_initialize' e-book-backend-google-factory.c:87: warning: no previous prototype for 'eds_module_shutdown' e-book-backend-google-factory.c:92: warning: no previous prototype for 'eds_module_list_types' make[4]: *** [e-book-backend-google-factory.lo] Error 1 make[4]: Leaving directory `/home/build/svn/gnome2/evolution-data-server/addressbook/backends/google' make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory `/home/build/svn/gnome2/evolution-data-server/addressbook/backends' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/build/svn/gnome2/evolution-data-server/addressbook' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/build/svn/gnome2/evolution-data-server' make: *** [all] Error 2 For the time being i commented line 24 in e-book-backend-google-factory.c and after that build completed successfully.
I think you missed to add the EPlugin code.
No, there is no UI to configure this. I just hacked a gconf key to include sources for the google contacts. There is a README in the git tree above, I'll post that later.
Ideally, you should extend the Google accounts EPlugin to add a google addressbook. It should be pretty easy to get, also will be easy for users to add addressbook.
Sure I can do that. I'm a bit busy right now, so it might take a while though, so if someone else is faster I wouldn't mind either :-)
I'll try to find some time before 2.23.3.
Created attachment 111455 [details] [review] An eplugin that adds the configuration UI I had time today, so here you are.
Created attachment 111457 [details] [review] This one integrates within the existing plugin, instead of creating a new
Created attachment 111458 [details] [review] Woops, next try ;-)
Hey Jorgen, i tried your patch. Congrats , it successfully fetches google contacts. I modified a contact in evolution and it synced in gmail . Wow Here is list of the issues : 1) It fetched only 100 contacts in evolution, i have 300 contacts in my google address book. 2) It doesn't allow to delete/remove address book. 3) Minor UI changes in configuration dialog will be required. Srag can give more comments as he is UI expert in evolution. 4) I removed address book from gconf but next time when i created, it didn't ask me gmail account password. 5) There is a double free crash when ever i try to add/copy/move any contact in google address book ,traces are attached. 6) Few warnings in eds terminal impl_GNOME_Evolution_Addressbook_Book_getContactList feed.xml:8: namespace error : Namespace prefix gd on email is not defined emas.google.com/g/2005#other" address="resumeservices@xxx.com" primary="true" ^ (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported vcard field: VERSION: 3.0 (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported vcard field: X-MOZILLA-HTML: FALSE (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported vcard field: X-EVOLUTION-FILE-AS: service, Resume (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported vcard field: UID: http://www.google.com/m8/feeds/contacts/user%40gmail.com/base/d
Created attachment 111593 [details] Double free traces
Created attachment 111594 [details] [review] UI Patch with base directory path Patch attached in comment#16 cannot be applied as it misses base directory path. Thanks bharath for modifying it so that i could apply the patch. Now anyone wants to try,he can apply easily.
Valgrind of eds during double-free ==5247== ==5247== Thread 3: ==5247== Invalid free() / delete / delete[] ==5247== at 0x402243F: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==5247== by 0x4D5C330: g_free (gmem.c:190) ==5247== by 0x52A9A58: gdata_entry_finalize (gdata-entry.c:270) ==5247== by 0x4CE9CB7: g_object_unref (gobject.c:1793) ==5247== by 0x529ED14: e_book_backend_google_create_contact (e-book-backend-google.c:123) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247== by 0x40FDFF8: impl_GNOME_Evolution_Addressbook_Book_addContact (e-data-book.c:103) ==5247== by 0x40EEEA9: _ORBIT_skel_small_GNOME_Evolution_Addressbook_Book_addContact (Evolution-DataServer-Addressbook-common.c:64) ==5247== by 0x4CA11BD: ORBit_POAObject_invoke (poa.c:1148) ==5247== by 0x4CA716A: ORBit_OAObject_invoke (orbit-adaptor.c:340) ==5247== Address 0x4F9E0A0 is 0 bytes inside a block of size 360 free'd ==5247== at 0x402243F: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==5247== by 0x4D5C330: g_free (gmem.c:190) ==5247== by 0x496D3A5: soup_buffer_free (soup-message-body.c:262) ==5247== by 0x496D549: soup_message_body_truncate (soup-message-body.c:451) ==5247== by 0x496D5CE: soup_message_body_free (soup-message-body.c:648) ==5247== by 0x496D0FB: finalize (soup-message.c:154) ==5247== by 0x4CE9CB7: g_object_unref (gobject.c:1793) ==5247== by 0x42443A5: gdata_google_service_insert_entry (gdata-google-service.c:298) ==5247== by 0x52A9D77: gdata_service_insert_entry (gdata-service-iface.c:43) ==5247== by 0x529ED07: e_book_backend_google_create_contact (e-book-backend-google.c:121) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== ==5247== Use of uninitialised value of size 4 ==5247== at 0x4D822D7: g_utf8_offset_to_pointer (gutf8.c:302) ==5247== by 0x41C30B4: e_vcard_to_string (e-vcard.c:914) ==5247== by 0x529C676: vcard_from_gdata_entry (util.c:356) ==5247== by 0x529C6B4: e_contact_from_gdata_entry (util.c:342) ==5247== by 0x529ED2A: e_book_backend_google_create_contact (e-book-backend-google.c:129) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247== by 0x40FDFF8: impl_GNOME_Evolution_Addressbook_Book_addContact (e-data-book.c:103) ==5247== by 0x40EEEA9: _ORBIT_skel_small_GNOME_Evolution_Addressbook_Book_addContact (Evolution-DataServer-Addressbook-common.c:64) ==5247== by 0x4CA11BD: ORBit_POAObject_invoke (poa.c:1148) ==5247== by 0x4CA716A: ORBit_OAObject_invoke (orbit-adaptor.c:340) ==5247== ==5247== Invalid read of size 1 ==5247== at 0x4D822E3: g_utf8_offset_to_pointer (gutf8.c:301) ==5247== by 0x41C30B4: e_vcard_to_string (e-vcard.c:914) ==5247== by 0x529C676: vcard_from_gdata_entry (util.c:356) ==5247== by 0x529C6B4: e_contact_from_gdata_entry (util.c:342) ==5247== by 0x529ED2A: e_book_backend_google_create_contact (e-book-backend-google.c:129) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247== by 0x40FDFF8: impl_GNOME_Evolution_Addressbook_Book_addContact (e-data-book.c:103) ==5247== by 0x40EEEA9: _ORBIT_skel_small_GNOME_Evolution_Addressbook_Book_addContact (Evolution-DataServer-Addressbook-common.c:64) ==5247== by 0x4CA11BD: ORBit_POAObject_invoke (poa.c:1148) ==5247== by 0x4CA716A: ORBit_OAObject_invoke (orbit-adaptor.c:340) ==5247== Address 0x90E1490 is 0 bytes after a block of size 128 alloc'd ==5247== at 0x4022922: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==5247== by 0x4D5C384: g_realloc (gmem.c:170) ==5247== by 0x4D760E7: g_string_maybe_expand (gstring.c:359) ==5247== by 0x4D76C19: g_string_insert_len (gstring.c:694) ==5247== by 0x4D76FF0: g_string_append (gstring.c:815) ==5247== by 0x41C2E10: e_vcard_to_string (e-vcard.c:885) ==5247== by 0x529C676: vcard_from_gdata_entry (util.c:356) ==5247== by 0x529C6B4: e_contact_from_gdata_entry (util.c:342) ==5247== by 0x529ED2A: e_book_backend_google_create_contact (e-book-backend-google.c:129) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247== ==5247== Invalid read of size 1 ==5247== at 0x4D822D1: g_utf8_offset_to_pointer (gutf8.c:302) ==5247== by 0x41C30B4: e_vcard_to_string (e-vcard.c:914) ==5247== by 0x529C676: vcard_from_gdata_entry (util.c:356) ==5247== by 0x529C6B4: e_contact_from_gdata_entry (util.c:342) ==5247== by 0x529ED2A: e_book_backend_google_create_contact (e-book-backend-google.c:129) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247== by 0x40FDFF8: impl_GNOME_Evolution_Addressbook_Book_addContact (e-data-book.c:103) ==5247== by 0x40EEEA9: _ORBIT_skel_small_GNOME_Evolution_Addressbook_Book_addContact (Evolution-DataServer-Addressbook-common.c:64) ==5247== by 0x4CA11BD: ORBit_POAObject_invoke (poa.c:1148) ==5247== by 0x4CA716A: ORBit_OAObject_invoke (orbit-adaptor.c:340) ==5247== Address 0x90E1491 is 1 bytes after a block of size 128 alloc'd ==5247== at 0x4022922: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==5247== by 0x4D5C384: g_realloc (gmem.c:170) ==5247== by 0x4D760E7: g_string_maybe_expand (gstring.c:359) ==5247== by 0x4D76C19: g_string_insert_len (gstring.c:694) ==5247== by 0x4D76FF0: g_string_append (gstring.c:815) ==5247== by 0x41C2E10: e_vcard_to_string (e-vcard.c:885) ==5247== by 0x529C676: vcard_from_gdata_entry (util.c:356) ==5247== by 0x529C6B4: e_contact_from_gdata_entry (util.c:342) ==5247== by 0x529ED2A: e_book_backend_google_create_contact (e-book-backend-google.c:129) ==5247== by 0x40F81E5: e_book_backend_sync_create_contact (e-book-backend-sync.c:61) ==5247== by 0x40F82B8: _e_book_backend_create_contact (e-book-backend-sync.c:374) ==5247== by 0x40F990E: e_book_backend_create_contact (e-book-backend.c:185) ==5247==
Jörgen, Great job. I think it works mostly and some issues still pending. Im favor of the patch. Can we chat on #evolution on irc.gnome.org for further progress? Thanks for your awesome work.
(In reply to comment #17) > Hey Jorgen, i tried your patch. Congrats , it successfully fetches google > contacts. I modified a contact in evolution and it synced in gmail . Wow > > Here is list of the issues : > > 1) It fetched only 100 contacts in evolution, i have 300 contacts in my google > address book. Per default, google does not send all contacts in a query, but only a few. There is a max-results parameter to the query, the api says you should set it to a "very big number" in order to get all contacts. That would however delay the initial bookview population significantly for big contact sets. I think the correct approach here is to implement offline mode and thus cache the contacts locally. And then only download the diff, which the google api nicely allows (by using timestamps). That needs a bit of work though, more than i will have in the next couple of weeks. > 2) It doesn't allow to delete/remove address book. Well :-) You cannot remove your google addressbook, can you? But i guess it should just return Success and don't do anything, so that the entry in evolution can be removed successfully. I guess thats what you want? > 3) Minor UI changes in configuration dialog will be required. Srag can give > more comments as he is UI expert in evolution. Well, it could also have more options. "Use ssl" comes to my mind for example. > 4) I removed address book from gconf but next time when i created, it didn't > ask me gmail account password. I dont think this is a problem with the backend. The password is simply still in the keyring. > 5) There is a double free crash when ever i try to add/copy/move any contact in > google address book ,traces are attached. Thanks :-) > 6) Few warnings in eds terminal > > impl_GNOME_Evolution_Addressbook_Book_getContactList > feed.xml:8: namespace error : Namespace prefix gd on email is not defined > emas.google.com/g/2005#other" address="resumeservices@xxx.com" primary="true" That needs a change inside libgdata that i was too afraid would break other things, so i didn't include it in my patch to libgdata. The warning is harmless however, basically libxml is just a bit disappointed that libgata doesn't prefix stuff correctly. > (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported > vcard field: VERSION: 3.0 > > (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported > vcard field: X-MOZILLA-HTML: FALSE > > (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported > vcard field: X-EVOLUTION-FILE-AS: service, Resume Those should be just made to shut up i guess. > (evolution-data-server-2.24:796): libebookbackendgoogle-WARNING **: unsupported > vcard field: UID: > http://www.google.com/m8/feeds/contacts/user%40gmail.com/base/d Hmm, not sure if this can be ignored or should be handled, i would need to check.
Jörgen, by removing google address book, i meant we should be able to delete configured one from evolution as we do in google calendar. It doesn't mean that we would be able to delete from google account. You can check in google calendar, when you right click and say 'delete', it will remove calender from evolution. I hope i am clear now :-)
Jörgen: Is there a possibility of a chat with you in the next few days? I'm considering taking this for GNOME 2.24 and wanted to discuss a few things with you. I'm 'srag' on #evolution/GimpNet and Im on UTC +5:30 timezone.
Hey, sorry for the latency - I've been on vacation. Sure, I can do that. Another option would be to have a chat next week in Istanbul (in case you are coming :-))
Im there at GUADEC. Lets meet there :)
Ok. I approve to commit it for 2.23.5 (freezes start there). We can fix bugs there. Akhil, can you provide a exhaustive bug list. There are some assumptions like offline isn't implemented.. consider this while testing.
Please also note this at http://live.gnome.org/RoadMap when committing. Thanks.
Committed to EDS Trunk as r9151 http://svn.gnome.org/viewvc/evolution-data-server?view=revision&revision=9151 Committed to Evo Trunk as r35797 http://svn.gnome.org/viewvc/evolution?view=revision&revision=35797 Srini would update the RoadMap page in a few minutes.
Fixed a build break in this revision http://svn.gnome.org/viewvc/evolution-data-server?view=revision&revision=9153
This feature breaks build on Solaris in EDS 2.23.5. "util.c", line 535: operands have incompatible types: void ":" int This is because of the definition of __debug in util.h g_log returns void, but 0 is an int type. The Sun Studio compiler must require that both sides of the colon in ?: be the same type (though that seems broken). I tried changing 0 to '\0', return and void but still failed to compile. If __debug was an actual function then it would be easy (though ... and __VA_ARGS__ is different on Solaris).
Cool that this has been committed! Thanks Srini! I have started on implementing offline mode. It's almost done; though i've mostly replaced the previous in-memory storage with a on-disc storage. I later realized that there is a setting to not sync things to disc when in offline mode though, that of course again makes things more complicated. So what is needed is both a cache on disc and a cache in memory i guess, depending on whether this setting is enabled. Regarding the __debug__. This debugging should probably be removed at some point altogether. For now could you try if the following things help to make it compile on solaris? a) remove the "0" altogether? i'm not entirely sure, but i think (a ? b : ) is valid c. b) if that does not help, try to replace the definition of __debug__ with the following: #define __debug__(...) if (__e_book_backend_google_debug__) { \ g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_DEBUG, \ __VA_ARGS__); }
Option b works perfectly. (I didn't try option a).
(In reply to comment #32) > Cool that this has been committed! Thanks Srini! > > I have started on implementing offline mode. It's almost done; though i've > mostly replaced the previous in-memory storage with a on-disc storage. I later > realized that there is a setting to not sync things to disc when in offline > mode though, that of course again makes things more complicated. So what is > needed is both a cache on disc and a cache in memory i guess, depending on > whether this setting is enabled. > Jörgen, Awesome. Waiting to get that in asap.
Srini, I have now implemented offline mode and refactored the thing a bit. Is it ok if I commit directly to svn? Otherwise I could also attach a patch...
Jörgen, You know the code best. Im fine if you want to commit directly. Make sure, if you change any STRING/UI you must announce it gnome-i18n@ and gnome-doc-list@.
Ok, submitted :-) There is still a few small issues lurking around in the conversion between google-format and vcard, but I hope I will manage to fix those still before 2.24. And there is probably bugs :-) Other than that, I noticed that Google have updated their API. It's now also possible to retrieve and edit the photos of contacts. That would be very nice to have IMHO, but I guess I won't have time to implement that before 2.24 anymore. Another thing they now allow is custom properties for entries. This means that even fields that Google does not support could be saved on the server. I don't know how usefull that would be though, given that those properties are only visible in evolution then...
(In reply to comment #37) > Ok, submitted :-) > > There is still a few small issues lurking around in the conversion between > google-format and vcard, but I hope I will manage to fix those still before > 2.24. > Awesome. > And there is probably bugs :-) Which we all can fix ;-) > > Other than that, I noticed that Google have updated their API. It's now also > possible to retrieve and edit the photos of contacts. That would be very nice > to have IMHO, but I guess I won't have time to implement that before 2.24 > anymore. We can take it stages, I think this work is really good and has lots of Value. I think now what I should do is a google account setup, which can automatically setup (mail[pop/imap]/calendar/addressbook] as any other groupware provider. I'll see when I can find time to do it. Thanks for you awesome work. > > Another thing they now allow is custom properties for entries. This means that > even fields that Google does not support could be saved on the server. I don't > know how usefull that would be though, given that those properties are only > visible in evolution then... > I need to think more, how we can utilize it.
Srini, please add to the Roadmap wikipage (for the 2.24 release notes). Thanks ;-)
I see this when compiling eds: google-book.c: In function ‘google_book_connect_to_google’: google-book.c:748: warning: implicit declaration of function ‘gdata_google_service_authenticate’ I consider this quite serious. I noticed some recent commits mentioning this function, but it doesn't work, seems to me. Can you take care of that, please?
I've sent a patch to evolution-patches, that makes that function in libgdata-google public. Srini said it's ok to commit and I'll do so tomorrow, if nobody is faster than me ;-)
Created attachment 116689 [details] [review] Attaching that patch here, too.
Commit it fast :-)
Accepted patch was committed in r9356 and r9357.
Can this be closed now?
I haven't tried google contact after i tested the patch so i am not sure how many issues got resolved. Better to close the bug, i guess we will have to open separate bugs for each issue. Just thoughts, you can disagree :)
All issues mentioned in comment#17 are fixed, just tried today with trunk, thanks Jorgen. I am closing the bug as Fixed.