Blame SOURCES/evolution-3.40.4-google-contacts-to-carddav.patch

27c4a4
diff -up evolution-3.40.4/.3 evolution-3.40.4/
27c4a4
diff -up evolution-3.40.4/po/ca.po.3 evolution-3.40.4/po/ca.po
27c4a4
--- evolution-3.40.4/po/ca.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/ca.po	2022-04-05 10:00:37.396025268 +0200
27c4a4
@@ -29878,3 +29878,11 @@ msgstr "Certificat importat"
27c4a4
 
27c4a4
 #~ msgid "Certificate details"
27c4a4
 #~ msgstr "Detalls del certificat"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Llibreta d'adreces d'usuari per defecte"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Llibreta d'adreces:"
27c4a4
diff -up evolution-3.40.4/po/cs.po.3 evolution-3.40.4/po/cs.po
27c4a4
--- evolution-3.40.4/po/cs.po.3	2022-04-05 10:00:37.398025267 +0200
27c4a4
+++ evolution-3.40.4/po/cs.po	2022-04-05 10:01:37.100998171 +0200
27c4a4
@@ -28264,3 +28264,10 @@ msgstr "Nelze zapsat úložiště na dis
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "Importovaný certifikát"
27c4a4
 
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Výchozí uživatelský adresář"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresář:"
27c4a4
diff -up evolution-3.40.4/po/da.po.3 evolution-3.40.4/po/da.po
27c4a4
--- evolution-3.40.4/po/da.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/da.po	2022-04-05 10:00:37.400025266 +0200
27c4a4
@@ -28202,3 +28202,11 @@ msgstr "Kan ikke skrive lageret til disk
27c4a4
 #: ../src/smime/lib/e-pkcs12.c:407
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "Importeret certifikat"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Standard-brugeradressebog"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adressebog:"
27c4a4
diff -up evolution-3.40.4/po/de.po.3 evolution-3.40.4/po/de.po
27c4a4
--- evolution-3.40.4/po/de.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/de.po	2022-04-05 10:00:37.402025265 +0200
27c4a4
@@ -28546,3 +28546,11 @@ msgstr "Importiertes Zertifikat"
27c4a4
 
27c4a4
 #~ msgid "%d/%m/%Y"
27c4a4
 #~ msgstr "%d.%m.%Y"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Standard-Benutzer-Adressbuch"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adressbuch:"
27c4a4
diff -up evolution-3.40.4/po/el.po.3 evolution-3.40.4/po/el.po
27c4a4
--- evolution-3.40.4/po/el.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/el.po	2022-04-05 10:00:37.404025264 +0200
27c4a4
@@ -36518,3 +36518,11 @@ msgstr "Εισηγμένο πιστοπÎ
27c4a4
 #~ msgstr ""
27c4a4
 #~ "Ειδοποιεί τον χρήστη με ένα εικονίδιο στην περιοχή ειδοποίησης και με ένα "
27c4a4
 #~ "μήνυμα ειδοποίησης κάθε φορά που φθάνει ένα νέο μήνυμα."
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Προεπιλεγμένο βιβλίο διευθύνσεων χρήστη"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Βιβλίο διευθύνσεων:"
27c4a4
diff -up evolution-3.40.4/po/eo.po.3 evolution-3.40.4/po/eo.po
27c4a4
--- evolution-3.40.4/po/eo.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/eo.po	2022-04-05 10:00:37.406025263 +0200
27c4a4
@@ -27968,3 +27968,7 @@ msgstr "Enportita atestilo"
27c4a4
 
27c4a4
 #~ msgid "Read and write emails"
27c4a4
 #~ msgstr "Legi kaj skribi retpoŝtojn"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresaro:"
27c4a4
diff -up evolution-3.40.4/po/es.po.3 evolution-3.40.4/po/es.po
27c4a4
--- evolution-3.40.4/po/es.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/es.po	2022-04-05 10:00:37.408025262 +0200
27c4a4
@@ -29113,3 +29113,11 @@ msgstr "Certificado importado"
27c4a4
 #~ msgstr ""
27c4a4
 #~ "El calendario «%s» contiene %d citas que entran en conflicto con esta "
27c4a4
 #~ "reunión"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Eliminar la libreta de direcciones de usuario predeterminada"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Libreta de direcciones:"
27c4a4
diff -up evolution-3.40.4/po/eu.po.3 evolution-3.40.4/po/eu.po
27c4a4
--- evolution-3.40.4/po/eu.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/eu.po	2022-04-05 10:00:37.409025262 +0200
27c4a4
@@ -27204,3 +27204,11 @@ msgstr "Inportatutako ziurtagiria"
27c4a4
 
27c4a4
 #~ msgid "_Destination"
27c4a4
 #~ msgstr "_Helburua"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Erabiltzailearen helbide-liburu lehenetsia"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Helbide-liburua:"
27c4a4
diff -up evolution-3.40.4/po/fi.po.3 evolution-3.40.4/po/fi.po
27c4a4
--- evolution-3.40.4/po/fi.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/fi.po	2022-04-05 10:00:37.411025261 +0200
27c4a4
@@ -29750,3 +29750,7 @@ msgstr "Tuotu varmenne"
27c4a4
 
27c4a4
 #~ msgid "Certificate details"
27c4a4
 #~ msgstr "Varmenteen yksityiskohdat"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Osoitekirja:"
27c4a4
diff -up evolution-3.40.4/po/fr.po.3 evolution-3.40.4/po/fr.po
27c4a4
--- evolution-3.40.4/po/fr.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/fr.po	2022-04-05 10:00:37.413025260 +0200
27c4a4
@@ -28750,3 +28750,11 @@ msgstr "Certificat importé"
27c4a4
 
27c4a4
 #~ msgid "Preserve exiting reminder by default"
27c4a4
 #~ msgstr "Conserver les rappels existants par défaut"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Carnet d’adresses par défaut de l’utilisateur"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Carnet d’adresses :"
27c4a4
diff -up evolution-3.40.4/po/fur.po.3 evolution-3.40.4/po/fur.po
27c4a4
--- evolution-3.40.4/po/fur.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/fur.po	2022-04-05 10:00:37.414025260 +0200
27c4a4
@@ -29053,3 +29053,11 @@ msgstr "Certificât impuartât"
27c4a4
 #~ msgctxt "PGPKeyDescription"
27c4a4
 #~ msgid "%s - %s"
27c4a4
 #~ msgstr "%s - %s"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Rubriche utent predefinît"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Rubriche:"
