[evolution-kolab/ek-wip-porting] CamelKolabIMAPXStore: subclassing of interfaces



commit d891350507c93548d2048c85a3ff043828e542be
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Mon Jan 9 20:04:30 2012 +0100

    CamelKolabIMAPXStore: subclassing of interfaces
    
    * initial implementation of the parent class'
      interfaces (GInitable, CamelNetworkService, CamelSubscribable)

 src/camel/camel-kolab-imapx-store.c |  105 ++++++++++++++++++++++-------------
 1 files changed, 66 insertions(+), 39 deletions(-)
---
diff --git a/src/camel/camel-kolab-imapx-store.c b/src/camel/camel-kolab-imapx-store.c
index 036e5e1..ff01d2f 100644
--- a/src/camel/camel-kolab-imapx-store.c
+++ b/src/camel/camel-kolab-imapx-store.c
@@ -45,17 +45,17 @@
 
 /*----------------------------------------------------------------------------*/
 
-static GInitableIface *parent_initable_interface = NULL;
+static GInitableIface *parent_initable_iface = NULL;
+static CamelNetworkServiceInterface *parent_service_iface = NULL;
+static CamelSubscribableInterface *parent_subscribable_iface = NULL;
 
 /*----------------------------------------------------------------------------*/
-/* forward declarations */
 
+/* forward declarations */
 static void camel_kolab_imapx_store_initable_init (GInitableIface *interface);
 static void camel_kolab_imapx_store_network_service_init (CamelNetworkServiceInterface *interface);
 static void camel_kolab_imapx_store_subscribable_init (CamelSubscribableInterface *interface);
 
-/*----------------------------------------------------------------------------*/
-
 typedef struct _CamelKolabIMAPXStorePrivate CamelKolabIMAPXStorePrivate;
 struct _CamelKolabIMAPXStorePrivate {
 	CamelKolabIMAPXServer *server;
@@ -88,7 +88,7 @@ G_DEFINE_TYPE_WITH_CODE (CamelKolabIMAPXStore,
                                                 camel_kolab_imapx_store_subscribable_init))
 
 /*----------------------------------------------------------------------------*/
-/* class functions */
+/* object/class init */
 
 static void
 camel_kolab_imapx_store_init (CamelKolabIMAPXStore *self)
@@ -182,6 +182,9 @@ camel_kolab_imapx_store_finalize (GObject *object)
 	G_OBJECT_CLASS (camel_kolab_imapx_store_parent_class)->finalize (object);
 }
 
+/*----------------------------------------------------------------------------*/
+/* class functions */
+
 static gchar*
 camel_kolab_imapx_store_get_name (CamelService *service,
                                   gboolean brief)
@@ -465,53 +468,63 @@ camel_kolab_imapx_store_initable_initialize (GInitable *initable,
                                              GCancellable *cancellable,
                                              GError **err)
 {
-	g_assert (CAMEL_IS_KOLAB_IMAPX_STORE (initable));
-	g_assert (G_IS_CANCELLABLE (cancellable));
-	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+	gboolean ok = FALSE;
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	g_assert (G_IS_INITABLE (initable));
+	/* cancellable may be NULL */
+	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
 
-	return FALSE;
+	/* chain up to parent interface's init() method. */
+	ok = parent_initable_iface->init (initable,
+	                                  cancellable,
+	                                  err);
+	return ok;
 }
 
 static const gchar*
 camel_kolab_imapx_store_get_service_name (CamelNetworkService *service,
                                           CamelNetworkSecurityMethod method)
 {
+	const gchar *sn = NULL;
+
 	g_assert (CAMEL_IS_NETWORK_SERVICE (service));
-	(void)method; /* FIXME */
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	/* use parent function for now */
+	sn = parent_service_iface->get_service_name (service,
+	                                             method);
 
-	return NULL;
+	return sn;
 }
 
 static guint16
 camel_kolab_imapx_store_get_default_port (CamelNetworkService *service,
                                           CamelNetworkSecurityMethod method)
 {
+	guint16 port = 0;
+
 	g_assert (CAMEL_IS_NETWORK_SERVICE (service));
-	(void)method; /* FIXME */
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	/* use parent function for now */
+	port = parent_service_iface->get_default_port (service,
+	                                               method);
 
-	return 0;
+	return port;
 }
 
 static gboolean
 camel_kolab_imapx_store_folder_is_subscribed (CamelSubscribable *subscribable,
                                               const gchar *foldername)
 {
-	g_assert (CAMEL_IS_KOLAB_IMAPX_STORE (subscribable));
-	(void)foldername; /* FIXME */
+	gboolean subscribed = FALSE;
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	g_assert (CAMEL_IS_SUBSCRIBABLE (subscribable));
+	g_assert (foldername != NULL);
 
-	return FALSE;
+	/* use parent function for now */
+	subscribed = parent_subscribable_iface->folder_is_subscribed (subscribable,
+	                                                              foldername);
+
+	return subscribed;
 }
 
 static gboolean
