[evolution-ews] Sources always enabled, even when their part is disabled



commit ee6df3079281c339568c802cef7cd7e54e7cb052
Author: Milan Crha <mcrha redhat com>
Date:   Fri Mar 24 14:26:11 2017 +0100

    Sources always enabled, even when their part is disabled
    
    ESources were always set enabled, even though their corresponding part
    in the Collection extension could be disabled, like in GOA/UOA, which
    led to confusion and misbehaviour.

 src/collection/e-ews-backend.c |   55 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 50 insertions(+), 5 deletions(-)
---
diff --git a/src/collection/e-ews-backend.c b/src/collection/e-ews-backend.c
index 76545dd..d6498f7 100644
--- a/src/collection/e-ews-backend.c
+++ b/src/collection/e-ews-backend.c
@@ -168,6 +168,38 @@ ews_backend_get_settings (EEwsBackend *backend)
        return CAMEL_EWS_SETTINGS (settings);
 }
 
+static void
+ews_backend_update_enabled (ESource *data_source,
+                           ESource *collection_source)
+{
+       ESourceCollection *collection_extension = NULL;
+       gboolean part_enabled = TRUE;
+
+       g_return_if_fail (E_IS_SOURCE (data_source));
+
+       if (!collection_source || !e_source_get_enabled (collection_source)) {
+               e_source_set_enabled (data_source, FALSE);
+               return;
+       }
+
+       if (e_source_has_extension (collection_source, E_SOURCE_EXTENSION_COLLECTION))
+               collection_extension = e_source_get_extension (collection_source, 
E_SOURCE_EXTENSION_COLLECTION);
+
+       if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_CALENDAR) ||
+           e_source_has_extension (data_source, E_SOURCE_EXTENSION_TASK_LIST) ||
+           e_source_has_extension (data_source, E_SOURCE_EXTENSION_MEMO_LIST)) {
+               part_enabled = !collection_extension || e_source_collection_get_calendar_enabled 
(collection_extension);
+       } else if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_ADDRESS_BOOK)) {
+               part_enabled = !collection_extension || e_source_collection_get_contacts_enabled 
(collection_extension);
+       } else if (e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_ACCOUNT) ||
+                  e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_IDENTITY) ||
+                  e_source_has_extension (data_source, E_SOURCE_EXTENSION_MAIL_TRANSPORT)) {
+               part_enabled = !collection_extension || e_source_collection_get_mail_enabled 
(collection_extension);
+       }
+
+       e_source_set_enabled (data_source, part_enabled);
+}
+
 static ESource *
 ews_backend_new_child (EEwsBackend *backend,
                        EEwsFolder *folder)
@@ -186,7 +218,6 @@ ews_backend_new_child (EEwsBackend *backend,
 
        display_name = e_ews_folder_get_name (folder);
        e_source_set_display_name (source, display_name);
-       e_source_set_enabled (source, TRUE);
 
        switch (e_ews_folder_get_folder_type (folder)) {
                case E_EWS_FOLDER_TYPE_CALENDAR:
@@ -208,6 +239,7 @@ ews_backend_new_child (EEwsBackend *backend,
        extension = e_source_get_extension (source, extension_name);
        e_source_backend_set_backend_name (
                E_SOURCE_BACKEND (extension), "ews");
+       ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
 
        if (e_ews_folder_get_folder_type (folder) != E_EWS_FOLDER_TYPE_CONTACTS &&
            !e_source_has_extension (source, E_SOURCE_EXTENSION_EWS_FOLDER) &&
@@ -376,9 +408,22 @@ ews_backend_add_gal_source (EEwsBackend *backend)
        const gchar *oal_id = NULL;
        const gchar *uid;
        gchar *oal_selected;
+       gboolean can_enable;
 
        settings = ews_backend_get_settings (backend);
        collection_backend = E_COLLECTION_BACKEND (backend);
+       source = e_backend_get_source (E_BACKEND (backend));
+       if (source) {
+               ESourceCollection *collection_extension = NULL;
+
+               if (e_source_has_extension (source, E_SOURCE_EXTENSION_COLLECTION))
+                       collection_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_COLLECTION);
+
+               can_enable = !collection_extension || (e_source_get_enabled (source) &&
+                       e_source_collection_get_contacts_enabled (collection_extension));
+       } else {
+               can_enable = FALSE;
+       }
 
        gal_uid = camel_ews_settings_get_gal_uid (settings);
 
@@ -388,7 +433,7 @@ ews_backend_add_gal_source (EEwsBackend *backend)
                g_object_unref (server);
 
                if (source != NULL) {
-                       e_source_set_enabled (source, TRUE);
+                       e_source_set_enabled (source, can_enable);
                        g_object_unref (source);
                        return;
                }
@@ -425,7 +470,7 @@ ews_backend_add_gal_source (EEwsBackend *backend)
 
        source = e_collection_backend_new_child (
                collection_backend, oal_id);
-       e_source_set_enabled (source, TRUE);
+       e_source_set_enabled (source, can_enable);
 
        e_source_set_display_name (source, display_name);
 
@@ -505,7 +550,7 @@ add_remote_sources (EEwsBackend *backend)
                                E_SERVER_SIDE_SOURCE (source), TRUE);
                        e_server_side_source_set_remote_deletable (
                                E_SERVER_SIDE_SOURCE (source), TRUE);
-                       e_source_set_enabled (source, TRUE);
+                       ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
                        e_source_registry_server_add_source (registry, source);
                } else {
                        GError *error = NULL;
@@ -633,7 +678,7 @@ ews_backend_claim_old_resources (ECollectionBackend *backend)
        for (iter = old_resources; iter; iter = g_list_next (iter)) {
                ESource *source = iter->data;
 
-               e_source_set_enabled (source, TRUE);
+               ews_backend_update_enabled (source, e_backend_get_source (E_BACKEND (backend)));
                e_source_registry_server_add_source (registry, source);
        }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]