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