27c4a4
diff -up evolution-3.40.4/po/gl.po.3 evolution-3.40.4/po/gl.po
27c4a4
--- evolution-3.40.4/po/gl.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/gl.po	2022-04-05 10:00:37.416025259 +0200
27c4a4
@@ -28502,3 +28502,11 @@ msgstr "Certificado importado"
27c4a4
 
27c4a4
 #~ msgid "Delivery Notification for “%s”"
27c4a4
 #~ msgstr "Notificación de recepción para «%s»"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Axenda de enderezos predeterminada do usuario"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Caderno de enderezos:"
27c4a4
diff -up evolution-3.40.4/po/hr.po.3 evolution-3.40.4/po/hr.po
27c4a4
--- evolution-3.40.4/po/hr.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/hr.po	2022-04-05 10:00:37.418025258 +0200
27c4a4
@@ -28303,3 +28303,11 @@ msgstr "Uvezena vjerodajnica"
27c4a4
 
27c4a4
 #~ msgid "This certificate is not viewable"
27c4a4
 #~ msgstr "Ovaj potvrda nije vidljiva"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Zadani adresar korisnika"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresar:"
27c4a4
diff -up evolution-3.40.4/po/hu.po.3 evolution-3.40.4/po/hu.po
27c4a4
--- evolution-3.40.4/po/hu.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/hu.po	2022-04-05 10:00:37.419025257 +0200
27c4a4
@@ -27314,3 +27314,11 @@ msgstr "Importált tanúsítvány"
27c4a4
 
27c4a4
 #~ msgid "_Destination"
27c4a4
 #~ msgstr "_Cél"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Alapértelmezett felhasználói címjegyzék"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Címjegyzék:"
27c4a4
diff -up evolution-3.40.4/po/id.po.3 evolution-3.40.4/po/id.po
27c4a4
--- evolution-3.40.4/po/id.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/id.po	2022-04-05 10:00:37.421025257 +0200
27c4a4
@@ -28288,3 +28288,11 @@ msgstr "Sertifikat Yang Diimpor"
27c4a4
 
27c4a4
 #~ msgid "Delivery Notification for “%s”"
27c4a4
 #~ msgstr "Notifikasi Pengiriman untuk \"%s\""
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Buku Alamat Pengguna Bawaan"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Buku Alamat:"
27c4a4
diff -up evolution-3.40.4/po/it.po.3 evolution-3.40.4/po/it.po
27c4a4
--- evolution-3.40.4/po/it.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/it.po	2022-04-05 10:00:37.423025256 +0200
27c4a4
@@ -29030,3 +29030,11 @@ msgstr "Impossibile scrivere il salvatag
27c4a4
 #: ../src/smime/lib/e-pkcs12.c:407
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "Certificato importato"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Rubrica predefinita dell'utente"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Rubrica:"
27c4a4
diff -up evolution-3.40.4/po/kk.po.3 evolution-3.40.4/po/kk.po
27c4a4
--- evolution-3.40.4/po/kk.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/kk.po	2022-04-05 10:00:37.424025255 +0200
27c4a4
@@ -27302,3 +27302,7 @@ msgstr "Импортталған серÑ
27c4a4
 
27c4a4
 #~ msgid "_PostScript"
27c4a4
 #~ msgstr "_PostScript"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Адрестік кітапша:"
27c4a4
diff -up evolution-3.40.4/po/ko.po.3 evolution-3.40.4/po/ko.po
27c4a4
--- evolution-3.40.4/po/ko.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/ko.po	2022-04-05 10:00:37.426025254 +0200
27c4a4
@@ -28272,3 +28272,11 @@ msgstr "디스크에 저장 내용을 ì“
27c4a4
 #: ../src/smime/lib/e-pkcs12.c:407
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "가져온 인증서"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "기본 사용자 주소록"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "주소록:"
27c4a4
diff -up evolution-3.40.4/po/lt.po.3 evolution-3.40.4/po/lt.po
27c4a4
--- evolution-3.40.4/po/lt.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/lt.po	2022-04-05 10:00:37.428025253 +0200
27c4a4
@@ -29356,3 +29356,11 @@ msgstr "Importuotas liudijimas"
27c4a4
 
27c4a4
 #~ msgid "Certificate details"
27c4a4
 #~ msgstr "Liudijimo informacija"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Numatytoji naudotojo adresų knyga"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresų knyga:"
27c4a4
diff -up evolution-3.40.4/po/lv.po.3 evolution-3.40.4/po/lv.po
27c4a4
--- evolution-3.40.4/po/lv.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/lv.po	2022-04-05 10:00:37.429025253 +0200
27c4a4
@@ -26918,3 +26918,11 @@ msgstr "Importēts sertifikāts"
27c4a4
 
27c4a4
 #~ msgid "Evolution Web Inspector"
27c4a4
 #~ msgstr "Evolution tīmekļa inspektors"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Noklusējuma lietotāja adrešu grāmata"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adrešu grāmata:"
27c4a4
diff -up evolution-3.40.4/po/nb.po.3 evolution-3.40.4/po/nb.po
27c4a4
--- evolution-3.40.4/po/nb.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/nb.po	2022-04-05 10:00:37.431025252 +0200
27c4a4
@@ -27933,3 +27933,11 @@ msgstr "Kan ikke skrive lager til disk.
27c4a4
 #: ../src/smime/lib/e-pkcs12.c:407
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "Importert sertifikat"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Forvalgt adressebok for bruker"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adressebok:"
27c4a4
diff -up evolution-3.40.4/po/nl.po.3 evolution-3.40.4/po/nl.po
27c4a4
--- evolution-3.40.4/po/nl.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/nl.po	2022-04-05 10:00:37.432025252 +0200
27c4a4
@@ -29667,3 +29667,11 @@ msgstr "Geïmporteerd certificaat"
27c4a4
 # Herinnering geven [15] [minuten] voor het begin van elke afspraak
27c4a4
 #~ msgid "Sh_ow a reminder"
27c4a4
 #~ msgstr "Herinnering geven"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Standaardadresboek van gebruiker"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresboek:"
27c4a4
diff -up evolution-3.40.4/po/pl.po.3 evolution-3.40.4/po/pl.po
27c4a4
--- evolution-3.40.4/po/pl.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/pl.po	2022-04-05 10:00:37.434025251 +0200
27c4a4
@@ -28409,3 +28409,11 @@ msgstr "Nie można zapisać przechowalni
27c4a4
 #: ../src/smime/lib/e-pkcs12.c:407
