[evolution-kolab/ek-wip-porting] CamelIMAPXExtdFolder: implemented new() API function
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab/ek-wip-porting] CamelIMAPXExtdFolder: implemented new() API function
- Date: Wed, 18 Jan 2012 15:06:58 +0000 (UTC)
commit 4cc133d8aec3629dd49db2b41337eb74d558e5a0
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Wed Jan 18 15:41:33 2012 +0100
CamelIMAPXExtdFolder: implemented new() API function
* implemented camel_imapx_extd_folder_new()
* it is a modified dupe of camel_imapx_folder_new(),
since we cannot change a CamelFolder's type once
it has been created
.../providers/imapx/camel-imapx-extd-folder.c | 108 +++++++++++++++++---
.../providers/imapx/camel-imapx-extd-folder.h | 2 +-
2 files changed, 95 insertions(+), 15 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-extd-folder.c b/src/camel/providers/imapx/camel-imapx-extd-folder.c
index 4c351ec..4ad6dcf 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-folder.c
+++ b/src/camel/providers/imapx/camel-imapx-extd-folder.c
@@ -29,6 +29,10 @@
#include <config.h>
#endif
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "camel-imapx-summary.h"
#include "camel-imapx-extd-folder.h"
/*----------------------------------------------------------------------------*/
@@ -354,26 +358,102 @@ camel_imapx_extd_folder_class_init (CamelIMAPXExtdFolderClass *klass)
CamelIMAPXExtdFolder*
camel_imapx_extd_folder_new (CamelIMAPXExtdStore *store,
- const gchar *folderdir,
- const gchar *foldername,
+ const gchar *folder_dir,
+ const gchar *folder_name,
GError **err)
{
- CamelIMAPXExtdFolder *folder = NULL;
+ /* This function is a modified dupe of camel_imapx_folder_new() in
+ * CamelIMAPXFolder.
+ * We need to dupe it in order to return a CamelIMAPXExtdFolder
+ * Upstream fixes need to be applied here, too.
+ */
+
+ CamelFolder *folder = NULL;
+ CamelIMAPXFolder *ifolder = NULL;
+ CamelIMAPXExtdFolder *efolder = NULL;
+ CamelService *service = NULL;
+ CamelSettings *settings = NULL;
+ const gchar *short_name = NULL;
+ gchar *state_file = NULL;
+ gboolean filter_inbox = FALSE;
+ gboolean filter_junk = FALSE;
+ gboolean filter_junk_inbox = FALSE;
g_assert (CAMEL_IS_IMAPX_EXTD_STORE (store));
- g_assert (folderdir != NULL);
- g_assert (foldername != NULL);
+ g_assert (folder_dir != NULL);
+ g_assert (folder_name != 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;
+ g_debug ("%s: opening imap folder '%s'\n",
+ __func__, folder_dir);
+
+ service = CAMEL_SERVICE (store);
+ settings = camel_service_get_settings (service);
+
+ g_object_get (settings,
+ "filter-inbox", &filter_inbox,
+ "filter-junk", &filter_junk,
+ "filter-junk-inbox", &filter_junk_inbox,
+ NULL);
+
+ short_name = strrchr (folder_name, '/');
+ if (short_name)
+ short_name++;
+ else
+ short_name = folder_name;
+
+ efolder = g_object_new (CAMEL_TYPE_IMAPX_EXTD_FOLDER,
+ "display-name", short_name,
+ "full_name", folder_name,
+ "parent-store", store, NULL);
+ ifolder = CAMEL_IMAPX_FOLDER (efolder);
+ folder = CAMEL_FOLDER (efolder);
+
+ ifolder->raw_name = g_strdup (folder_name);
+
+ folder->summary = camel_imapx_summary_new (folder);
+ if (!folder->summary) {
+ g_set_error (err,
+ CAMEL_ERROR, CAMEL_ERROR_GENERIC,
+ _("Could not create folder summary for %s"),
+ short_name);
+ return NULL;
+ }
+
+ ifolder->cache = camel_data_cache_new (folder_dir, err);
+ if (!ifolder->cache) {
+ g_prefix_error (err,
+ _("Could not create cache for %s: "),
+ short_name);
+ return NULL;
+ }
+
+ state_file = g_build_filename (folder_dir, "cmeta", NULL);
+ camel_object_set_state_filename (CAMEL_OBJECT (folder), state_file);
+ g_free (state_file);
+ camel_object_state_read (CAMEL_OBJECT (folder));
+
+ ifolder->search = camel_folder_search_new ();
+ ifolder->search_lock = g_mutex_new ();
+ ifolder->stream_lock = g_mutex_new ();
+ ifolder->ignore_recent = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
+ ifolder->exists_on_server = 0;
+ ifolder->unread_on_server = 0;
+ ifolder->modseq_on_server = 0;
+ ifolder->uidnext_on_server = 0;
+
+ if (!g_ascii_strcasecmp (folder_name, "INBOX")) {
+ if (filter_inbox)
+ folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
+ if (filter_junk)
+ folder->folder_flags |= CAMEL_FOLDER_FILTER_JUNK;
+ } else if (filter_junk && !filter_junk_inbox)
+ folder->folder_flags |= CAMEL_FOLDER_FILTER_JUNK;
+
+ camel_store_summary_connect_folder_summary (CAMEL_STORE_SUMMARY (CAMEL_IMAPX_STORE (store)->summary),
+ folder_name, folder->summary);
+
+ return efolder;
}
guint64
diff --git a/src/camel/providers/imapx/camel-imapx-extd-folder.h b/src/camel/providers/imapx/camel-imapx-extd-folder.h
index 2219e99..3703076 100644
--- a/src/camel/providers/imapx/camel-imapx-extd-folder.h
+++ b/src/camel/providers/imapx/camel-imapx-extd-folder.h
@@ -80,7 +80,7 @@ camel_imapx_extd_folder_get_type (void);
CamelIMAPXExtdFolder*
camel_imapx_extd_folder_new (CamelIMAPXExtdStore *store,
const gchar *folder_dir,
- const gchar *foldername,
+ const gchar *folder_name,
GError **err);
guint64
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]