diff options
author | Not Zed <NotZed@HelixCode.com> | 2000-11-30 19:05:36 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2000-11-30 19:05:36 +0800 |
commit | 1fbfdbd43e88e490ea11d56a3abde4631dab8cb5 (patch) | |
tree | 540ed9a6001f488d2f8918a8de07ea3f4acbae3b /camel/providers/local/camel-local-summary.c | |
parent | a49aa686202136919d0988b81790c8b2b4a57e92 (diff) | |
download | gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar.gz gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar.bz2 gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar.lz gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar.xz gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.tar.zst gsoc2013-evolution-1fbfdbd43e88e490ea11d56a3abde4631dab8cb5.zip |
Remove assertion that content is there, when it no longer can be.
2000-11-30 Not Zed <NotZed@HelixCode.com>
* providers/local/camel-mbox-folder.c (mbox_get_message): Remove
assertion that content is there, when it no longer can be.
* camel-folder-summary.h: Removed pos/bodypos/endpos from
camelmeessagecontentinfo.
(CamelMessageFlags): Added an attachments flag.
* providers/local/camel-local-summary.h: Added load virtual
function.
* tests/lib/folders.c (test_message_info): Accessors.
(test_folder_message): "
* camel-folder-thread.c (get_root_subject): Fix accessors.
(dump_tree_rec): "
* camel-folder-search.c (camel_folder_search_execute_expression):
Accessors for messageinfo.
(search_match_all): "
(search_header_contains): "
(search_header_contains): "
(search_body_contains): "
(camel_folder_search_execute_expression): Use mepool_strdup.
* providers/local/camel-mbox-summary.c (summary_update): Accessors
for messageinfo.
(mbox_summary_sync_full): "
* providers/local/camel-mh-summary.c (remove_summary): Accessors
for messageinfo.
(mh_summary_check): "
(mh_summary_sync_message): "
(mh_summary_sync): "
* providers/local/camel-mh-folder.c (mh_append_message): Use
accessor for uid.
* providers/local/camel-local-summary.c
(local_summary_decode_x_evolution): Use accessor to uid.
(local_summary_encode_x_evolution): Likewise.
(message_info_new): And here.
(camel_local_summary_load): Call virtual load function.
(local_summary_load): Default load function, load summary.
(camel_local_summary_load): Check file exists before trying to
load.
(camel_local_summary_construct): Turn off building content info!
(CAMEL_LOCAL_SUMMARY_VERSION): Bump, since we dont build content
info anymore.
(camel_local_summary_load): After a successful load/check, do a
save too so we dont have to go through it again randomly.
* providers/nntp/camel-nntp-utils.c (get_XOVER_headers): Use
accessors for messageinfo.
* providers/nntp/camel-nntp-folder.c (nntp_folder_get_uids): Use
accessors for uid.
* providers/imap/camel-imap-folder.c (imap_refresh_info): Use
accessor for uid.
(imap_sync): Likewise.
(imap_get_uids): Likewise.
(imap_update_summary): And here.
* providers/vee/camel-vee-folder.c (vfolder_remove_match): Use
accessor for uid.
(vfolder_add_match): Handle estrv stuff.
(vfolder_change_match): Accessor for uid.
(get_real_message): "
(vee_get_uids): "
(vee_folder_build): " + estrv.
(vee_folder_build_folder): "
* providers/local/camel-maildir-folder.c (maildir_append_message):
Use acccessors for uid's.
(maildir_get_message): Here too.
* providers/local/camel-maildir-summary.c
(camel_maildir_summary_init): Setup the string count for us.
(message_info_new): Access the string array directly.
(message_info_free): No need to free string if using array.
(camel_maildir_summary_info_to_name): Use accessor to get to uid.
(remove_summary): And here.
(maildir_summary_check): Likewise.
(maildir_summary_sync): And here.
(maildir_summary_load): Load up a cache of uid->filename mappings
before loading the actual summary file. This saves us having to
waste the diskspace storing the filenames in the summary itself,
and also helps us sync the summary better on load.
(message_info_load): If we have the load_map setup, and the uid
exists, then set the filename cache from it, and update the flags
from the name, incase our summary mismatches it.
* camel-folder-summary.c (camel_folder_summary_init): Setup string
count for compressed info record. An optional compile mode which
stores all strings for a given messageinfo into a packed array,
which should save 36-50 bytes/record.
(camel_folder_summary_info_new): Init the string array.
(message_info_new): Set the string array items, as required.
(message_info_load): And here too.
(message_info_save): Use accessors to get to strings.
(message_info_free): Free strings as one.
(camel_message_info_dup_to): Handle packed array case.
(camel_folder_summary_add): Use accessors. And pack the strv
before storing it.
(summary_assign_uid): New function to assign a unique uid to a
message, if it doesn't have one.
(camel_folder_summary_add): Call assign_uid instead of doing it
ourselves.
(camel_folder_summary_info_new_from_parser): "
(camel_folder_summary_info_new_from_message): "
(camel_folder_summary_encode_string): constify.
(camel_folder_summary_encode_token): "
(summary_build_content_info_message): Fix accessors to messageinfo.
(CAMEL_FOLDER_SUMMARY_VERSION): Bumped, for removal of
contentinfo->pos data.
(camel_folder_summary_info_new_from_parser): Calculate the size
based on the parser position, not the removed contentinfo stuff.
(camel_folder_summary_info_new_from_message): Remove size stuff.
(camel_folder_summary_offset_content): Removed, no longer means anything.
(content_info_new):
(content_info_load):
(content_info_save):
(summary_build_content_info): Remove stuff for contentinfo->pos*.
(summary_build_content_info): Take a msginfo argument, set
attachments flag if we find any attachments.
(summary_build_content_info_message): set attachments flag if we
find any attachments.
(camel_folder_summary_info_new_from_parser): Always scan the
content info, even if we dont save it.
(camel_folder_summary_info_new_from_message): And here too.
(summary_build_content_info): Only create the contentinfo stuff if
we have it turned on, otherwise just parse and discard.
(summary_build_content_info_message): Likewise.
svn path=/trunk/; revision=6731
Diffstat (limited to 'camel/providers/local/camel-local-summary.c')
-rw-r--r-- | camel/providers/local/camel-local-summary.c | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/camel/providers/local/camel-local-summary.c b/camel/providers/local/camel-local-summary.c index 83b0e6313b..5e47ee35c3 100644 --- a/camel/providers/local/camel-local-summary.c +++ b/camel/providers/local/camel-local-summary.c @@ -35,7 +35,7 @@ #define io(x) #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/ -#define CAMEL_LOCAL_SUMMARY_VERSION (0x100) +#define CAMEL_LOCAL_SUMMARY_VERSION (0x200) struct _CamelLocalSummaryPrivate { }; @@ -59,6 +59,7 @@ static int message_info_save (CamelFolderSummary *, FILE *, CamelMessageInfo static int local_summary_decode_x_evolution(CamelLocalSummary *cls, const char *xev, CamelMessageInfo *mi); static char *local_summary_encode_x_evolution(CamelLocalSummary *cls, const CamelMessageInfo *mi); +static int local_summary_load(CamelLocalSummary *cls, int forceindex, CamelException *ex); static int local_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, CamelException *ex); static int local_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex); static CamelMessageInfo *local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *, CamelException *ex); @@ -105,6 +106,7 @@ camel_local_summary_class_init(CamelLocalSummaryClass *klass) sklass->message_info_save = message_info_save;*/ /*sklass->message_info_free = message_info_free;*/ + klass->load = local_summary_load; klass->check = local_summary_check; klass->sync = local_summary_sync; klass->add = local_summary_add; @@ -140,20 +142,42 @@ camel_local_summary_finalise(CamelObject *obj) void camel_local_summary_construct(CamelLocalSummary *new, const char *filename, const char *local_name, ibex *index) { - camel_folder_summary_set_build_content(CAMEL_FOLDER_SUMMARY(new), TRUE); + camel_folder_summary_set_build_content(CAMEL_FOLDER_SUMMARY(new), FALSE); camel_folder_summary_set_filename(CAMEL_FOLDER_SUMMARY(new), filename); new->folder_path = g_strdup(local_name); new->index = index; } +static int +local_summary_load(CamelLocalSummary *cls, int forceindex, CamelException *ex) +{ + return camel_folder_summary_load((CamelFolderSummary *)cls); +} + /* load/check the summary */ int camel_local_summary_load(CamelLocalSummary *cls, int forceindex, CamelException *ex) { - if (forceindex || camel_folder_summary_load((CamelFolderSummary *)cls) == -1) { + struct stat st; + CamelFolderSummary *s = (CamelFolderSummary *)cls; + + d(printf("Loading summary ...\n")); + + if (forceindex + || stat(s->summary_path, &st) == -1 + || ((CamelLocalSummaryClass *)(CAMEL_OBJECT_GET_CLASS(cls)))->load(cls, forceindex, ex) == -1) { camel_folder_summary_clear((CamelFolderSummary *)cls); } - return camel_local_summary_check(cls, NULL, ex); + + if (camel_local_summary_check(cls, NULL, ex) == 0) { + if (camel_folder_summary_save(s) == -1) + g_warning("Could not save summary for %s: %s", cls->folder_path, strerror(errno)); + if (cls->index && ibex_save(cls->index) == -1) + g_warning("Could not sync index for %s: %s", cls->folder_path, strerror(errno)); + + return 0; + } + return -1; } char * @@ -322,7 +346,8 @@ camel_local_summary_write_headers(int fd, struct _header_raw *header, char *xevl } while (header) { - if (strcasecmp(header->name, "X-Evolution")) { + if (strcmp(header->name, "X-Evolution")) { + printf("writing header: '%s'\n", header->name); len = fprintf(out, "%s:%s\n", header->name, header->value); if (len == -1) { fclose(out); @@ -439,7 +464,7 @@ local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMess xev = camel_local_summary_encode_x_evolution(cls, mi); camel_medium_set_header((CamelMedium *)msg, "X-Evolution", xev); g_free(xev); - camel_folder_change_info_add_uid(ci, mi->uid); + camel_folder_change_info_add_uid(ci, camel_message_info_uid(mi)); } else { d(printf("Failed!\n")); camel_exception_set(ex, 1, "Unable to add message to summary: unknown reason"); @@ -455,18 +480,19 @@ local_summary_encode_x_evolution(CamelLocalSummary *cls, const CamelMessageInfo GString *val = g_string_new(""); CamelFlag *flag = mi->user_flags; CamelTag *tag = mi->user_tags; - char *ret, *p; + char *ret; + const char *p, *uidstr; guint32 uid; /* FIXME: work out what to do with uid's that aren't stored here? */ /* FIXME: perhaps make that a mbox folder only issue?? */ - p = mi->uid; + p = uidstr = camel_message_info_uid(mi); while (*p && isdigit(*p)) p++; - if (*p == 0 && sscanf(mi->uid, "%u", &uid) == 1) { + if (*p == 0 && sscanf(uidstr, "%u", &uid) == 1) { g_string_sprintf(out, "%08x-%04x", uid, mi->flags & 0xffff); } else { - g_string_sprintf(out, "%s-%04x", mi->uid, mi->flags & 0xffff); + g_string_sprintf(out, "%s-%04x", uidstr, mi->flags & 0xffff); } if (flag || tag) { @@ -517,8 +543,7 @@ local_summary_decode_x_evolution(CamelLocalSummary *cls, const char *xev, CamelM char uidstr[20]; if (mi) { sprintf(uidstr, "%u", uid); - g_free(mi->uid); - mi->uid = g_strdup(uidstr); + camel_message_info_set_uid(mi, g_strdup(uidstr)); mi->flags = flags; } } else { @@ -579,7 +604,7 @@ message_info_new(CamelFolderSummary *s, struct _header_raw *h) if (xev==NULL || camel_local_summary_decode_x_evolution(cls, xev, mi) == -1) { /* to indicate it has no xev header */ mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED | CAMEL_MESSAGE_FOLDER_NOXEV; - mi->uid = camel_folder_summary_next_uid_string(s); + camel_message_info_set_uid(mi, camel_folder_summary_next_uid_string(s)); /* shortcut, no need to look it up in the index library */ doindex = TRUE; @@ -588,11 +613,11 @@ message_info_new(CamelFolderSummary *s, struct _header_raw *h) if (cls->index && (doindex || cls->index_force - || !ibex_contains_name(cls->index, mi->uid))) { - d(printf("Am indexing message %s\n", mi->uid)); + || !ibex_contains_name(cls->index, (char *)camel_message_info_uid(mi)))) { + d(printf("Am indexing message %s\n", camel_message_info_uid(mi))); camel_folder_summary_set_index(s, cls->index); } else { - d(printf("Not indexing message %s\n", mi->uid)); + d(printf("Not indexing message %s\n", camel_message_info_uid(mi))); camel_folder_summary_set_index(s, NULL); } } |