aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/mh
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers/mh')
-rw-r--r--camel/providers/mh/camel-mh-folder.c21
-rw-r--r--camel/providers/mh/camel-mh-folder.h2
-rw-r--r--camel/providers/mh/camel-mh-store.c8
-rw-r--r--camel/providers/mh/camel-mh-summary.c7
4 files changed, 24 insertions, 14 deletions
diff --git a/camel/providers/mh/camel-mh-folder.c b/camel/providers/mh/camel-mh-folder.c
index c8b0503e95..ccd9d717e9 100644
--- a/camel/providers/mh/camel-mh-folder.c
+++ b/camel/providers/mh/camel-mh-folder.c
@@ -158,7 +158,7 @@ CamelType camel_mh_folder_get_type(void)
}
CamelFolder *
-camel_mh_folder_new(CamelStore *parent_store, const char *full_name, CamelException *ex)
+camel_mh_folder_new(CamelStore *parent_store, const char *full_name, guint32 flags, CamelException *ex)
{
CamelFolder *folder;
CamelMhFolder *mh_folder;
@@ -185,11 +185,20 @@ camel_mh_folder_new(CamelStore *parent_store, const char *full_name, CamelExcept
/* if we have no index file, force it */
forceindex = stat(mh_folder->index_file_path, &st) == -1;
-
- mh_folder->index = ibex_open(mh_folder->index_file_path, O_CREAT | O_RDWR, 0600);
- if (mh_folder->index == NULL) {
- /* yes, this isn't fatal at all */
- g_warning("Could not open/create index file: %s: indexing not performed", strerror(errno));
+ /* check if we need to setup an index */
+ if (flags & CAMEL_STORE_FOLDER_BODY_INDEX) {
+ mh_folder->index = ibex_open(mh_folder->index_file_path, O_CREAT | O_RDWR, 0600);
+ if (mh_folder->index == NULL) {
+ /* yes, this isn't fatal at all */
+ g_warning("Could not open/create index file: %s: indexing not performed", strerror(errno));
+ forceindex = FALSE;
+ }
+ } else {
+ /* if we do have an index file, remove it */
+ if (forceindex == FALSE) {
+ unlink(mh_folder->index_file_path);
+ }
+ forceindex = FALSE;
}
/* no summary (disk or memory), and we're proverbially screwed */
diff --git a/camel/providers/mh/camel-mh-folder.h b/camel/providers/mh/camel-mh-folder.h
index 90f2324d11..bdb1588811 100644
--- a/camel/providers/mh/camel-mh-folder.h
+++ b/camel/providers/mh/camel-mh-folder.h
@@ -62,7 +62,7 @@ typedef struct {
} CamelMhFolderClass;
/* public methods */
-CamelFolder *camel_mh_folder_new(CamelStore *parent_store, const char *full_name, CamelException *ex);
+CamelFolder *camel_mh_folder_new(CamelStore *parent_store, const char *full_name, guint32 flags, CamelException *ex);
/* Standard Camel function */
CamelType camel_mh_folder_get_type(void);
diff --git a/camel/providers/mh/camel-mh-store.c b/camel/providers/mh/camel-mh-store.c
index c169d878fd..ead6e4f340 100644
--- a/camel/providers/mh/camel-mh-store.c
+++ b/camel/providers/mh/camel-mh-store.c
@@ -41,7 +41,7 @@
#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
static char *get_name(CamelService * service, gboolean brief);
-static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboolean create, CamelException * ex);
+static CamelFolder *get_folder(CamelStore * store, const char *folder_name, guint32 flags, CamelException * ex);
static void delete_folder(CamelStore * store, const char *folder_name, CamelException * ex);
static void rename_folder(CamelStore *store, const char *old_name, const char *new_name, CamelException *ex);
static char *get_folder_name(CamelStore * store, const char *folder_name, CamelException * ex);
@@ -102,7 +102,7 @@ const gchar *camel_mh_store_get_toplevel_dir(CamelMhStore * store)
return url->path;
}
-static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboolean create, CamelException * ex)
+static CamelFolder *get_folder(CamelStore * store, const char *folder_name, guint32 flags, CamelException * ex)
{
char *name;
struct stat st;
@@ -118,7 +118,7 @@ static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboo
g_free (name);
return NULL;
}
- if (!create) {
+ if ((flags & CAMEL_STORE_FOLDER_CREATE) == 0) {
camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
"Folder `%s' does not exist.", folder_name);
g_free (name);
@@ -141,7 +141,7 @@ static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboo
}
g_free(name);
- return camel_mh_folder_new (store, folder_name, ex);
+ return camel_mh_folder_new(store, folder_name, flags, ex);
}
static void delete_folder(CamelStore * store, const char *folder_name, CamelException * ex)
diff --git a/camel/providers/mh/camel-mh-summary.c b/camel/providers/mh/camel-mh-summary.c
index 5d304b4a42..ce1d597012 100644
--- a/camel/providers/mh/camel-mh-summary.c
+++ b/camel/providers/mh/camel-mh-summary.c
@@ -161,7 +161,7 @@ int camel_mh_summary_add(CamelMhSummary * mhs, const char *name, int forceindex
mp = camel_mime_parser_new();
camel_mime_parser_scan_from(mp, FALSE);
camel_mime_parser_init_with_fd(mp, fd);
- if (forceindex || !ibex_contains_name(mhs->index, (char *)name)) {
+ if (mhs->index && (forceindex || !ibex_contains_name(mhs->index, (char *)name))) {
d(printf("forcing indexing of message content\n"));
camel_folder_summary_set_index((CamelFolderSummary *)mhs, mhs->index);
} else {
@@ -180,7 +180,8 @@ static void
remove_summary(char *key, CamelMessageInfo *info, CamelMhSummary *mhs)
{
d(printf("removing message %s from summary\n", key));
- ibex_unindex(mhs->index, info->uid);
+ if (mhs->index)
+ ibex_unindex(mhs->index, info->uid);
camel_folder_summary_remove((CamelFolderSummary *)mhs, info);
}
@@ -219,7 +220,7 @@ int camel_mh_summary_check(CamelMhSummary * mhs, int forceindex)
}
if (c==0) {
info = camel_folder_summary_uid((CamelFolderSummary *)mhs, d->d_name);
- if (info == NULL || (!ibex_contains_name(mhs->index, d->d_name))) {
+ if (info == NULL || (mhs->index && (!ibex_contains_name(mhs->index, d->d_name)))) {
/* need to add this file to the summary */
if (info != NULL) {
g_hash_table_remove(left, info->uid);