27c4a4
 msgid "Imported Certificate"
27c4a4
 msgstr "Zaimportowany certyfikat"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Domyślna książka adresowa użytkownika"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Książka adresowa:"
27c4a4
diff -up evolution-3.40.4/po/POTFILES.in.3 evolution-3.40.4/po/POTFILES.in
27c4a4
--- evolution-3.40.4/po/POTFILES.in.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/POTFILES.in	2022-04-05 10:00:37.392025269 +0200
27c4a4
@@ -406,6 +406,7 @@ src/modules/backup-restore/org-gnome-bac
27c4a4
 src/modules/bogofilter/evolution-bogofilter.c
27c4a4
 src/modules/bogofilter/org.gnome.Evolution-bogofilter.metainfo.xml.in
27c4a4
 src/modules/book-config-carddav/evolution-book-config-carddav.c
27c4a4
+src/modules/book-config-google/e-google-book-chooser-button.c
27c4a4
 src/modules/book-config-google/evolution-book-config-google.c
27c4a4
 src/modules/book-config-ldap/evolution-book-config-ldap.c
27c4a4
 src/modules/cal-config-caldav/evolution-cal-config-caldav.c
27c4a4
diff -up evolution-3.40.4/po/pt_BR.po.3 evolution-3.40.4/po/pt_BR.po
27c4a4
--- evolution-3.40.4/po/pt_BR.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/pt_BR.po	2022-04-05 10:00:37.438025249 +0200
27c4a4
@@ -29031,3 +29031,11 @@ msgstr "Certificado importado"
27c4a4
 
27c4a4
 #~ msgid "Save name format for drag-and-drop operation"
27c4a4
 #~ msgstr "Salvar formato de nome para operação de arrastar e soltar"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Catálogo de endereços do usuário padrão"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Catálogo de endereços:"
27c4a4
diff -up evolution-3.40.4/po/pt.po.3 evolution-3.40.4/po/pt.po
27c4a4
--- evolution-3.40.4/po/pt.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/pt.po	2022-04-05 10:00:37.436025250 +0200
27c4a4
@@ -32805,3 +32805,11 @@ msgstr "Certificado importado"
27c4a4
 
27c4a4
 #~ msgid "Checks incoming mail messages to be Junk"
27c4a4
 #~ msgstr "Verificar nas mensagens recebidas se são Não Solicitadas"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Livro de endereços predefinido do utilizador"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Livro de endereços:"
27c4a4
diff -up evolution-3.40.4/po/ro.po.3 evolution-3.40.4/po/ro.po
27c4a4
--- evolution-3.40.4/po/ro.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/ro.po	2022-04-05 10:00:37.439025249 +0200
27c4a4
@@ -26328,3 +26328,11 @@ msgstr "Certificatul importat"
27c4a4
 
27c4a4
 #~ msgid "_Destination"
27c4a4
 #~ msgstr "_Destinație"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Agenda utilizatorului implicit"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Agendă:"
27c4a4
diff -up evolution-3.40.4/po/ru.po.3 evolution-3.40.4/po/ru.po
27c4a4
--- evolution-3.40.4/po/ru.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/ru.po	2022-04-05 10:00:37.441025248 +0200
27c4a4
@@ -28144,3 +28144,11 @@ msgstr "Импортированный Ñ
27c4a4
 #~ msgstr ""
27c4a4
 #~ "Этот параметр будет использовать токен доступа OAuth 2.0 для Ğ¿Ğ¾Ğ´ĞºĞ»ÑŽÑ‡ĞµĞ½Ğ¸Ñ "
27c4a4
 #~ "к серверу"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Адресная книга пользователя по ÑƒĞ¼Ğ¾Ğ»Ñ‡Ğ°Ğ½Ğ¸ÑŽ"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Адресная книга:"
27c4a4
diff -up evolution-3.40.4/po/sk.po.3 evolution-3.40.4/po/sk.po
27c4a4
--- evolution-3.40.4/po/sk.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/sk.po	2022-04-05 10:00:37.443025247 +0200
27c4a4
@@ -29840,3 +29840,7 @@ msgstr "Importovaný certifikát"
27c4a4
 # MČ: podpis certifikátu. Až ďalej sa určuje, či sa tento certifikát môže použiť na podpisovanie
27c4a4
 #~ msgid "Certificate Signature Value"
27c4a4
 #~ msgstr "Hodnota podpisu certifikátu"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adresár kontaktov:"
27c4a4
diff -up evolution-3.40.4/po/sl.po.3 evolution-3.40.4/po/sl.po
27c4a4
--- evolution-3.40.4/po/sl.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/sl.po	2022-04-05 10:00:37.444025246 +0200
27c4a4
@@ -28539,3 +28539,11 @@ msgstr "Uvoženo potrdilo"
27c4a4
 
27c4a4
 #~ msgid "Certificate"
27c4a4
 #~ msgstr "Potrdilo"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Privzeti uporabniški imenik"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Imenik:"
27c4a4
diff -up evolution-3.40.4/po/sr.po.3 evolution-3.40.4/po/sr.po
27c4a4
--- evolution-3.40.4/po/sr.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/sr.po	2022-04-05 10:00:37.447025245 +0200
27c4a4
@@ -29869,3 +29869,11 @@ msgstr "Увежено уверење"
27c4a4
 
27c4a4
 #~ msgid "Certificate Signature Value"
27c4a4
 #~ msgstr "Вредност потписа уверења"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Основни корисников именик"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Именик:"
27c4a4
diff -up evolution-3.40.4/po/sv.po.3 evolution-3.40.4/po/sv.po
27c4a4
--- evolution-3.40.4/po/sv.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/sv.po	2022-04-05 10:00:37.450025244 +0200
27c4a4
@@ -29371,3 +29371,11 @@ msgstr "Importerat certifikat"
27c4a4
 
27c4a4
 #~ msgid "User declined to provide a password"
27c4a4
 #~ msgstr "Användare avböjde att tillhandahålla ett lösenord"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Standardadressbok för användare"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adressbok:"
27c4a4
diff -up evolution-3.40.4/po/tr.po.3 evolution-3.40.4/po/tr.po
27c4a4
--- evolution-3.40.4/po/tr.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/tr.po	2022-04-05 10:00:37.452025243 +0200
27c4a4
@@ -28728,3 +28728,11 @@ msgstr "Aktarılmış Sertifika"
27c4a4
 
27c4a4
 #~ msgid "Evolution Web Inspector"
