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;