[evolution-kolab/ek-wip-porting] CamelIMAPXExtdConnManager: use virtual functions
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab/ek-wip-porting] CamelIMAPXExtdConnManager: use virtual functions
- Date: Wed, 11 Jan 2012 19:26:42 +0000 (UTC)
commit c0aa5709d063d7258ef90121bd616b5856946e5b
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Wed Jan 11 17:19:26 2012 +0100
CamelIMAPXExtdConnManager: use virtual functions
* changed to implement the parent class' API functions
via GObject virtual functions
* CamelIMAPXExtdConnManager is now subclassable
for Kolab use
.../imapx/camel-imapx-extd-conn-manager.c | 190 +++++++++++++------
.../imapx/camel-imapx-extd-conn-manager.h | 25 ++-
2 files changed, 148 insertions(+), 67 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-extd-conn-manager.c b/src/camel/providers/imapx/camel-imapx-extd-conn-manager.c
index 104971c..07efcf8 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-conn-manager.c
+++ b/src/camel/providers/imapx/camel-imapx-extd-conn-manager.c
@@ -39,20 +39,10 @@ enum {
PROP_STORE
};
-#if 0
-/* dupe of _CamelIMAPXConnManagerPrivate */ /* (not) needed? */
-struct _CamelIMAPXExtdConnManagerPrivate {
- GList *connections;
- gpointer store; /* weak pointer */
- GStaticRecMutex con_man_lock;
- gboolean clearing_connections;
-};
-#endif
-
G_DEFINE_TYPE (CamelIMAPXExtdConnManager, camel_imapx_extd_conn_manager, CAMEL_TYPE_IMAPX_CONN_MANAGER)
/*----------------------------------------------------------------------------*/
-/* object/class init */
+/* object init */
static void
camel_imapx_extd_conn_manager_init (CamelIMAPXExtdConnManager *self)
@@ -76,15 +66,108 @@ camel_imapx_extd_conn_manager_finalize (GObject *object)
G_OBJECT_CLASS (camel_imapx_extd_conn_manager_parent_class)->finalize (object);
}
+/*----------------------------------------------------------------------------*/
+/* class functions */
+
+static CamelIMAPXExtdStore*
+imapx_extd_conn_manager_get_store (CamelIMAPXExtdConnManager *self)
+{
+ CamelStore *store = NULL;
+ CamelIMAPXConnManager *con_man = NULL;
+
+ g_return_val_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self), NULL);
+
+ con_man = CAMEL_IMAPX_CONN_MANAGER (self);
+ store = camel_imapx_conn_manager_get_store (con_man);
+
+ return CAMEL_IMAPX_EXTD_STORE (store);
+}
+
+static CamelIMAPXExtdServer*
+imapx_extd_conn_manager_get_connection (CamelIMAPXExtdConnManager *self,
+ const gchar *foldername,
+ GCancellable *cancellable,
+ GError **err)
+{
+ CamelIMAPXServer *is = NULL;
+ CamelIMAPXConnManager *con_man = NULL;
+ GError *tmp_err = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
+ g_assert (foldername != NULL);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ con_man = CAMEL_IMAPX_CONN_MANAGER (self);
+ is = camel_imapx_conn_manager_get_connection (con_man,
+ foldername,
+ cancellable,
+ &tmp_err);
+ if (is == NULL) {
+ if (tmp_err != NULL)
+ g_propagate_error (err, tmp_err);
+ return NULL;
+ }
+
+ return CAMEL_IMAPX_EXTD_SERVER (is);
+}
+
+static void
+imapx_extd_conn_manager_close_connections (CamelIMAPXExtdConnManager *self)
+{
+ CamelIMAPXConnManager *con_man = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
+
+ con_man = CAMEL_IMAPX_CONN_MANAGER (self);
+ camel_imapx_conn_manager_close_connections (con_man);
+}
+
+static GList*
+imapx_extd_conn_manager_get_connections (CamelIMAPXExtdConnManager *self)
+{
+ GList *cn = NULL;
+ CamelIMAPXConnManager *con_man = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
+
+ con_man = CAMEL_IMAPX_CONN_MANAGER (self);
+ cn = camel_imapx_conn_manager_get_connections (con_man);
+
+ /* TODO type-check list elements? */
+
+ return cn;
+}
+
+static void
+imapx_extd_conn_manager_update_con_info (CamelIMAPXExtdConnManager *self,
+ CamelIMAPXExtdServer *server,
+ const gchar *foldername)
+{
+ CamelIMAPXConnManager *con_man = NULL;
+ CamelIMAPXServer *is = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (con_man));
+ g_assert (CAMEL_IS_IMAPX_EXTD_SERVER (server));
+ g_assert (foldername != NULL);
+
+ con_man = CAMEL_IMAPX_CONN_MANAGER (self);
+ is = CAMEL_IMAPX_SERVER (server);
+
+ camel_imapx_conn_manager_update_con_info (con_man,
+ is,
+ foldername);
+}
+
+/*----------------------------------------------------------------------------*/
+/* class init */
+
static void
camel_imapx_extd_conn_manager_class_init (CamelIMAPXExtdConnManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GObjectClass *gobj_p_class = NULL;
- /* (not) needed? */
- /* g_type_class_add_private (klass, sizeof (CamelIMAPXExtdConnManagerPrivate)); */
-
gobj_p_class = G_OBJECT_CLASS (camel_imapx_extd_conn_manager_parent_class);
object_class->set_property = gobj_p_class->set_property;
object_class->get_property = gobj_p_class->get_property;
@@ -92,6 +175,12 @@ camel_imapx_extd_conn_manager_class_init (CamelIMAPXExtdConnManagerClass *klass)
object_class->dispose = camel_imapx_extd_conn_manager_dispose;
object_class->finalize = camel_imapx_extd_conn_manager_finalize;
+ klass->get_store = imapx_extd_conn_manager_get_store;
+ klass->get_connection = imapx_extd_conn_manager_get_connection;
+ klass->close_connections = imapx_extd_conn_manager_close_connections;
+ klass->get_connections = imapx_extd_conn_manager_get_connections;
+ klass->update_con_info = imapx_extd_conn_manager_update_con_info;
+
/* duped from parent */
g_object_class_install_property (object_class,
PROP_STORE,
@@ -121,18 +210,18 @@ camel_imapx_extd_conn_manager_new (CamelIMAPXExtdStore *store)
return self;
}
-CamelStore*
+CamelIMAPXExtdStore*
camel_imapx_extd_conn_manager_get_store (CamelIMAPXExtdConnManager *self)
{
- CamelStore *store = NULL;
- CamelIMAPXConnManager *con_man = NULL;
+ CamelIMAPXExtdStore *es = NULL;
+ CamelIMAPXExtdConnManagerClass *klass = NULL;
g_return_val_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self), NULL);
- con_man = CAMEL_IMAPX_CONN_MANAGER (self);
- store = camel_imapx_conn_manager_get_store (con_man);
+ klass = CAMEL_IMAPX_EXTD_CONN_MANAGER_GET_CLASS (self);
+ es = klass->get_store (self);
- return store;
+ return es;
}
CamelIMAPXExtdServer*
@@ -141,52 +230,40 @@ camel_imapx_extd_conn_manager_get_connection (CamelIMAPXExtdConnManager *self,
GCancellable *cancellable,
GError **err)
{
- CamelIMAPXServer *is = NULL;
- CamelIMAPXExtdServer *es = NULL;
- CamelIMAPXConnManager *con_man = NULL;
- GError *tmp_err = NULL;
-
- g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
- g_assert (foldername != NULL);
- /* cancellable may be NULL */
- g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+ CamelIMAPXExtdServer *server = NULL;
+ CamelIMAPXExtdConnManagerClass *klass = NULL;
- con_man = CAMEL_IMAPX_CONN_MANAGER (self);
- is = camel_imapx_conn_manager_get_connection (con_man,
- foldername,
- cancellable,
- &tmp_err);
- if (is == NULL) {
- g_propagate_error (err, tmp_err);
- return NULL;
- }
-
- es = CAMEL_IMAPX_EXTD_SERVER (is);
+ g_return_val_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self), NULL);
- return es;
+ klass = CAMEL_IMAPX_EXTD_CONN_MANAGER_GET_CLASS (self);
+ server = klass->get_connection (self,
+ foldername,
+ cancellable,
+ err);
+ return server;
}
void
camel_imapx_extd_conn_manager_close_connections (CamelIMAPXExtdConnManager *self)
{
- CamelIMAPXConnManager *con_man = NULL;
+ CamelIMAPXExtdConnManagerClass *klass = NULL;
- g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
+ g_return_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
- con_man = CAMEL_IMAPX_CONN_MANAGER (self);
- camel_imapx_conn_manager_close_connections (con_man);
+ klass = CAMEL_IMAPX_EXTD_CONN_MANAGER_GET_CLASS (self);
+ klass->close_connections (self);
}
GList*
camel_imapx_extd_conn_manager_get_connections (CamelIMAPXExtdConnManager *self)
{
GList *cn = NULL;
- CamelIMAPXConnManager *con_man = NULL;
+ CamelIMAPXExtdConnManagerClass *klass = NULL;
- g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
+ g_return_val_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self), NULL);
- con_man = CAMEL_IMAPX_CONN_MANAGER (self);
- cn = camel_imapx_conn_manager_get_connections (con_man);
+ klass = CAMEL_IMAPX_EXTD_CONN_MANAGER_GET_CLASS (self);
+ cn = klass->get_connections (self);
return cn;
}
@@ -196,19 +273,12 @@ camel_imapx_extd_conn_manager_update_con_info (CamelIMAPXExtdConnManager *self,
CamelIMAPXExtdServer *server,
const gchar *foldername)
{
- CamelIMAPXConnManager *con_man = NULL;
- CamelIMAPXServer *is = NULL;
+ CamelIMAPXExtdConnManagerClass *klass = NULL;
- g_assert (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (con_man));
- g_assert (CAMEL_IS_IMAPX_EXTD_SERVER (server));
- g_assert (foldername != NULL);
-
- con_man = CAMEL_IMAPX_CONN_MANAGER (self);
- is = CAMEL_IMAPX_SERVER (server);
+ g_return_if_fail (CAMEL_IS_IMAPX_EXTD_CONN_MANAGER (self));
- camel_imapx_conn_manager_update_con_info (con_man,
- is,
- foldername);
+ klass = CAMEL_IMAPX_EXTD_CONN_MANAGER_GET_CLASS (self);
+ klass->update_con_info (self, server, foldername);
}
/*----------------------------------------------------------------------------*/
diff --git a/src/camel/providers/imapx/camel-imapx-extd-conn-manager.h b/src/camel/providers/imapx/camel-imapx-extd-conn-manager.h
index 89c1ebd..34c8ff5 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-conn-manager.h
+++ b/src/camel/providers/imapx/camel-imapx-extd-conn-manager.h
@@ -64,18 +64,29 @@ G_BEGIN_DECLS
typedef struct _CamelIMAPXExtdConnManager CamelIMAPXExtdConnManager;
typedef struct _CamelIMAPXExtdConnManagerClass CamelIMAPXExtdConnManagerClass;
-#if 0
-/* (not) needed? */
-typedef struct _CamelIMAPXExtdConnManagerPrivate CamelIMAPXExtdConnManagerPrivate;
-#endif
-
struct _CamelIMAPXExtdConnManager {
CamelIMAPXConnManager parent;
- /* CamelIMAPXExtdConnManagerPrivate *priv; */ /* (not) needed? */
};
struct _CamelIMAPXExtdConnManagerClass {
CamelIMAPXConnManagerClass parent_class;
+
+ /* public virtual functions */
+
+ CamelIMAPXExtdStore* (*get_store) (CamelIMAPXExtdConnManager *self);
+
+ CamelIMAPXExtdServer* (*get_connection) (CamelIMAPXExtdConnManager *self,
+ const gchar *foldername,
+ GCancellable *cancellable,
+ GError **err);
+
+ void (*close_connections) (CamelIMAPXExtdConnManager *self);
+
+ GList* (*get_connections) (CamelIMAPXExtdConnManager *self);
+
+ void (*update_con_info) (CamelIMAPXExtdConnManager *self,
+ CamelIMAPXExtdServer *server,
+ const gchar *foldername);
};
GType
@@ -84,7 +95,7 @@ camel_imapx_extd_conn_manager_get_type (void);
CamelIMAPXExtdConnManager*
camel_imapx_extd_conn_manager_new (CamelIMAPXExtdStore *store);
-CamelStore*
+CamelIMAPXExtdStore*
camel_imapx_extd_conn_manager_get_store (CamelIMAPXExtdConnManager *self);
CamelIMAPXExtdServer*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]