dovecot-1.2: Added mail_index_lookup_view_flags()

dovecot at dovecot.org dovecot at dovecot.org
Tue Mar 31 03:27:19 EEST 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/629004d13ec4
changeset: 8875:629004d13ec4
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Mar 30 20:27:02 2009 -0400
description:
Added mail_index_lookup_view_flags()

diffstat:

2 files changed, 39 insertions(+), 11 deletions(-)
src/lib-index/mail-index-view.c |   44 +++++++++++++++++++++++++++++----------
src/lib-index/mail-index.h      |    6 +++++

diffs (85 lines):

diff -r 6cc8ee6080ed -r 629004d13ec4 src/lib-index/mail-index-view.c
--- a/src/lib-index/mail-index-view.c	Mon Mar 30 16:18:25 2009 -0400
+++ b/src/lib-index/mail-index-view.c	Mon Mar 30 20:27:02 2009 -0400
@@ -389,25 +389,30 @@ static void view_lookup_keywords(struct 
 	mail_index_data_lookup_keywords(map, data, keyword_idx);
 }
 
+static const void *
+view_map_lookup_ext_full(struct mail_index_map *map,
+			 const struct mail_index_record *rec, uint32_t ext_id)
+{
+	const struct mail_index_ext *ext;
+	uint32_t idx;
+
+	if (!mail_index_map_get_ext_idx(map, ext_id, &idx))
+		return NULL;
+
+	ext = array_idx(&map->extensions, idx);
+	return ext->record_offset == 0 ? NULL :
+		CONST_PTR_OFFSET(rec, ext->record_offset);
+}
+
 static void
 view_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
 		     uint32_t ext_id, struct mail_index_map **map_r,
 		     const void **data_r, bool *expunged_r)
 {
-	const struct mail_index_ext *ext;
 	const struct mail_index_record *rec;
-	uint32_t idx, offset;
 
 	rec = view->v.lookup_full(view, seq, map_r, expunged_r);
-	if (!mail_index_map_get_ext_idx(*map_r, ext_id, &idx)) {
-		*data_r = NULL;
-		return;
-	}
-
-	ext = array_idx(&(*map_r)->extensions, idx);
-	offset = ext->record_offset;
-
-	*data_r = offset == 0 ? NULL : CONST_PTR_OFFSET(rec, offset);
+	*data_r = view_map_lookup_ext_full(*map_r, rec, ext_id);
 }
 
 static void view_get_header_ext(struct mail_index_view *view,
@@ -522,6 +527,23 @@ void mail_index_lookup_keywords(struct m
 				ARRAY_TYPE(keyword_indexes) *keyword_idx)
 {
 	view->v.lookup_keywords(view, seq, keyword_idx);
+}
+
+void mail_index_lookup_view_flags(struct mail_index_view *view, uint32_t seq,
+				  enum mail_flags *flags_r,
+				  ARRAY_TYPE(keyword_indexes) *keyword_idx)
+{
+	const struct mail_index_record *rec;
+	const unsigned char *keyword_data;
+
+	i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
+
+	rec = MAIL_INDEX_MAP_IDX(view->map, seq-1);
+	*flags_r = rec->flags;
+
+	keyword_data = view_map_lookup_ext_full(view->map, rec,
+						view->index->keywords_ext_id);
+	mail_index_data_lookup_keywords(view->map, keyword_data, keyword_idx);
 }
 
 void mail_index_lookup_uid(struct mail_index_view *view, uint32_t seq,
diff -r 6cc8ee6080ed -r 629004d13ec4 src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h	Mon Mar 30 16:18:25 2009 -0400
+++ b/src/lib-index/mail-index.h	Mon Mar 30 20:27:02 2009 -0400
@@ -343,6 +343,12 @@ void mail_index_lookup_keywords(struct m
 /* Return keywords from given map. */
 void mail_index_map_lookup_keywords(struct mail_index_map *map, uint32_t seq,
 				    ARRAY_TYPE(keyword_indexes) *keyword_idx);
+/* mail_index_lookup[_keywords]() returns the latest flag changes.
+   This function instead attempts to return the flags and keywords done by the
+   last view sync. */
+void mail_index_lookup_view_flags(struct mail_index_view *view, uint32_t seq,
+				  enum mail_flags *flags_r,
+				  ARRAY_TYPE(keyword_indexes) *keyword_idx);
 /* Returns the UID for given message. May be slightly faster than
    mail_index_lookup()->uid. */
 void mail_index_lookup_uid(struct mail_index_view *view, uint32_t seq,


More information about the dovecot-cvs mailing list