Mercurial > dovecot > original-hg > dovecot-1.2
changeset 99:352c2567ba11 HEAD
Initial message flags weren't set from file name in maildir folders when new
mail was added (or when index was built first time).
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 29 Aug 2002 21:44:16 +0300 |
parents | bac5a44da22b |
children | 867ec80dbf42 |
files | src/lib-index/maildir/maildir-build.c src/lib-index/maildir/maildir-index.c src/lib-index/maildir/maildir-index.h src/lib-index/maildir/maildir-sync.c |
diffstat | 4 files changed, 49 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/maildir/maildir-build.c Thu Aug 29 21:29:29 2002 +0300 +++ b/src/lib-index/maildir/maildir-build.c Thu Aug 29 21:44:16 2002 +0300 @@ -60,6 +60,9 @@ if (rec == NULL) return FALSE; + /* set message flags from file name */ + rec->msg_flags = maildir_filename_get_flags(fname, 0); + update = index->update_begin(index, rec); /* set the location */
--- a/src/lib-index/maildir/maildir-index.c Thu Aug 29 21:29:29 2002 +0300 +++ b/src/lib-index/maildir/maildir-index.c Thu Aug 29 21:44:16 2002 +0300 @@ -8,6 +8,49 @@ static MailIndex maildir_index; +MailFlags maildir_filename_get_flags(const char *fname, MailFlags default_flags) +{ + const char *info; + MailFlags flags; + + info = strchr(fname, ':'); + if (info == NULL || info[1] != '2' || info[2] != ',') + return default_flags; + + flags = 0; + for (info += 3; *info != '\0'; info++) { + switch (*info) { + case 'R': /* replied */ + flags |= MAIL_ANSWERED; + break; + case 'S': /* seen */ + flags |= MAIL_SEEN; + break; + case 'T': /* trashed */ + flags |= MAIL_DELETED; + break; + case 'D': /* draft */ + flags |= MAIL_DRAFT; + break; + case 'F': /* flagged */ + flags |= MAIL_FLAGGED; + break; + default: + if (*info >= 'a' && *info <= 'z') { + /* custom flag */ + flags |= 1 << (MAIL_CUSTOM_FLAG_1_BIT + + *info-'a'); + break; + } + + /* unknown flag - ignore */ + break; + } + } + + return flags; +} + const char *maildir_filename_set_flags(const char *fname, MailFlags flags) { const char *info, *oldflags;
--- a/src/lib-index/maildir/maildir-index.h Thu Aug 29 21:29:29 2002 +0300 +++ b/src/lib-index/maildir/maildir-index.h Thu Aug 29 21:44:16 2002 +0300 @@ -8,6 +8,8 @@ MailIndex *maildir_index_alloc(const char *dir); +MailFlags maildir_filename_get_flags(const char *fname, + MailFlags default_flags); const char *maildir_filename_set_flags(const char *fname, MailFlags flags); int maildir_index_rebuild(MailIndex *index);
--- a/src/lib-index/maildir/maildir-sync.c Thu Aug 29 21:29:29 2002 +0300 +++ b/src/lib-index/maildir/maildir-sync.c Thu Aug 29 21:44:16 2002 +0300 @@ -20,49 +20,11 @@ { MailIndexUpdate *update; MailFlags flags; - const char *info; int fd, failed; i_assert(fname != NULL); i_assert(path != NULL); - flags = rec->msg_flags; - - info = strchr(fname, ':'); - if (info != NULL && info[1] == '2' && info[2] == ',') { - /* update flags */ - flags = 0; - for (info += 3; *info != '\0'; info++) { - switch (*info) { - case 'R': /* replied */ - flags |= MAIL_ANSWERED; - break; - case 'S': /* seen */ - flags |= MAIL_SEEN; - break; - case 'T': /* trashed */ - flags |= MAIL_DELETED; - break; - case 'D': /* draft */ - flags |= MAIL_DRAFT; - break; - case 'F': /* flagged */ - flags |= MAIL_FLAGGED; - break; - default: - if (*info >= 'a' && *info <= 'z') { - /* custom flag */ - flags |= 1 << (MAIL_CUSTOM_FLAG_1_BIT + - *info-'a'); - break; - } - - /* unknown flag - ignore */ - break; - } - } - } - if (!index->set_lock(index, MAIL_LOCK_EXCLUSIVE)) return FALSE; @@ -90,6 +52,7 @@ /* update flags after filename has been updated, so it can be compared correctly */ + flags = maildir_filename_get_flags(fname, rec->msg_flags); if (!failed && flags != rec->msg_flags) { if (!index->update_flags(index, rec, seq, flags, TRUE)) failed = TRUE;