aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/mbox
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-10-18 14:11:54 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-10-18 14:11:54 +0800
commit229f78b929e0a9553b543f596a7643129d80b494 (patch)
tree8b33f2672a07f2431fae5bf2f686a52fb8b2e401 /camel/providers/mbox
parent345f04ccae499e039f1f6f3d21768a2d93ea1c83 (diff)
downloadgsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar.gz
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar.bz2
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar.lz
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar.xz
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.tar.zst
gsoc2013-evolution-229f78b929e0a9553b543f596a7643129d80b494.zip
No, we must not encode the headers here. These interfaces ARE raw
2000-10-18 Not Zed <NotZed@HelixCode.com> * camel-mime-part.c (add_header): No, we must not encode the headers here. These interfaces ARE raw interfaces as they are defined in camel_medium. Also removed a bogus/meaningless FIXME. (set_header): Likewise here, we must not. (process_header): Removed another bogus comment. * camel-object.c (shared_is_of_type): Comment out the spitting of a big warning when we're trying to determine types from code. * providers/mbox/camel-mbox-summary.c (message_info_new_from_parser): Only call ibex funcitons if we have an index. * providers/mh/camel-mh-summary.c (camel_mh_summary_add): Only call ibex functions if we have an index. (remove_summary): Likewise. (camel_mh_summary_check): Likewise. * providers/nntp/camel-nntp-store.c (nntp_store_get_folder): get_folder -> flags argument. * providers/vee/camel-vee-store.c (vee_get_folder): create->flags. * providers/pop3/camel-pop3-store.c (get_folder): Changed create -> flags. * providers/imap/camel-imap-store.c (get_folder): Added flags argument. * providers/mh/camel-mh-folder.c (camel_mh_folder_new): Added flags argument, and fixed code appropriately. * providers/mh/camel-mh-store.c (get_folder): Added flags argument. * camel-folder-search.c (message_body_contains): Perform a regex match on the contents of messages. This wont quite work yet as message contents are encoded when written to a stream. (build_match_regex): Converts a number of strings into a regex matching pattern, escaping special chars. (match_message): match a single message from a folder, by uid. Slow. (search_body_contains): Changed to support matching where no index is supplied. Matches are performed by retrieving message contents, etc. () WTF? camel should not be including any widget headers. * providers/mbox/camel-mbox-folder.c (camel_mbox_folder_new): Added flags argument. (mbox_refresh_info): Changed into a NOP, the refresh info code moved into the new function. (camel_mbox_folder_new): If we have an index requested, build one, otherwise, remove an old one, or just dont do anything. * providers/mbox/camel-mbox-store.c (get_folder): Changed create to flags, changed code to suit. * camel-store.c (camel_store_get_folder): Changed create to flags. (get_folder_internal): And here. (get_folder): And here too. * camel-store.h (camel_store_get_folder): Change the create argument to be a flags argument. svn path=/trunk/; revision=5978
Diffstat (limited to 'camel/providers/mbox')
-rw-r--r--camel/providers/mbox/camel-mbox-folder.c50
-rw-r--r--camel/providers/mbox/camel-mbox-folder.h5
-rw-r--r--camel/providers/mbox/camel-mbox-store.c69
-rw-r--r--camel/providers/mbox/camel-mbox-summary.c10
4 files changed, 67 insertions, 67 deletions
diff --git a/camel/providers/mbox/camel-mbox-folder.c b/camel/providers/mbox/camel-mbox-folder.c
index 163de6784f..55e2916ed4 100644
--- a/camel/providers/mbox/camel-mbox-folder.c
+++ b/camel/providers/mbox/camel-mbox-folder.c
@@ -171,11 +171,13 @@ CamelType camel_mbox_folder_get_type(void)
}
CamelFolder *
-camel_mbox_folder_new(CamelStore *parent_store, const char *full_name, CamelException *ex)
+camel_mbox_folder_new(CamelStore *parent_store, const char *full_name, guint32 flags, CamelException *ex)
{
CamelFolder *folder;
CamelMboxFolder *mbox_folder;
const char *root_dir_path, *name;
+ struct stat st;
+ int forceindex;
folder = CAMEL_FOLDER (camel_object_new (CAMEL_MBOX_FOLDER_TYPE));
mbox_folder = (CamelMboxFolder *)folder;
@@ -195,39 +197,41 @@ camel_mbox_folder_new(CamelStore *parent_store, const char *full_name, CamelExce
mbox_folder->folder_dir_path = g_strdup_printf("%s/%s.sdb", root_dir_path, full_name);
mbox_folder->index_file_path = g_strdup_printf("%s/%s.ibex", root_dir_path, full_name);
- mbox_refresh_info (folder, ex);
- if (camel_exception_is_set (ex)) {
- camel_object_unref (CAMEL_OBJECT (folder));
- folder = NULL;
- }
-
- return folder;
-}
-
-static void
-mbox_refresh_info (CamelFolder *folder, CamelException *ex)
-{
- CamelMboxFolder *mbox_folder = (CamelMboxFolder *) folder;
- struct stat st;
- int forceindex;
-
/* if we have no index file, force it */
forceindex = stat(mbox_folder->index_file_path, &st) == -1;
+ if (flags & CAMEL_STORE_FOLDER_BODY_INDEX) {
- mbox_folder->index = ibex_open(mbox_folder->index_file_path, O_CREAT | O_RDWR, 0600);
- if (mbox_folder->index == NULL) {
- /* yes, this isn't fatal at all */
- g_warning("Could not open/create index file: %s: indexing not performed", strerror(errno));
+ mbox_folder->index = ibex_open(mbox_folder->index_file_path, O_CREAT | O_RDWR, 0600);
+ if (mbox_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(mbox_folder->index_file_path);
+ }
+ forceindex = FALSE;
}
-
/* no summary (disk or memory), and we're proverbially screwed */
mbox_folder->summary = camel_mbox_summary_new(mbox_folder->summary_file_path,
mbox_folder->folder_file_path, mbox_folder->index);
if (mbox_folder->summary == NULL || camel_mbox_summary_load(mbox_folder->summary, forceindex) == -1) {
camel_exception_set(ex, CAMEL_EXCEPTION_FOLDER_INVALID, /* FIXME: right error code */
"Could not create summary");
- return;
+ camel_object_unref (CAMEL_OBJECT (folder));
+ return NULL;
}
+
+ return folder;
+}
+
+static void
+mbox_refresh_info (CamelFolder *folder, CamelException *ex)
+{
+ /* we are always in a consistent state, or fix it when we need to */
+ return;
}
static void
diff --git a/camel/providers/mbox/camel-mbox-folder.h b/camel/providers/mbox/camel-mbox-folder.h
index 4cc91eda75..d6e8b0682c 100644
--- a/camel/providers/mbox/camel-mbox-folder.h
+++ b/camel/providers/mbox/camel-mbox-folder.h
@@ -69,10 +69,11 @@ typedef struct {
/* public methods */
-CamelFolder *camel_mbox_folder_new (CamelStore *parent_store, const char *full_name, CamelException *ex);
+/* flags are taken from CAMEL_STORE_FOLDER_* flags */
+CamelFolder *camel_mbox_folder_new(CamelStore *parent_store, const char *full_name, guint32 flags, CamelException *ex);
/* Standard Camel function */
-CamelType camel_mbox_folder_get_type (void);
+CamelType camel_mbox_folder_get_type(void);
#ifdef __cplusplus
}
diff --git a/camel/providers/mbox/camel-mbox-store.c b/camel/providers/mbox/camel-mbox-store.c
index 6ad729ce7d..2625722134 100644
--- a/camel/providers/mbox/camel-mbox-store.c
+++ b/camel/providers/mbox/camel-mbox-store.c
@@ -39,14 +39,11 @@
#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
#define CMBOXF_CLASS(so) CAMEL_MBOX_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 void delete_folder (CamelStore *store, const char *folder_name,
- CamelException *ex);
+static char *get_name(CamelService *service, gboolean brief);
+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);
+static char *get_folder_name(CamelStore *store, const char *folder_name, CamelException *ex);
static CamelFolderInfo *get_folder_info (CamelStore *store, const char *top,
gboolean fast, gboolean recursive,
gboolean subscribed_only,
@@ -109,55 +106,53 @@ camel_mbox_store_get_toplevel_dir (CamelMboxStore *store)
}
static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name, gboolean create,
- CamelException *ex)
+get_folder(CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex)
{
char *name;
struct stat st;
- name = g_strdup_printf ("%s%s", CAMEL_SERVICE (store)->url->path,
- folder_name);
+ name = g_strdup_printf("%s%s", CAMEL_SERVICE(store)->url->path, folder_name);
- if (stat (name, &st) == -1) {
+ if (stat(name, &st) == -1) {
int fd;
if (errno != ENOENT) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- "Could not open file `%s':"
- "\n%s", name,
- g_strerror (errno));
- g_free (name);
+ camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
+ "Could not open file `%s':"
+ "\n%s", name,
+ g_strerror(errno));
+ g_free(name);
return NULL;
}
- if (!create) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
- "Folder `%s' does not exist.",
- folder_name);
- g_free (name);
+ 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);
return NULL;
}
- fd = open (name, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
+ fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0600);
if (fd == -1) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
- "Could not create file `%s':"
- "\n%s", name,
- g_strerror (errno));
- g_free (name);
+ camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
+ "Could not create file `%s':"
+ "\n%s", name,
+ g_strerror(errno));
+ g_free(name);
return NULL;
}
- g_free (name);
- close (fd);
- } else if (!S_ISREG (st.st_mode)) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
- "`%s' is not a regular file.",
- name);
- g_free (name);
+ g_free(name);
+ close(fd);
+ } else if (!S_ISREG(st.st_mode)) {
+ camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
+ "`%s' is not a regular file.",
+ name);
+ g_free(name);
return NULL;
} else
- g_free (name);
+ g_free(name);
- return camel_mbox_folder_new (store, folder_name, ex);
+ return camel_mbox_folder_new(store, folder_name, flags, ex);
}
static void
diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c
index 18d889ee84..c037b6000e 100644
--- a/camel/providers/mbox/camel-mbox-summary.c
+++ b/camel/providers/mbox/camel-mbox-summary.c
@@ -228,10 +228,10 @@ message_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
mbi->frompos = camel_mime_parser_tell_start_from(mp);
/* do we want to index this message as we add it, as well? */
- if (mbs->index_force
- || (mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0
- || !ibex_contains_name(mbs->index, mi->uid)) {
-
+ if (mbs->index
+ && (mbs->index_force
+ || (mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0
+ || !ibex_contains_name(mbs->index, mi->uid))) {
camel_folder_summary_set_index(s, mbs->index);
} else {
camel_folder_summary_set_index(s, NULL);
@@ -387,7 +387,7 @@ camel_mbox_summary_load(CamelMboxSummary *mbs, int forceindex)
for (i = 0; i < camel_folder_summary_count(s); i++) {
CamelMessageInfo *mi = camel_folder_summary_index(s, i);
- if (!ibex_contains_name(mbs->index, mi->uid)) {
+ if (mbs->index && !ibex_contains_name(mbs->index, mi->uid)) {
minstart = ((CamelMboxMessageInfo *) mi)->frompos;
printf("Found unindexed message: %s\n", mi->uid);
break;