diff --git a/SOURCES/0001-Added-yandex-backend-support-prebuild.patch b/SOURCES/0001-Added-yandex-backend-support-prebuild.patch index 67ada2a..2d370fa 100644 --- a/SOURCES/0001-Added-yandex-backend-support-prebuild.patch +++ b/SOURCES/0001-Added-yandex-backend-support-prebuild.patch @@ -1,4 +1,4 @@ -From 1c142459975a8703b6a5771f576a1e3736360954 Mon Sep 17 00:00:00 2001 +From 0ce2679b7840f69ce6f632959b2e7789cffca13a Mon Sep 17 00:00:00 2001 From: Alexey Berezhok Date: Mon, 15 May 2023 19:07:27 +0300 Subject: [PATCH] Added yandex backend support(prebuild) @@ -29,8 +29,8 @@ Subject: [PATCH] Added yandex backend support(prebuild) src/modules/CMakeLists.txt | 1 + .../module-gnome-online-accounts.c | 3 + src/modules/yandex-backend/CMakeLists.txt | 23 + - .../yandex-backend/module-yandex-backend.c | 727 ++++++++++++++++++ - 26 files changed, 1229 insertions(+), 3 deletions(-) + .../yandex-backend/module-yandex-backend.c | 619 ++++++++++++++++++ + 26 files changed, 1121 insertions(+), 3 deletions(-) create mode 100644 src/camel/camel-sasl-xoauth2-yandex.c create mode 100644 src/camel/camel-sasl-xoauth2-yandex.h create mode 100644 src/libedataserver/e-oauth2-service-yandex.c @@ -873,10 +873,10 @@ index 0000000..2416fa1 +) diff --git a/src/modules/yandex-backend/module-yandex-backend.c b/src/modules/yandex-backend/module-yandex-backend.c new file mode 100644 -index 0000000..bb6dfc1 +index 0000000..a99d35c --- /dev/null +++ b/src/modules/yandex-backend/module-yandex-backend.c -@@ -0,0 +1,727 @@ +@@ -0,0 +1,619 @@ +/* + * module-yandex-backend.c + * @@ -1039,57 +1039,6 @@ index 0000000..bb6dfc1 + return result; +} + -+static void -+yandex_backend_add_contacts (ECollectionBackend *backend) -+{ -+ ESource *source; -+ ESource *collection_source; -+ ESourceRegistryServer *server; -+ ESourceExtension *extension; -+ ESourceCollection *collection_extension; -+ const gchar *backend_name; -+ const gchar *extension_name; -+ const gchar *resource_id; -+ -+ collection_source = e_backend_get_source (E_BACKEND (backend)); -+ -+ resource_id = YANDEX_CONTACTS_RESOURCE_ID; -+ source = e_collection_backend_new_child (backend, resource_id); -+ e_source_set_display_name (source, _("Contacts")); -+ -+ /* Add the address book source to the collection. */ -+ collection_extension = e_source_get_extension ( -+ collection_source, E_SOURCE_EXTENSION_COLLECTION); -+ -+ /* Configure the address book source. */ -+ -+ backend_name = YANDEX_CONTACTS_BACKEND_NAME; -+ -+ extension_name = E_SOURCE_EXTENSION_ADDRESS_BOOK; -+ extension = e_source_get_extension (source, extension_name); -+ -+ e_source_backend_set_backend_name ( -+ E_SOURCE_BACKEND (extension), backend_name); -+ -+ extension_name = E_SOURCE_EXTENSION_AUTHENTICATION; -+ extension = e_source_get_extension (source, extension_name); -+ -+ e_source_authentication_set_host ( -+ E_SOURCE_AUTHENTICATION (extension), -+ YANDEX_CONTACTS_HOST); -+ -+ e_binding_bind_property ( -+ collection_extension, "identity", -+ extension, "user", -+ G_BINDING_SYNC_CREATE); -+ -+ server = e_collection_backend_ref_server (backend); -+ e_source_registry_server_add_source (server, source); -+ g_object_unref (server); -+ -+ g_object_unref (source); -+} -+ +static gchar * +yandex_backend_get_resource_id (EWebDAVCollectionBackend *webdav_backend, + ESource *source) @@ -1136,14 +1085,6 @@ index 0000000..bb6dfc1 + /* Chain up to parent's method. */ + E_COLLECTION_BACKEND_CLASS (e_yandex_backend_parent_class)->populate (backend); + -+ if (e_source_collection_get_contacts_enabled (collection_extension)) { -+ GList *list; -+ -+ list = e_collection_backend_list_contacts_sources (backend); -+ if (list == NULL) -+ yandex_backend_add_contacts (backend); -+ g_list_free_full (list, (GDestroyNotify) g_object_unref); -+ } +} + +static gboolean @@ -1264,41 +1205,6 @@ index 0000000..bb6dfc1 + yandex_backend_calendar_update_auth_method (E_COLLECTION_BACKEND (backend), child_source, e_backend_get_source (backend)); +} + -+static void -+yandex_backend_contacts_update_auth_method (ESource *child_source, -+ ESource *master_source) -+{ -+ EOAuth2Support *oauth2_support; -+ ESourceAuthentication *extension; -+ const gchar *method; -+ -+ extension = e_source_get_extension (child_source, E_SOURCE_EXTENSION_AUTHENTICATION); -+ -+ if (!yandex_backend_is_yandex_host (extension, NULL)) -+ return; -+ -+ oauth2_support = e_server_side_source_ref_oauth2_support (E_SERVER_SIDE_SOURCE (child_source)); -+ if (!oauth2_support && master_source) -+ oauth2_support = e_server_side_source_ref_oauth2_support (E_SERVER_SIDE_SOURCE (master_source)); -+ -+ if (oauth2_support) -+ method = "OAuth2"; -+ else -+ method = NULL; -+ -+ e_source_authentication_set_method (extension, method); -+ -+ g_clear_object (&oauth2_support); -+} -+ -+static void -+yandex_backend_contacts_update_auth_method_cb (ESource *child_source, -+ GParamSpec *param, -+ EBackend *backend) -+{ -+ yandex_backend_contacts_update_auth_method (child_source, e_backend_get_source (backend)); -+} -+ +static gchar * +yandex_backend_dup_resource_id (ECollectionBackend *backend, + ESource *child_source) @@ -1398,20 +1304,6 @@ index 0000000..bb6dfc1 + backend); + } + -+ extension_name = E_SOURCE_EXTENSION_ADDRESS_BOOK; -+ if (e_source_has_extension (child_source, extension_name)) { -+ yandex_backend_contacts_update_auth_method (child_source, collection_source); -+ g_signal_connect ( -+ child_source, "notify::oauth2-support", -+ G_CALLBACK (yandex_backend_contacts_update_auth_method_cb), -+ backend); -+ -+ if (!has_external_auth) { -+ /* Even the book is part of the collection it can be removed -+ separately, if not configured through GOA or UOA. */ -+ e_server_side_source_set_removable (E_SERVER_SIDE_SOURCE (child_source), TRUE); -+ } -+ } +} + +static void