27c4a4
 #~ msgstr "Evolution Web Denetçisi"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Öntanımlı Kullanıcı Adres Defteri"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Adres Defteri:"
27c4a4
diff -up evolution-3.40.4/po/uk.po.3 evolution-3.40.4/po/uk.po
27c4a4
--- evolution-3.40.4/po/uk.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/uk.po	2022-04-05 10:00:37.455025241 +0200
27c4a4
@@ -28418,3 +28418,11 @@ msgstr "Імпортований серÑ
27c4a4
 
27c4a4
 #~ msgid "Background Image"
27c4a4
 #~ msgstr "Зображення тла"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "Типова адресна книга користувача"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "Адресна книга:"
27c4a4
diff -up evolution-3.40.4/po/zh_CN.po.3 evolution-3.40.4/po/zh_CN.po
27c4a4
--- evolution-3.40.4/po/zh_CN.po.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/po/zh_CN.po	2022-04-05 10:00:37.457025241 +0200
27c4a4
@@ -32853,3 +32853,11 @@ msgstr "导入的证书"
27c4a4
 
27c4a4
 #~ msgid "Local Calendars"
27c4a4
 #~ msgstr "载入日历"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "默认用户通讯录"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "通讯录:"
27c4a4
diff -up evolution-3.40.4/po/ja.po.5 evolution-3.40.4/po/ja.po
27c4a4
--- evolution-3.40.4/po/ja.po.3	2022-04-08 13:42:12.782532717 +0200
27c4a4
+++ evolution-3.40.4/po/ja.po	2022-04-08 13:42:38.886527919 +0200
27c4a4
@@ -28035,3 +28035,11 @@ msgstr "インポートした証明書"
27c4a4
 
27c4a4
 #~ msgid "Certificate Signature Value"
27c4a4
 #~ msgstr "証明書の署名の値"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134
