[evolution-kolab/ek-wip-porting] CamelIMAPXExtdFolder: local implementations for CamelFolder virtual functions
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab/ek-wip-porting] CamelIMAPXExtdFolder: local implementations for CamelFolder virtual functions
- Date: Wed, 11 Jan 2012 19:26:52 +0000 (UTC)
commit afaffcaf69be31f1e4eae8950882a10ec32cb0e9
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Wed Jan 11 20:22:26 2012 +0100
CamelIMAPXExtdFolder: local implementations for CamelFolder virtual functions
* implemented local static functions to bind on
CamelFolder virtual functions
* this is to allow for CamelIMAPXExtdFolder type checking
and for later extension of a number of these functions
as well as better subclassing (CamelKolabIMAPXFolder)
* presently, these functions do the type checking and
then they chain up to the parent's implementation
.../providers/imapx/camel-imapx-extd-folder.c | 320 ++++++++++++++++++--
.../providers/imapx/camel-imapx-extd-folder.h | 10 +
2 files changed, 309 insertions(+), 21 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-extd-folder.c b/src/camel/providers/imapx/camel-imapx-extd-folder.c
index 1ec0f35..501d5ba 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-folder.c
+++ b/src/camel/providers/imapx/camel-imapx-extd-folder.c
@@ -33,10 +33,14 @@
/*----------------------------------------------------------------------------*/
+static CamelFolderClass *parent_folder_class = NULL;
+
+/*----------------------------------------------------------------------------*/
+
G_DEFINE_TYPE (CamelIMAPXExtdFolder, camel_imapx_extd_folder, CAMEL_TYPE_IMAPX_FOLDER)
/*----------------------------------------------------------------------------*/
-/* object/class init */
+/* object init */
static void
camel_imapx_extd_folder_init (CamelIMAPXExtdFolder *self)
@@ -60,49 +64,323 @@ camel_imapx_extd_folder_finalize (GObject *object)
G_OBJECT_CLASS (camel_imapx_extd_folder_parent_class)->finalize (object);
}
+/*----------------------------------------------------------------------------*/
+/* class functions */
+
+static GPtrArray*
+imapx_extd_folder_search_by_expression (CamelFolder *self,
+ const gchar *expression,
+ GError **err)
+{
+ GPtrArray *result = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (expression != NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ result = parent_folder_class->search_by_expression (self,
+ expression,
+ err);
+ return result;
+}
+
+static GPtrArray*
+imapx_extd_folder_search_by_uids (CamelFolder *self,
+ const gchar *expression,
+ GPtrArray *uids,
+ GError **err)
+{
+ GPtrArray *result = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (expression != NULL);
+ g_assert (uids != NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ result = parent_folder_class->search_by_uids (self,
+ expression,
+ uids,
+ err);
+ return result;
+}
+
+static guint32
+imapx_extd_folder_count_by_expression (CamelFolder *self,
+ const gchar *expression,
+ GError **err)
+{
+ guint32 count = 0;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (expression != NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, 0);
+
+ count = parent_folder_class->count_by_expression (self,
+ expression,
+ err);
+ return count;
+}
+
+static void
+imapx_extd_folder_search_free (CamelFolder *self,
+ GPtrArray *result)
+{
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (result != NULL);
+
+ parent_folder_class->search_free (self, result);
+}
+
+static gchar*
+imapx_extd_folder_get_filename (CamelFolder *self,
+ const gchar *uid,
+ GError **err)
+{
+ gchar *filename = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (uid != NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ filename = parent_folder_class->get_filename (self,
+ uid,
+ err);
+ return filename;
+}
+
+static gboolean
+imapx_extd_folder_append_message_sync (CamelFolder *self,
+ CamelMimeMessage *message,
+ CamelMessageInfo *finfo,
+ gchar **appended_uid,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (CAMEL_IS_MIME_MESSAGE (message));
+ /* info may be NULL */ /* FIXME correct? */
+ g_assert (*appended_uid == NULL);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->append_message_sync (self,
+ message,
+ finfo,
+ appended_uid,
+ cancellable,
+ err);
+ return ok;
+}
+
+static gboolean
+imapx_extd_folder_expunge_sync (CamelFolder *self,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->expunge_sync (self,
+ cancellable,
+ err);
+ return ok;
+}
+
+static CamelMimeMessage*
+imapx_extd_folder_get_message_sync (CamelFolder *self,
+ const gchar *message_uid,
+ GCancellable *cancellable,
+ GError **err)
+{
+ CamelMimeMessage *msg = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (message_uid != NULL);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ msg = parent_folder_class->get_message_sync (self,
+ message_uid,
+ cancellable,
+ err);
+ return msg;
+}
+
+static gboolean
+imapx_extd_folder_refresh_info_sync (CamelFolder *self,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->refresh_info_sync (self,
+ cancellable,
+ err);
+ return ok;
+}
+
+static gboolean
+imapx_extd_folder_synchronize_sync (CamelFolder *self,
+ gboolean expunge,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->synchronize_sync (self,
+ expunge,
+ cancellable,
+ err);
+ return ok;
+}
+
+static gboolean
+imapx_extd_folder_synchronize_message_sync (CamelFolder *self,
+ const gchar *message_uid,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_assert (message_uid != NULL);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->synchronize_message_sync (self,
+ message_uid,
+ cancellable,
+ err);
+ return ok;
+}
+
+static gboolean
+imapx_extd_folder_transfer_messages_to_sync (CamelFolder *source,
+ GPtrArray *message_uids,
+ CamelFolder *destination,
+ gboolean delete_originals,
+ GPtrArray **transferred_uids,
+ GCancellable *cancellable,
+ GError **err)
+{
+ gboolean ok = FALSE;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (source));
+ g_assert (message_uids != NULL);
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (destination));
+ g_assert (*transferred_uids == NULL);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ ok = parent_folder_class->transfer_messages_to_sync (source,
+ message_uids,
+ destination,
+ delete_originals,
+ transferred_uids,
+ cancellable,
+ err);
+ return ok;
+}
+
+static guint64
+imapx_extd_folder_get_uidvalidity (CamelIMAPXExtdFolder *self,
+ GError **err)
+{
+ guint64 uidvalidity = 0;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
+ g_return_val_if_fail (err == NULL || *err == NULL, 0);
+
+ /* FIXME implement me */
+ g_error ("%s: FIXME implement me", __func__);
+
+ /* TODO read the uidvalidity value from parent object */
+
+ return uidvalidity;
+}
+/*----------------------------------------------------------------------------*/
+/* class init */
+
static void
camel_imapx_extd_folder_class_init (CamelIMAPXExtdFolderClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CamelFolderClass *folder_class = CAMEL_FOLDER_CLASS (klass);
- CamelFolderClass *parent_folder_class = \
- CAMEL_FOLDER_CLASS (camel_imapx_extd_folder_parent_class);
+
+ parent_folder_class = CAMEL_FOLDER_CLASS (camel_imapx_extd_folder_parent_class);
/* g_type_class_add_private (klass, sizeof (CamelIMAPXExtdFolderPrivate)); */
object_class->dispose = camel_imapx_extd_folder_dispose;
object_class->finalize = camel_imapx_extd_folder_finalize;
- folder_class->search_by_expression = parent_folder_class->search_by_expression;
- folder_class->search_by_uids = parent_folder_class->search_by_uids;
- folder_class->count_by_expression = parent_folder_class->count_by_expression;
- folder_class->search_free = parent_folder_class->search_free;
- folder_class->get_filename = parent_folder_class->get_filename;
- folder_class->append_message_sync = parent_folder_class->append_message_sync;
- folder_class->expunge_sync = parent_folder_class->expunge_sync;
- folder_class->get_message_sync = parent_folder_class->get_message_sync;
- folder_class->refresh_info_sync = parent_folder_class->refresh_info_sync;
- folder_class->synchronize_sync = parent_folder_class->synchronize_sync;
- folder_class->synchronize_message_sync = parent_folder_class->synchronize_message_sync;
- folder_class->transfer_messages_to_sync = parent_folder_class->transfer_messages_to_sync;
+ folder_class->search_by_expression = imapx_extd_folder_search_by_expression;
+ folder_class->search_by_uids = imapx_extd_folder_search_by_uids;
+ folder_class->count_by_expression = imapx_extd_folder_count_by_expression;
+ folder_class->search_free = imapx_extd_folder_search_free;
+ folder_class->get_filename = imapx_extd_folder_get_filename;
+ folder_class->append_message_sync = imapx_extd_folder_append_message_sync;
+ folder_class->expunge_sync = imapx_extd_folder_expunge_sync;
+ folder_class->get_message_sync = imapx_extd_folder_get_message_sync;
+ folder_class->refresh_info_sync = imapx_extd_folder_refresh_info_sync;
+ folder_class->synchronize_sync = imapx_extd_folder_synchronize_sync;
+ folder_class->synchronize_message_sync = imapx_extd_folder_synchronize_message_sync;
+ folder_class->transfer_messages_to_sync = imapx_extd_folder_transfer_messages_to_sync;
+
+ klass->get_uidvalidity = imapx_extd_folder_get_uidvalidity;
}
/*----------------------------------------------------------------------------*/
/* API functions */
+CamelIMAPXExtdFolder*
+camel_imapx_extd_folder_new (CamelIMAPXExtdStore *store,
+ const gchar *folderdir,
+ const gchar *foldername,
+ GError **err)
+{
+ CamelIMAPXExtdFolder *folder = NULL;
+
+ g_assert (CAMEL_IS_IMAPX_EXTD_STORE (store));
+ g_assert (folderdir != NULL);
+ g_assert (foldername != NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ /* FIXME implement me
+ *
+ * We'll need to dupe camel_imapx_folder_new() here
+ * and create our extd types
+ *
+ */
+ g_error ("%s: FIXME implement me", __func__);
+
+ return folder;
+}
+
guint64
camel_imapx_extd_folder_get_uidvalidity (CamelIMAPXExtdFolder *self,
GError **err)
{
guint64 uidvalidity = 0;
+ CamelIMAPXExtdFolderClass *klass = NULL;
- g_assert (CAMEL_IS_IMAPX_EXTD_FOLDER (self));
- g_return_val_if_fail (err == NULL || *err == NULL, 0);
-
- /* FIXME implement me */
- g_error ("%s: FIXME implement me", __func__);
+ g_return_val_if_fail (CAMEL_IS_IMAPX_EXTD_FOLDER (self), 0);
- /* TODO read the uidvalidity value from parent object */
+ klass = CAMEL_IMAPX_EXTD_FOLDER_GET_CLASS (self);
+ uidvalidity = klass->get_uidvalidity (self, err);
return uidvalidity;
}
diff --git a/src/camel/providers/imapx/camel-imapx-extd-folder.h b/src/camel/providers/imapx/camel-imapx-extd-folder.h
index 9f9647a..2219e99 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-folder.h
+++ b/src/camel/providers/imapx/camel-imapx-extd-folder.h
@@ -34,6 +34,7 @@
#include <glib-object.h>
#include <gio/gio.h>
+#include "camel-imapx-extd-store.h"
#include "camel-imapx-folder.h"
/*----------------------------------------------------------------------------*/
@@ -68,11 +69,20 @@ struct _CamelIMAPXExtdFolder {
struct _CamelIMAPXExtdFolderClass {
CamelIMAPXFolderClass parent_class;
+
+ guint64 (*get_uidvalidity) (CamelIMAPXExtdFolder *self,
+ GError **err);
};
GType
camel_imapx_extd_folder_get_type (void);
+CamelIMAPXExtdFolder*
+camel_imapx_extd_folder_new (CamelIMAPXExtdStore *store,
+ const gchar *folder_dir,
+ const gchar *foldername,
+ GError **err);
+
guint64
camel_imapx_extd_folder_get_uidvalidity (CamelIMAPXExtdFolder *self,
GError **err);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]