[evolution-data-server] Update ESource's connection-status in EBookMetaBackend/ECalMetaBackend



commit 203e223c9ed3872ff0b41ca284c6d6483566f369
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jun 13 17:13:08 2017 +0200

    Update ESource's connection-status in EBookMetaBackend/ECalMetaBackend
    
    Apart of other things it's needed for e_book_client_connect() and
    e_cal_client_connect() to work properly with respect of
    the wait_for_connected_seconds argument.

 .../libedata-book/e-book-meta-backend.c            |   17 +++++++++++++++++
 src/calendar/libedata-cal/e-cal-meta-backend.c     |   16 ++++++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/src/addressbook/libedata-book/e-book-meta-backend.c 
b/src/addressbook/libedata-book/e-book-meta-backend.c
index 4a8d1a8..4795b37 100644
--- a/src/addressbook/libedata-book/e-book-meta-backend.c
+++ b/src/addressbook/libedata-book/e-book-meta-backend.c
@@ -1969,15 +1969,22 @@ ebmb_authenticate_sync (EBackend *backend,
        }
 
        g_mutex_lock (&meta_backend->priv->connect_lock);
+
+       e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_CONNECTING);
+
        success = e_book_meta_backend_connect_sync (meta_backend, credentials, &auth_result,
                out_certificate_pem, out_certificate_errors, cancellable, error);
 
        if (success) {
                ebmb_update_connection_values (meta_backend);
                auth_result = E_SOURCE_AUTHENTICATION_ACCEPTED;
+
+               e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_CONNECTED);
        } else {
                if (auth_result == E_SOURCE_AUTHENTICATION_UNKNOWN)
                        auth_result = E_SOURCE_AUTHENTICATION_ERROR;
+
+               e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
        }
        g_mutex_unlock (&meta_backend->priv->connect_lock);
 
@@ -3040,6 +3047,7 @@ e_book_meta_backend_ensure_connected_sync (EBookMetaBackend *meta_backend,
                                           GError **error)
 {
        ENamedParameters *credentials;
+       ESource *source;
        ESourceAuthenticationResult auth_result = E_SOURCE_AUTHENTICATION_UNKNOWN;
        ESourceCredentialsReason creds_reason = E_SOURCE_CREDENTIALS_REASON_ERROR;
        gchar *certificate_pem = NULL;
@@ -3060,15 +3068,24 @@ e_book_meta_backend_ensure_connected_sync (EBookMetaBackend *meta_backend,
        g_mutex_unlock (&meta_backend->priv->property_lock);
 
        g_mutex_lock (&meta_backend->priv->connect_lock);
+
+       source = e_backend_get_source (E_BACKEND (meta_backend));
+
+       if (e_source_get_connection_status (source) != E_SOURCE_CONNECTION_STATUS_CONNECTED)
+               e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_CONNECTING);
+
        if (e_book_meta_backend_connect_sync (meta_backend, credentials, &auth_result, &certificate_pem, 
&certificate_errors,
                cancellable, &local_error)) {
                ebmb_update_connection_values (meta_backend);
+               e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_CONNECTED);
                g_mutex_unlock (&meta_backend->priv->connect_lock);
                e_named_parameters_free (credentials);
 
                return TRUE;
        }
 
+       e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
+
        g_mutex_unlock (&meta_backend->priv->connect_lock);
 
        e_named_parameters_free (credentials);
diff --git a/src/calendar/libedata-cal/e-cal-meta-backend.c b/src/calendar/libedata-cal/e-cal-meta-backend.c
index 1bf475a..8126351 100644
--- a/src/calendar/libedata-cal/e-cal-meta-backend.c
+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
@@ -2737,15 +2737,22 @@ ecmb_authenticate_sync (EBackend *backend,
        }
 
        g_mutex_lock (&meta_backend->priv->connect_lock);
+
+       e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_CONNECTING);
+
        success = e_cal_meta_backend_connect_sync (meta_backend, credentials, &auth_result,
                out_certificate_pem, out_certificate_errors, cancellable, error);
 
        if (success) {
                ecmb_update_connection_values (meta_backend);
                auth_result = E_SOURCE_AUTHENTICATION_ACCEPTED;
+
+               e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_CONNECTED);
        } else {
                if (auth_result == E_SOURCE_AUTHENTICATION_UNKNOWN)
                        auth_result = E_SOURCE_AUTHENTICATION_ERROR;
+
+               e_source_set_connection_status (e_backend_get_source (backend), 
E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
        }
        g_mutex_unlock (&meta_backend->priv->connect_lock);
 
@@ -3901,6 +3908,7 @@ e_cal_meta_backend_ensure_connected_sync (ECalMetaBackend *meta_backend,
                                          GError **error)
 {
        ENamedParameters *credentials;
+       ESource *source;
        ESourceAuthenticationResult auth_result = E_SOURCE_AUTHENTICATION_UNKNOWN;
        ESourceCredentialsReason creds_reason = E_SOURCE_CREDENTIALS_REASON_ERROR;
        gchar *certificate_pem = NULL;
@@ -3922,15 +3930,23 @@ e_cal_meta_backend_ensure_connected_sync (ECalMetaBackend *meta_backend,
 
        g_mutex_lock (&meta_backend->priv->connect_lock);
 
+       source = e_backend_get_source (E_BACKEND (meta_backend));
+
+       if (e_source_get_connection_status (source) != E_SOURCE_CONNECTION_STATUS_CONNECTED)
+               e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_CONNECTING);
+
        if (e_cal_meta_backend_connect_sync (meta_backend, credentials, &auth_result, &certificate_pem, 
&certificate_errors,
                cancellable, &local_error)) {
                ecmb_update_connection_values (meta_backend);
+               e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_CONNECTED);
                g_mutex_unlock (&meta_backend->priv->connect_lock);
                e_named_parameters_free (credentials);
 
                return TRUE;
        }
 
+       e_source_set_connection_status (source, E_SOURCE_CONNECTION_STATUS_DISCONNECTED);
+
        g_mutex_unlock (&meta_backend->priv->connect_lock);
 
        e_named_parameters_free (credentials);


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