27c4a4
+msgid "Default User Address Book"
27c4a4
+msgstr "デフォルトのユーザーアドレス帳"
27c4a4
+
27c4a4
+#: ../src/modules/book-config-google/evolution-book-config-google.c:75
27c4a4
+msgid "Address Book:"
27c4a4
+msgstr "アドレス帳:"
27c4a4
diff -up evolution-3.40.4/src/e-util/e-source-config.c.3 evolution-3.40.4/src/e-util/e-source-config.c
27c4a4
--- evolution-3.40.4/src/e-util/e-source-config.c.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/src/e-util/e-source-config.c	2022-04-05 10:00:37.457025241 +0200
27c4a4
@@ -505,9 +505,10 @@ source_config_init_for_editing_source (E
27c4a4
 	backend_name = e_source_backend_get_backend_name (extension);
27c4a4
 	g_return_if_fail (backend_name != NULL);
27c4a4
 
27c4a4
-	/* Special-case Google calendars to use 'google' editor, instead
27c4a4
-	   of the 'caldav' editor, even they use 'caldav' calendar backend. */
27c4a4
-	if (g_ascii_strcasecmp (backend_name, "caldav") == 0 &&
27c4a4
+	/* Special-case Google books and calendars to use 'google' editor, instead
27c4a4
+	   of the 'carddav'/'caldav' editor, even they use 'carddav'/'caldav' backend. */
27c4a4
+	if ((g_ascii_strcasecmp (backend_name, "caldav") == 0 ||
27c4a4
+	     g_ascii_strcasecmp (backend_name, "carddav") == 0) &&
27c4a4
 	    g_strcmp0 (e_source_get_parent (original_source), "google-stub") == 0)
27c4a4
 		backend_name = "google";
27c4a4
 
27c4a4
diff -up evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt.3 evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt
27c4a4
--- evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt	2022-04-05 10:00:37.457025241 +0200
27c4a4
@@ -1,5 +1,7 @@
27c4a4
 set(extra_deps)
27c4a4
 set(sources
27c4a4
+	e-google-book-chooser-button.c
27c4a4
+	e-google-book-chooser-button.h
27c4a4
 	evolution-book-config-google.c
27c4a4
 )
27c4a4
 set(extra_defines)
27c4a4
diff -up evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c.3 evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c
27c4a4
--- evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c.3	2022-04-05 10:00:37.457025241 +0200
27c4a4
+++ evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c	2022-04-05 10:00:37.457025241 +0200
27c4a4
@@ -0,0 +1,402 @@
27c4a4
+/*
27c4a4
+ * This program is free software; you can redistribute it and/or modify it
27c4a4
+ * under the terms of the GNU Lesser General Public License as published by
27c4a4
+ * the Free Software Foundation.
27c4a4
+ *
27c4a4
+ * This program is distributed in the hope that it will be useful, but
27c4a4
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
27c4a4
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
27c4a4
+ * for more details.
27c4a4
+ *
27c4a4
+ * You should have received a copy of the GNU Lesser General Public License
27c4a4
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
27c4a4
+ *
27c4a4
+ */
27c4a4
+
27c4a4
+#include "evolution-config.h"
27c4a4
+
27c4a4
+#include <glib/gi18n-lib.h>
27c4a4
+
27c4a4
+#include <libedataserverui/libedataserverui.h>
27c4a4
+
27c4a4
+#include "e-google-book-chooser-button.h"
27c4a4
+
27c4a4
+struct _EGoogleBookChooserButtonPrivate {
27c4a4
+	ESource *source;
27c4a4
+	ESourceConfig *config;
27c4a4
+	GtkWidget *label;
27c4a4
+};
27c4a4
+
27c4a4
+enum {
27c4a4
+	PROP_0,
27c4a4
+	PROP_SOURCE,
27c4a4
+	PROP_CONFIG
27c4a4
+};
27c4a4
+
27c4a4
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (EGoogleBookChooserButton, e_google_book_chooser_button, GTK_TYPE_BUTTON, 0,
27c4a4
+	G_ADD_PRIVATE_DYNAMIC (EGoogleBookChooserButton))
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_set_source (EGoogleBookChooserButton *button,
27c4a4
+				       ESource *source)
27c4a4
+{
27c4a4
+	g_return_if_fail (E_IS_SOURCE (source));
27c4a4
+	g_return_if_fail (button->priv->source == NULL);
27c4a4
+
27c4a4
+	button->priv->source = g_object_ref (source);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_set_config (EGoogleBookChooserButton *button,
27c4a4
+				       ESourceConfig *config)
27c4a4
+{
27c4a4
+	g_return_if_fail (E_IS_SOURCE_CONFIG (config));
27c4a4
+	g_return_if_fail (button->priv->config == NULL);
27c4a4
+
27c4a4
+	button->priv->config = g_object_ref (config);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_set_property (GObject *object,
27c4a4
+					 guint property_id,
27c4a4
+					 const GValue *value,
27c4a4
+					 GParamSpec *pspec)
27c4a4
+{
27c4a4
+	switch (property_id) {
27c4a4
+		case PROP_SOURCE:
27c4a4
+			google_book_chooser_button_set_source (
27c4a4
+				E_GOOGLE_BOOK_CHOOSER_BUTTON (object),
27c4a4
+				g_value_get_object (value));
27c4a4
+			return;
27c4a4
+
27c4a4
+		case PROP_CONFIG:
27c4a4
+			google_book_chooser_button_set_config (
27c4a4
+				E_GOOGLE_BOOK_CHOOSER_BUTTON (object),
27c4a4
+				g_value_get_object (value));
27c4a4
+			return;
27c4a4
+	}
27c4a4
+
27c4a4
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_get_property (GObject *object,
27c4a4
+					 guint property_id,
27c4a4
+					 GValue *value,
27c4a4
+					 GParamSpec *pspec)
27c4a4
+{
27c4a4
+	switch (property_id) {
27c4a4
+		case PROP_SOURCE:
27c4a4
+			g_value_set_object (
27c4a4
+				value,
27c4a4
+				e_google_book_chooser_button_get_source (
27c4a4
+				E_GOOGLE_BOOK_CHOOSER_BUTTON (object)));
27c4a4
+			return;
27c4a4
+
27c4a4
+		case PROP_CONFIG:
27c4a4
+			g_value_set_object (
27c4a4
+				value,
27c4a4
+				e_google_book_chooser_button_get_config (
27c4a4
+				E_GOOGLE_BOOK_CHOOSER_BUTTON (object)));
27c4a4
+			return;
27c4a4
+	}
27c4a4
+
27c4a4
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_dispose (GObject *object)
27c4a4
+{
27c4a4
+	EGoogleBookChooserButton *button = E_GOOGLE_BOOK_CHOOSER_BUTTON (object);
27c4a4
+
27c4a4
+	g_clear_object (&button->priv->source);
27c4a4
+	g_clear_object (&button->priv->config);
27c4a4
+	g_clear_object (&button->priv->label);
27c4a4
+
27c4a4
+	/* Chain up to parent's dispose() method. */
27c4a4
+	G_OBJECT_CLASS (e_google_book_chooser_button_parent_class)->dispose (object);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_constructed (GObject *object)
27c4a4
+{
27c4a4
+	EGoogleBookChooserButton *button;
27c4a4
+	ESourceWebdav *webdav_extension;
27c4a4
+	GBindingFlags binding_flags;
27c4a4
+	GtkWidget *widget;
27c4a4
+	const gchar *display_name;
27c4a4
+
27c4a4
+	button = E_GOOGLE_BOOK_CHOOSER_BUTTON (object);
27c4a4
+
27c4a4
+	/* Chain up to parent's constructed() method. */
27c4a4
+	G_OBJECT_CLASS (e_google_book_chooser_button_parent_class)->constructed (object);
27c4a4
+
27c4a4
+	widget = gtk_label_new (_("Default User Address Book"));
27c4a4
+	gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
27c4a4
+	gtk_container_add (GTK_CONTAINER (button), widget);
27c4a4
+	button->priv->label = g_object_ref (widget);
27c4a4
+	gtk_widget_show (widget);
27c4a4
+
27c4a4
+	webdav_extension = e_source_get_extension (
27c4a4
+		button->priv->source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
27c4a4
+	display_name = e_source_webdav_get_display_name (webdav_extension);
27c4a4
+
27c4a4
+	binding_flags = G_BINDING_DEFAULT;
27c4a4
+	if (display_name != NULL && *display_name != '\0')
27c4a4
+		binding_flags |= G_BINDING_SYNC_CREATE;
27c4a4
+
27c4a4
+	e_binding_bind_property (
27c4a4
+		webdav_extension, "display-name",
27c4a4
+		button->priv->label, "label",
27c4a4
+		binding_flags);
27c4a4
+}
27c4a4
+
27c4a4
+static GtkWindow *
27c4a4
+google_config_get_dialog_parent_cb (ECredentialsPrompter *prompter,
27c4a4
+				    GtkWindow *dialog)
27c4a4
+{
27c4a4
+	return dialog;
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+google_book_chooser_button_clicked (GtkButton *btn)
27c4a4
+{
27c4a4
+	EGoogleBookChooserButton *button;
27c4a4
+	gpointer parent;
27c4a4
+	ESourceRegistry *registry;
27c4a4
+	ECredentialsPrompter *prompter;
27c4a4
+	ESourceWebdav *webdav_extension;
27c4a4
+	ESourceAuthentication *authentication_extension;
27c4a4
+	SoupURI *uri;
27c4a4
+	gchar *base_url;
27c4a4
+	GtkDialog *dialog;
27c4a4
+	gulong handler_id;
27c4a4
+	guint supports_filter = 0;
27c4a4
+	const gchar *title = NULL;
27c4a4
+
27c4a4
+	button = E_GOOGLE_BOOK_CHOOSER_BUTTON (btn);
27c4a4
+
27c4a4
+	parent = gtk_widget_get_toplevel (GTK_WIDGET (button));
27c4a4
+	parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
27c4a4
+
27c4a4
+	registry = e_source_config_get_registry (button->priv->config);
27c4a4
+
27c4a4
+	authentication_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_AUTHENTICATION);
27c4a4
+	webdav_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
27c4a4
+
27c4a4
+	uri = e_source_webdav_dup_soup_uri (webdav_extension);
27c4a4
+
27c4a4
+	e_google_book_chooser_button_construct_default_uri (uri, e_source_authentication_get_user (authentication_extension));
27c4a4
+
27c4a4
+	/* Prefer 'Google', aka internal OAuth2, authentication method, if available */
27c4a4
+	e_source_authentication_set_method (authentication_extension, "Google");
27c4a4
+
27c4a4
+	/* See https://developers.google.com/people/carddav */
27c4a4
+	soup_uri_set_host (uri, "www.googleapis.com");
27c4a4
+	soup_uri_set_path (uri, "/.well-known/carddav");
27c4a4
+
27c4a4
+	/* Google's CardDAV interface requires a secure connection. */
27c4a4
+	soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTPS);
27c4a4
+
27c4a4
+	e_source_webdav_set_soup_uri (webdav_extension, uri);
27c4a4
+
27c4a4
+	prompter = e_credentials_prompter_new (registry);
27c4a4
+	e_credentials_prompter_set_auto_prompt (prompter, FALSE);
27c4a4
+
27c4a4
+	supports_filter = E_WEBDAV_DISCOVER_SUPPORTS_CONTACTS;
27c4a4
+	title = _("Choose an Address Book");
27c4a4
+	base_url = soup_uri_to_string (uri, FALSE);
27c4a4
+
27c4a4
+	dialog = e_webdav_discover_dialog_new (parent, title, prompter, button->priv->source, base_url, supports_filter);
27c4a4
+
27c4a4
+	if (parent != NULL)
27c4a4
+		e_binding_bind_property (
27c4a4
+			parent, "icon-name",
27c4a4
+			dialog, "icon-name",
27c4a4
+			G_BINDING_SYNC_CREATE);
27c4a4
+
27c4a4
+	handler_id = g_signal_connect (prompter, "get-dialog-parent",
27c4a4
+		G_CALLBACK (google_config_get_dialog_parent_cb), dialog);
27c4a4
+
27c4a4
+	e_webdav_discover_dialog_refresh (dialog);
27c4a4
+
27c4a4
+	if (gtk_dialog_run (dialog) == GTK_RESPONSE_ACCEPT) {
27c4a4
+		gchar *href = NULL, *display_name = NULL, *color = NULL, *email;
27c4a4
+		guint supports = 0, order = 0;
27c4a4
+		GtkWidget *content;
27c4a4
+
27c4a4
+		content = e_webdav_discover_dialog_get_content (dialog);
27c4a4
+
27c4a4
+		if (e_webdav_discover_content_get_selected (content, 0, &href, &supports, &display_name, &color, &order)) {
27c4a4
+			soup_uri_free (uri);
27c4a4
+			uri = soup_uri_new (href);
27c4a4
+
27c4a4
+			if (uri) {
27c4a4
+				ESourceAddressBook *addressbook_extension;
27c4a4
+
27c4a4
+				addressbook_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_ADDRESS_BOOK);
27c4a4
+
27c4a4
+				e_source_set_display_name (button->priv->source, display_name);
27c4a4
+
27c4a4
+				e_source_webdav_set_display_name (webdav_extension, display_name);
27c4a4
+				e_source_webdav_set_soup_uri (webdav_extension, uri);
27c4a4
+				e_source_webdav_set_order (webdav_extension, order);
27c4a4
+
27c4a4
+				e_source_address_book_set_order (addressbook_extension, order);
27c4a4
+			}
27c4a4
+
27c4a4
+			g_clear_pointer (&href, g_free);
27c4a4
+			g_clear_pointer (&display_name, g_free);
27c4a4
+			g_clear_pointer (&color, g_free);
27c4a4
+		}
27c4a4
+
27c4a4
+		email = e_webdav_discover_content_get_user_address (content);
27c4a4
+		if (email && *email)
27c4a4
+			e_source_webdav_set_email_address (webdav_extension, email);
27c4a4
+		g_free (email);
27c4a4
+	}
27c4a4
+
27c4a4
+	g_signal_handler_disconnect (prompter, handler_id);
27c4a4
+
27c4a4
+	gtk_widget_destroy (GTK_WIDGET (dialog));
27c4a4
+
27c4a4
+	g_object_unref (prompter);
27c4a4
+	if (uri)
27c4a4
+		soup_uri_free (uri);
27c4a4
+	g_free (base_url);
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+e_google_book_chooser_button_class_init (EGoogleBookChooserButtonClass *class)
27c4a4
+{
27c4a4
+	GObjectClass *object_class;
27c4a4
+	GtkButtonClass *button_class;
27c4a4
+
27c4a4
+	object_class = G_OBJECT_CLASS (class);
27c4a4
+	object_class->set_property = google_book_chooser_button_set_property;
27c4a4
+	object_class->get_property = google_book_chooser_button_get_property;
27c4a4
+	object_class->dispose = google_book_chooser_button_dispose;
27c4a4
+	object_class->constructed = google_book_chooser_button_constructed;
27c4a4
+
27c4a4
+	button_class = GTK_BUTTON_CLASS (class);
27c4a4
+	button_class->clicked = google_book_chooser_button_clicked;
27c4a4
+
27c4a4
+	g_object_class_install_property (
27c4a4
+		object_class,
27c4a4
+		PROP_SOURCE,
27c4a4
+		g_param_spec_object (
27c4a4
+			"source",
27c4a4
+			NULL,
27c4a4
+			NULL,
27c4a4
+			E_TYPE_SOURCE,
27c4a4
+			G_PARAM_READWRITE |
27c4a4
+			G_PARAM_CONSTRUCT_ONLY));
27c4a4
+
27c4a4
+	g_object_class_install_property (
27c4a4
+		object_class,
27c4a4
+		PROP_CONFIG,
27c4a4
+		g_param_spec_object (
27c4a4
+			"config",
27c4a4
+			NULL,
27c4a4
+			NULL,
27c4a4
+			E_TYPE_SOURCE_CONFIG,
27c4a4
+			G_PARAM_READWRITE |
27c4a4
+			G_PARAM_CONSTRUCT_ONLY));
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+e_google_book_chooser_button_class_finalize (EGoogleBookChooserButtonClass *class)
27c4a4
+{
27c4a4
+}
27c4a4
+
27c4a4
+static void
27c4a4
+e_google_book_chooser_button_init (EGoogleBookChooserButton *button)
27c4a4
+{
27c4a4
+	button->priv = e_google_book_chooser_button_get_instance_private (button);
27c4a4
+}
27c4a4
+
27c4a4
+void
27c4a4
+e_google_book_chooser_button_type_register (GTypeModule *type_module)
27c4a4
+{
27c4a4
+	/* XXX G_DEFINE_DYNAMIC_TYPE declares a static type registration
27c4a4
+	 *     function, so we have to wrap it with a public function in
27c4a4
+	 *     order to register types from a separate compilation unit. */
27c4a4
+	e_google_book_chooser_button_register_type (type_module);
27c4a4
+}
27c4a4
+
27c4a4
+GtkWidget *
27c4a4
+e_google_book_chooser_button_new (ESource *source,
27c4a4
+				  ESourceConfig *config)
27c4a4
+{
27c4a4
+	g_return_val_if_fail (E_IS_SOURCE (source), NULL);
27c4a4
+
27c4a4
+	return g_object_new (
27c4a4
+		E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON,
27c4a4
+		"source", source,
27c4a4
+		"config", config, NULL);
27c4a4
+}
27c4a4
+
27c4a4
+ESource *
27c4a4
+e_google_book_chooser_button_get_source (EGoogleBookChooserButton *button)
27c4a4
+{
27c4a4
+	g_return_val_if_fail (E_IS_GOOGLE_BOOK_CHOOSER_BUTTON (button), NULL);
27c4a4
+
27c4a4
+	return button->priv->source;
27c4a4
+}
27c4a4
+
27c4a4
+ESourceConfig *
27c4a4
+e_google_book_chooser_button_get_config (EGoogleBookChooserButton *button)
27c4a4
+{
27c4a4
+	g_return_val_if_fail (E_IS_GOOGLE_BOOK_CHOOSER_BUTTON (button), NULL);
27c4a4
+
27c4a4
+	return button->priv->config;
27c4a4
+}
27c4a4
+
27c4a4
+static gchar *
27c4a4
+google_book_chooser_decode_user (const gchar *user)
27c4a4
+{
27c4a4
+	gchar *decoded_user;
27c4a4
+
27c4a4
+	if (user == NULL || *user == '\0')
27c4a4
+		return NULL;
27c4a4
+
27c4a4
+	/* Decode any encoded 'at' symbols ('%40' -> '@'). */
27c4a4
+	if (strstr (user, "%40") != NULL) {
27c4a4
+		gchar **segments;
27c4a4
+
27c4a4
+		segments = g_strsplit (user, "%40", 0);
27c4a4
+		decoded_user = g_strjoinv ("@", segments);
27c4a4
+		g_strfreev (segments);
27c4a4
+
27c4a4
+	/* If no domain is given, append "@gmail.com". */
27c4a4
+	} else if (strstr (user, "@") == NULL) {
27c4a4
+		decoded_user = g_strconcat (user, "@gmail.com", NULL);
27c4a4
+
27c4a4
+	/* Otherwise the user name should be fine as is. */
27c4a4
+	} else {
27c4a4
+		decoded_user = g_strdup (user);
27c4a4
+	}
27c4a4
+
27c4a4
+	return decoded_user;
27c4a4
+}
27c4a4
+
27c4a4
+void
27c4a4
+e_google_book_chooser_button_construct_default_uri (SoupURI *soup_uri,
27c4a4
+						    const gchar *username)
27c4a4
+{
27c4a4
+	gchar *decoded_user, *path;
27c4a4
+
27c4a4
+	decoded_user = google_book_chooser_decode_user (username);
27c4a4
+	if (!decoded_user)
27c4a4
+		return;
27c4a4
+
27c4a4
+	path = g_strdup_printf ("/carddav/v1/principals/%s/lists/default/", decoded_user);
27c4a4
+
27c4a4
+	soup_uri_set_scheme (soup_uri, SOUP_URI_SCHEME_HTTPS);
27c4a4
+	soup_uri_set_user (soup_uri, decoded_user);
27c4a4
+	soup_uri_set_host (soup_uri, "www.googleapis.com");
27c4a4
+	soup_uri_set_path (soup_uri, path);
27c4a4
+
27c4a4
+	g_free (decoded_user);
27c4a4
+	g_free (path);
27c4a4
+}
27c4a4
diff -up evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h.3 evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h
27c4a4
--- evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h.3	2022-04-05 10:00:37.457025241 +0200
27c4a4
+++ evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h	2022-04-05 10:00:37.457025241 +0200
27c4a4
@@ -0,0 +1,70 @@
27c4a4
+/*
27c4a4
+ * This program is free software; you can redistribute it and/or modify it
27c4a4
+ * under the terms of the GNU Lesser General Public License as published by
27c4a4
+ * the Free Software Foundation.
27c4a4
+ *
27c4a4
+ * This program is distributed in the hope that it will be useful, but
27c4a4
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
27c4a4
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
27c4a4
+ * for more details.
27c4a4
+ *
27c4a4
+ * You should have received a copy of the GNU Lesser General Public License
27c4a4
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
27c4a4
+ *
27c4a4
+ */
27c4a4
+
27c4a4
+#ifndef E_GOOGLE_BOOK_CHOOSER_BUTTON_H
27c4a4
+#define E_GOOGLE_BOOK_CHOOSER_BUTTON_H
27c4a4
+
27c4a4
+#include <e-util/e-util.h>
27c4a4
+
27c4a4
+/* Standard GObject macros */
27c4a4
+#define E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON \
27c4a4
+	(e_google_book_chooser_button_get_type ())
27c4a4
+#define E_GOOGLE_BOOK_CHOOSER_BUTTON(obj) \
27c4a4
+	(G_TYPE_CHECK_INSTANCE_CAST \
27c4a4
+	((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButton))
27c4a4
+#define E_GOOGLE_BOOK_CHOOSER_BUTTON_CLASS(cls) \
27c4a4
+	(G_TYPE_CHECK_CLASS_CAST \
27c4a4
+	((cls), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButtonClass))
27c4a4
+#define E_IS_GOOGLE_BOOK_CHOOSER_BUTTON(obj) \
27c4a4
+	(G_TYPE_CHECK_INSTANCE_TYPE \
27c4a4
+	((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON))
27c4a4
+#define E_IS_GOOGLE_BOOK_CHOOSER_BUTTON_CLASS(cls) \
27c4a4
+	(G_TYPE_CHECK_CLASS_TYPE \
27c4a4
+	((cls), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON))
27c4a4
+#define E_GOOGLE_BOOK_CHOOSER_BUTTON_GET_CLASS(obj) \
27c4a4
+	(G_TYPE_INSTANCE_GET_CLASS \
27c4a4
+	((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButtonClass))
27c4a4
+
27c4a4
+G_BEGIN_DECLS
27c4a4
+
27c4a4
+typedef struct _EGoogleBookChooserButton EGoogleBookChooserButton;
27c4a4
+typedef struct _EGoogleBookChooserButtonClass EGoogleBookChooserButtonClass;
27c4a4
+typedef struct _EGoogleBookChooserButtonPrivate EGoogleBookChooserButtonPrivate;
27c4a4
+
27c4a4
+struct _EGoogleBookChooserButton {
27c4a4
+	GtkButton parent;
27c4a4
+	EGoogleBookChooserButtonPrivate *priv;
27c4a4
+};
27c4a4
+
27c4a4
+struct _EGoogleBookChooserButtonClass {
27c4a4
+	GtkButtonClass parent_class;
27c4a4
+};
27c4a4
+
27c4a4
+GType		e_google_book_chooser_button_get_type (void);
27c4a4
+void		e_google_book_chooser_button_type_register
27c4a4
+						(GTypeModule *type_module);
27c4a4
+GtkWidget *	e_google_book_chooser_button_new(ESource *source,
27c4a4
+						 ESourceConfig *config);
27c4a4
+ESource *	e_google_book_chooser_button_get_source
27c4a4
+						(EGoogleBookChooserButton *button);
27c4a4
+ESourceConfig *	e_google_book_chooser_button_get_config
27c4a4
+						(EGoogleBookChooserButton *button);
27c4a4
+void		e_google_book_chooser_button_construct_default_uri
27c4a4
+						(SoupURI *soup_uri,
27c4a4
+						 const gchar *username);
27c4a4
+
27c4a4
+G_END_DECLS
27c4a4
+
27c4a4
+#endif /* E_GOOGLE_BOOK_CHOOSER_BUTTON_H */
27c4a4
diff -up evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c.3 evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c
27c4a4
--- evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c.3	2021-08-13 11:50:35.000000000 +0200
27c4a4
+++ evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c	2022-04-05 10:00:37.458025240 +0200
27c4a4
@@ -23,6 +23,8 @@
27c4a4
 
27c4a4
 #include <e-util/e-util.h>
27c4a4
 
27c4a4
+#include "e-google-book-chooser-button.h"
27c4a4
+
27c4a4
 typedef ESourceConfigBackend EBookConfigGoogle;
27c4a4
 typedef ESourceConfigBackendClass EBookConfigGoogleClass;
27c4a4
 
27c4a4
@@ -55,6 +57,7 @@ book_config_google_insert_widgets (ESour
27c4a4
                                    ESource *scratch_source)
27c4a4
 {
27c4a4
 	ESourceConfig *config;
27c4a4
+	GtkWidget *widget;
27c4a4
 	Context *context;
27c4a4
 	const gchar *uid;
27c4a4
 
27c4a4
@@ -68,6 +71,10 @@ book_config_google_insert_widgets (ESour
27c4a4
 
27c4a4
 	context->user_entry = e_source_config_add_user_entry (config, scratch_source);
27c4a4
 
27c4a4
+	widget = e_google_book_chooser_button_new (scratch_source, config);
27c4a4
+	e_source_config_insert_widget (config, scratch_source, _("Address Book:"), widget);
27c4a4
+	gtk_widget_show (widget);
27c4a4
+
27c4a4
 	e_source_config_add_refresh_interval (config, scratch_source);
27c4a4
 }
27c4a4
 
27c4a4
@@ -101,23 +108,32 @@ book_config_google_commit_changes (ESour
27c4a4
 {
27c4a4
 	ESource *collection_source;
27c4a4
 	ESourceConfig *config;
27c4a4
+	ESourceBackend *addressbook_extension;
27c4a4
+	ESourceWebdav *webdav_extension;
27c4a4
 	ESourceAuthentication *extension;
27c4a4
+	SoupURI *soup_uri;
27c4a4
 	const gchar *extension_name;
27c4a4
 	const gchar *user;
27c4a4
 
27c4a4
 	config = e_source_config_backend_get_config (backend);
27c4a4
 	collection_source = e_source_config_get_collection_source (config);
27c4a4
 
27c4a4
+	addressbook_extension = e_source_get_extension (scratch_source, E_SOURCE_EXTENSION_ADDRESS_BOOK);
27c4a4
+	webdav_extension = e_source_get_extension (scratch_source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
27c4a4
+
27c4a4
 	extension_name = E_SOURCE_EXTENSION_AUTHENTICATION;
27c4a4
 	extension = e_source_get_extension (scratch_source, extension_name);
27c4a4
 
27c4a4
-	if (!collection_source || (
27c4a4
-	    !e_source_has_extension (collection_source, E_SOURCE_EXTENSION_GOA) &&
27c4a4
-	    !e_source_has_extension (collection_source, E_SOURCE_EXTENSION_UOA))) {
27c4a4
-		e_source_authentication_set_host (extension, "www.google.com");
27c4a4
+	if (!collection_source ||
27c4a4
+	    !e_source_authentication_get_is_external (extension)) {
27c4a4
+		e_source_authentication_set_host (extension, "www.googleapis.com");
27c4a4
 		e_source_authentication_set_method (extension, "Google");
27c4a4
 	}
27c4a4
 
27c4a4
+	/* The backend name is "carddav" even though the ESource is
27c4a4
+	 * a child of the built-in "Google" source. */
27c4a4
+	e_source_backend_set_backend_name (addressbook_extension, "carddav");
27c4a4
+
27c4a4
 	user = e_source_authentication_get_user (extension);
27c4a4
 	g_return_if_fail (user != NULL);
27c4a4
 
27c4a4
@@ -129,6 +145,19 @@ book_config_google_commit_changes (ESour
27c4a4
 		e_source_authentication_set_user (extension, full_user);
27c4a4
 		g_free (full_user);
27c4a4
 	}
27c4a4
+
27c4a4
+	soup_uri = e_source_webdav_dup_soup_uri (webdav_extension);
27c4a4
+
27c4a4
+	if (!soup_uri->path || !*soup_uri->path || g_strcmp0 (soup_uri->path, "/") == 0) {
27c4a4
+		e_google_book_chooser_button_construct_default_uri (soup_uri, e_source_authentication_get_user (extension));
27c4a4
+	}
27c4a4
+
27c4a4
+	/* Google's CalDAV interface requires a secure connection. */
27c4a4
+	soup_uri_set_scheme (soup_uri, SOUP_URI_SCHEME_HTTPS);
27c4a4
+
27c4a4
+	e_source_webdav_set_soup_uri (webdav_extension, soup_uri);
27c4a4
+
27c4a4
+	soup_uri_free (soup_uri);
27c4a4
 }
27c4a4
 
27c4a4
 static void
27c4a4
@@ -159,6 +188,7 @@ e_book_config_google_init (ESourceConfig
27c4a4
 G_MODULE_EXPORT void
27c4a4
 e_module_load (GTypeModule *type_module)
27c4a4
 {
27c4a4
+	e_google_book_chooser_button_type_register (type_module);
27c4a4
 	e_book_config_google_register_type (type_module);
27c4a4
 }
27c4a4