@@ -520,15 +533,19 @@ camel_kolab_imapx_store_subscribe_folder_sync (CamelSubscribable *subscribable,
                                                GCancellable *cancellable,
                                                GError **err)
 {
-	g_assert (CAMEL_IS_KOLAB_IMAPX_STORE (subscribable));
-	(void)foldername; /* FIXME */
-	g_assert (G_IS_CANCELLABLE (cancellable));
-	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+	gboolean ok = FALSE;
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	g_assert (CAMEL_IS_SUBSCRIBABLE (subscribable));
+	g_assert (foldername != NULL);
+	/* cancellable may be NULL */
+	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
 
-	return FALSE;
+	/* use parent function for now */
+	ok = parent_subscribable_iface->subscribe_folder_sync (subscribable,
+	                                                       foldername,
+	                                                       cancellable,
+	                                                       err);
+	return ok;
 }
 
 static gboolean
@@ -537,27 +554,34 @@ camel_kolab_imapx_store_unsubscribe_folder_sync (CamelSubscribable *subscribable
                                                  GCancellable *cancellable,
                                                  GError **err)
 {
-	g_assert (CAMEL_IS_KOLAB_IMAPX_STORE (subscribable));
-	(void)foldername; /* FIXME */
-	g_assert (G_IS_CANCELLABLE (cancellable));
-	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+	gboolean ok = FALSE;
 
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
+	g_assert (CAMEL_IS_SUBSCRIBABLE (subscribable));
+	g_assert (foldername != NULL);
+	/* cancellable may be NULL */
+	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
 
-	return FALSE;
+	/* use parent function for now */
+	ok = parent_subscribable_iface->unsubscribe_folder_sync (subscribable,
+	                                                         foldername,
+	                                                         cancellable,
+	                                                         err);
+	return ok;
 }
 
 static void
 camel_kolab_imapx_store_initable_init (GInitableIface *interface)
 {
-	parent_initable_interface = g_type_interface_peek_parent (interface);
+	parent_initable_iface = g_type_interface_peek_parent (interface);
 	interface->init = camel_kolab_imapx_store_initable_initialize;
 }
 
 static void
 camel_kolab_imapx_store_network_service_init (CamelNetworkServiceInterface *interface)
 {
+	g_assert (CAMEL_IS_NETWORK_SERVICE_INTERFACE (interface));
+
+	parent_service_iface = g_type_interface_peek_parent (interface);
 	interface->get_service_name = camel_kolab_imapx_store_get_service_name;
 	interface->get_default_port = camel_kolab_imapx_store_get_default_port;
 }
@@ -565,6 +589,9 @@ camel_kolab_imapx_store_network_service_init (CamelNetworkServiceInterface *inte
 static void
 camel_kolab_imapx_store_subscribable_init (CamelSubscribableInterface *interface)
 {
+	g_assert (CAMEL_IS_SUBSCRIBABLE_INTERFACE (interface));
+
+	parent_subscribable_iface = g_type_interface_peek_parent (interface);
 	interface->folder_is_subscribed = camel_kolab_imapx_store_folder_is_subscribed;
 	interface->subscribe_folder_sync = camel_kolab_imapx_store_subscribe_folder_sync;
 	interface->unsubscribe_folder_sync = camel_kolab_imapx_store_unsubscribe_folder_sync;



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