changeset 12600:ba3c0ee558f5

imapc: Added support for keywords.
author Timo Sirainen <tss@iki.fi>
date Tue, 25 Jan 2011 17:15:54 +0200
parents 513e6e0b27ed
children 1413a0fa9ae7
files src/lib-storage/index/imapc/imapc-mailbox.c
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mailbox.c	Mon Jan 24 00:42:29 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-mailbox.c	Tue Jan 25 17:15:54 2011 +0200
@@ -74,6 +74,7 @@
 	enum mail_flags flags;
 	uint32_t uid, old_count;
 	unsigned int i, j;
+	ARRAY_TYPE(const_string) keywords;
 	bool seen_flags = FALSE;
 
 	if (mbox == NULL || seq == 0 || !imap_arg_get_list(reply->args, &list))
@@ -92,12 +93,17 @@
 			if (!imap_arg_get_list(&list[i+1], &flags_list))
 				return;
 
+			t_array_init(&keywords, 8);
 			seen_flags = TRUE;
 			for (j = 0; flags_list[j].type != IMAP_ARG_EOL; j++) {
 				if (!imap_arg_get_atom(&flags_list[j], &atom))
 					return;
 				if (atom[0] == '\\')
 					flags |= imap_parse_system_flag(atom);
+				else {
+					/* keyword */
+					array_append(&keywords, &atom, 1);
+				}
 			}
 		}
 	}
@@ -123,6 +129,16 @@
 		mail_index_update_flags(mbox->delayed_sync_trans, seq,
 					MODIFY_REPLACE, flags);
 	}
+	if (seen_flags) {
+		struct mail_keywords *kw;
+
+		(void)array_append_space(&keywords);
+		kw = mail_index_keywords_create(mbox->box.index,
+						array_idx(&keywords, 0));
+		mail_index_update_keywords(mbox->delayed_sync_trans, seq,
+					   MODIFY_REPLACE, kw);
+		mail_index_keywords_unref(&kw);
+	}
 	imapc_mailbox_idle_notify(mbox);
 }