Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6985:58b8daf695bf HEAD
Added mail_get_keyword_indexes()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 09 Dec 2007 19:57:14 +0200 |
parents | 45e07aee9aa2 |
children | a421767d29ba |
files | src/lib-storage/index/cydir/cydir-mail.c src/lib-storage/index/dbox/dbox-mail.c src/lib-storage/index/index-mail.c src/lib-storage/index/index-mail.h src/lib-storage/index/maildir/maildir-mail.c src/lib-storage/index/mbox/mbox-mail.c src/lib-storage/index/raw/raw-mail.c src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.h src/lib-storage/mail.c |
diffstat | 10 files changed, 33 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/cydir/cydir-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -121,6 +121,7 @@ index_mail_get_flags, index_mail_get_keywords, + index_mail_get_keyword_indexes, index_mail_get_parts, index_mail_get_date, cydir_mail_get_received_date,
--- a/src/lib-storage/index/dbox/dbox-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/dbox/dbox-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -208,6 +208,7 @@ index_mail_get_flags, index_mail_get_keywords, + index_mail_get_keyword_indexes, index_mail_get_parts, index_mail_get_date, dbox_mail_get_received_date,
--- a/src/lib-storage/index/index-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/index-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -127,12 +127,10 @@ return data->flags; } -static const char *const * -index_mail_get_keywords_real(struct index_mail *mail) +const char *const *index_mail_get_keywords(struct mail *_mail) { - static const char *const no_keywords[] = { NULL }; + struct index_mail *mail = (struct index_mail *)_mail; struct index_mail_data *data = &mail->data; - ARRAY_TYPE(keyword_indexes) keyword_indexes_arr; const char *const *names; const unsigned int *keyword_indexes; unsigned int i, count, names_count; @@ -140,16 +138,11 @@ if (array_is_created(&data->keywords)) return array_idx(&data->keywords, 0); - t_array_init(&keyword_indexes_arr, 128); - mail_index_lookup_keywords(mail->ibox->view, mail->data.seq, - &keyword_indexes_arr); + (void)index_mail_get_keyword_indexes(_mail); - keyword_indexes = array_get(&keyword_indexes_arr, &count); - if (count == 0) - return no_keywords; - + keyword_indexes = array_get(&data->keyword_indexes, &count); names = array_get(mail->ibox->keyword_names, &names_count); - p_array_init(&data->keywords, mail->data_pool, count); + p_array_init(&data->keywords, mail->data_pool, count + 1); for (i = 0; i < count; i++) { const char *name; i_assert(keyword_indexes[i] < names_count); @@ -163,15 +156,18 @@ return array_idx(&data->keywords, 0); } -const char *const *index_mail_get_keywords(struct mail *_mail) +const ARRAY_TYPE(keyword_indexes) * +index_mail_get_keyword_indexes(struct mail *_mail) { struct index_mail *mail = (struct index_mail *)_mail; - const char *const *ret; + struct index_mail_data *data = &mail->data; - T_FRAME( - ret = index_mail_get_keywords_real(mail); - ); - return ret; + if (!array_is_created(&data->keyword_indexes)) { + p_array_init(&data->keyword_indexes, mail->data_pool, 32); + mail_index_lookup_keywords(mail->ibox->view, mail->data.seq, + &data->keyword_indexes); + } + return &data->keyword_indexes; } int index_mail_get_parts(struct mail *_mail,
--- a/src/lib-storage/index/index-mail.h Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/index-mail.h Sun Dec 09 19:57:14 2007 +0200 @@ -90,6 +90,7 @@ struct message_parser_ctx *parser_ctx; int parsing_count; ARRAY_TYPE(keywords) keywords; + ARRAY_TYPE(keyword_indexes) keyword_indexes; unsigned int save_sent_date:1; unsigned int sent_date_parsed:1; @@ -167,6 +168,8 @@ enum mail_flags index_mail_get_flags(struct mail *_mail); const char *const *index_mail_get_keywords(struct mail *_mail); +const ARRAY_TYPE(keyword_indexes) * +index_mail_get_keyword_indexes(struct mail *_mail); int index_mail_get_parts(struct mail *_mail, const struct message_part **parts_r); int index_mail_get_received_date(struct mail *_mail, time_t *date_r);
--- a/src/lib-storage/index/maildir/maildir-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/maildir/maildir-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -419,6 +419,7 @@ index_mail_get_flags, index_mail_get_keywords, + index_mail_get_keyword_indexes, index_mail_get_parts, index_mail_get_date, maildir_mail_get_received_date,
--- a/src/lib-storage/index/mbox/mbox-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/mbox/mbox-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -271,6 +271,7 @@ index_mail_get_flags, index_mail_get_keywords, + index_mail_get_keyword_indexes, index_mail_get_parts, index_mail_get_date, mbox_mail_get_received_date,
--- a/src/lib-storage/index/raw/raw-mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/index/raw/raw-mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -109,6 +109,7 @@ index_mail_get_flags, index_mail_get_keywords, + index_mail_get_keyword_indexes, index_mail_get_parts, index_mail_get_date, raw_mail_get_received_date,
--- a/src/lib-storage/mail-storage-private.h Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/mail-storage-private.h Sun Dec 09 19:57:14 2007 +0200 @@ -208,6 +208,8 @@ enum mail_flags (*get_flags)(struct mail *mail); const char *const *(*get_keywords)(struct mail *mail); + const ARRAY_TYPE(keyword_indexes) * + (*get_keyword_indexes)(struct mail *mail); int (*get_parts)(struct mail *mail, const struct message_part **parts_r);
--- a/src/lib-storage/mail-storage.h Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/mail-storage.h Sun Dec 09 19:57:14 2007 +0200 @@ -412,6 +412,8 @@ enum mail_flags mail_get_flags(struct mail *mail); /* Returns message's keywords */ const char *const *mail_get_keywords(struct mail *mail); +/* Returns message's keywords */ +const ARRAY_TYPE(keyword_indexes) *mail_get_keyword_indexes(struct mail *mail); /* Returns message's MIME parts */ int mail_get_parts(struct mail *mail, const struct message_part **parts_r);
--- a/src/lib-storage/mail.c Sun Dec 09 19:56:45 2007 +0200 +++ b/src/lib-storage/mail.c Sun Dec 09 19:57:14 2007 +0200 @@ -47,6 +47,13 @@ return p->v.get_keywords(mail); } +const ARRAY_TYPE(keyword_indexes) *mail_get_keyword_indexes(struct mail *mail) +{ + struct mail_private *p = (struct mail_private *)mail; + + return p->v.get_keyword_indexes(mail); +} + int mail_get_parts(struct mail *mail, const struct message_part **parts_r) { struct mail_private *p = (struct mail_private *)mail;