[evolution-data-server] Make ESource::unset_last_credentials_required_arguments() virtual method



commit 5649be0fff2e256febba984067246531c391ba57
Author: Milan Crha <mcrha redhat com>
Date:   Wed Jun 17 16:52:14 2015 +0200

    Make ESource::unset_last_credentials_required_arguments() virtual method
    
    It's required to have different implementation for an ESource and
    for an EServerSideSource, because the later doesn't have a GDBusProxy,
    which was used in the initial implementation.

 libebackend/e-server-side-source.c |   33 +++++++++++++++---
 libedataserver/e-source.c          |   62 ++++++++++++++++++++++-------------
 libedataserver/e-source.h          |    6 +++-
 3 files changed, 71 insertions(+), 30 deletions(-)
---
diff --git a/libebackend/e-server-side-source.c b/libebackend/e-server-side-source.c
index f1a017e..36a038b 100644
--- a/libebackend/e-server-side-source.c
+++ b/libebackend/e-server-side-source.c
@@ -533,11 +533,11 @@ server_side_source_get_last_credentials_required_arguments_cb (EDBusSource *dbus
        return TRUE;
 }
 
-static gboolean
-server_side_source_unset_last_credentials_required_arguments_cb (EDBusSource *dbus_interface,
-                                                                GDBusMethodInvocation *invocation,
-                                                                EServerSideSource *source)
+static void
+server_side_source_unset_last_credentials_required_arguments (EServerSideSource *source)
 {
+       g_return_if_fail (E_IS_SERVER_SIDE_SOURCE (source));
+
        g_mutex_lock (&source->priv->last_values_lock);
 
        g_free (source->priv->last_reason);
@@ -552,9 +552,17 @@ server_side_source_unset_last_credentials_required_arguments_cb (EDBusSource *db
        source->priv->last_dbus_error_name = NULL;
        source->priv->last_dbus_error_message = NULL;
 
-       e_dbus_source_complete_unset_last_credentials_required_arguments (dbus_interface, invocation);
-
        g_mutex_unlock (&source->priv->last_values_lock);
+}
+
+static gboolean
+server_side_source_unset_last_credentials_required_arguments_cb (EDBusSource *dbus_interface,
+                                                                GDBusMethodInvocation *invocation,
+                                                                EServerSideSource *source)
+{
+       server_side_source_unset_last_credentials_required_arguments (source);
+
+       e_dbus_source_complete_unset_last_credentials_required_arguments (dbus_interface, invocation);
 
        return TRUE;
 }
@@ -1516,6 +1524,18 @@ server_side_source_invoke_authenticate_impl (ESource *source,
 }
 
 static gboolean
+server_side_source_unset_last_credentials_required_arguments_impl (ESource *source,
+                                                                  GCancellable *cancellable,
+                                                                  GError **error)
+{
+       g_return_val_if_fail (E_IS_SERVER_SIDE_SOURCE (source), FALSE);
+
+       server_side_source_unset_last_credentials_required_arguments (E_SERVER_SIDE_SOURCE (source));
+
+       return TRUE;
+}
+
+static gboolean
 server_side_source_initable_init (GInitable *initable,
                                   GCancellable *cancellable,
                                   GError **error)
@@ -1589,6 +1609,7 @@ e_server_side_source_class_init (EServerSideSourceClass *class)
        source_class->get_oauth2_access_token_sync = server_side_source_get_oauth2_access_token_sync;
        source_class->invoke_credentials_required_impl = server_side_source_invoke_credentials_required_impl;
        source_class->invoke_authenticate_impl = server_side_source_invoke_authenticate_impl;
+       source_class->unset_last_credentials_required_arguments_impl = 
server_side_source_unset_last_credentials_required_arguments_impl;
 
        g_object_class_install_property (
                object_class,
diff --git a/libedataserver/e-source.c b/libedataserver/e-source.c
index 13b931b..dfa4551 100644
--- a/libedataserver/e-source.c
+++ b/libedataserver/e-source.c
@@ -2190,6 +2190,40 @@ source_invoke_authenticate_impl (ESource *source,
 }
 
 static gboolean
+source_unset_last_credentials_required_arguments_impl (ESource *source,
+                                                      GCancellable *cancellable,
+                                                      GError **error)
+{
+       GDBusObject *dbus_object;
+       EDBusSource *dbus_source = NULL;
+       gboolean success;
+       GError *local_error = NULL;
+
+       g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
+
+       dbus_object = e_source_ref_dbus_object (source);
+       if (dbus_object != NULL) {
+               dbus_source = e_dbus_object_get_source (E_DBUS_OBJECT (dbus_object));
+               g_object_unref (dbus_object);
+       }
+
+       if (!dbus_source)
+               return FALSE;
+
+       success = e_dbus_source_call_unset_last_credentials_required_arguments_sync (dbus_source, 
cancellable, &local_error);
+
+       g_object_unref (dbus_source);
+
+       if (local_error != NULL) {
+               g_dbus_error_strip_remote_error (local_error);
+               g_propagate_error (error, local_error);
+               return FALSE;
+       }
+
+       return success;
+}
+
+static gboolean
 source_initable_init (GInitable *initable,
                       GCancellable *cancellable,
                       GError **error)
@@ -2386,6 +2420,7 @@ e_source_class_init (ESourceClass *class)
        class->get_oauth2_access_token_finish = source_get_oauth2_access_token_finish;
        class->invoke_credentials_required_impl = source_invoke_credentials_required_impl;
        class->invoke_authenticate_impl = source_invoke_authenticate_impl;
+       class->unset_last_credentials_required_arguments_impl = 
source_unset_last_credentials_required_arguments_impl;
 
        g_object_class_install_property (
                object_class,
@@ -5392,33 +5427,14 @@ e_source_unset_last_credentials_required_arguments_sync (ESource *source,
                                                         GCancellable *cancellable,
                                                         GError **error)
 {
-       GDBusObject *dbus_object;
-       EDBusSource *dbus_source = NULL;
-       gboolean success;
-       GError *local_error = NULL;
+       ESourceClass *klass;
 
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
-       dbus_object = e_source_ref_dbus_object (source);
-       if (dbus_object != NULL) {
-               dbus_source = e_dbus_object_get_source (E_DBUS_OBJECT (dbus_object));
-               g_object_unref (dbus_object);
-       }
-
-       if (!dbus_source)
-               return FALSE;
-
-       success = e_dbus_source_call_unset_last_credentials_required_arguments_sync (dbus_source, 
cancellable, &local_error);
-
-       g_object_unref (dbus_source);
-
-       if (local_error != NULL) {
-               g_dbus_error_strip_remote_error (local_error);
-               g_propagate_error (error, local_error);
-               return FALSE;
-       }
+       klass = E_SOURCE_GET_CLASS (source);
+       g_return_val_if_fail (klass->unset_last_credentials_required_arguments_impl != NULL, FALSE);
 
-       return success;
+       return klass->unset_last_credentials_required_arguments_impl (source, cancellable, error);
 }
 
 static void
diff --git a/libedataserver/e-source.h b/libedataserver/e-source.h
index 8c645b5..e1d0112 100644
--- a/libedataserver/e-source.h
+++ b/libedataserver/e-source.h
@@ -207,9 +207,13 @@ struct _ESourceClass {
                                                 const gchar * const *arg_credentials,
                                                 GCancellable *cancellable,
                                                 GError **error);
+       gboolean        (*unset_last_credentials_required_arguments_impl)
+                                               (ESource *source,
+                                                GCancellable *cancellable,
+                                                GError **error);
 
        /* Reserved slots. */
-       gpointer reserved[7];
+       gpointer reserved[6];
 };
 
 GType          e_source_get_type               (void) G_GNUC_CONST;


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