dovecot: Added mail_get_keyword_indexes()
dovecot at dovecot.org
dovecot at dovecot.org
Sun Dec 9 19:59:07 EET 2007
details: http://hg.dovecot.org/dovecot/rev/58b8daf695bf
changeset: 6985:58b8daf695bf
user: Timo Sirainen <tss at iki.fi>
date: Sun Dec 09 19:57:14 2007 +0200
description:
Added mail_get_keyword_indexes()
diffstat:
10 files changed, 39 insertions(+), 24 deletions(-)
src/lib-storage/index/cydir/cydir-mail.c | 1
src/lib-storage/index/dbox/dbox-mail.c | 1
src/lib-storage/index/index-mail.c | 44 +++++++++++---------------
src/lib-storage/index/index-mail.h | 3 +
src/lib-storage/index/maildir/maildir-mail.c | 1
src/lib-storage/index/mbox/mbox-mail.c | 1
src/lib-storage/index/raw/raw-mail.c | 1
src/lib-storage/mail-storage-private.h | 2 +
src/lib-storage/mail-storage.h | 2 +
src/lib-storage/mail.c | 7 ++++
diffs (185 lines):
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/cydir/cydir-mail.c
--- 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 @@ struct mail_vfuncs cydir_mail_vfuncs = {
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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/dbox/dbox-mail.c
--- 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 @@ struct mail_vfuncs dbox_mail_vfuncs = {
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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/index-mail.c
--- 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 @@ enum mail_flags index_mail_get_flags(str
return data->flags;
}
-static const char *const *
-index_mail_get_keywords_real(struct index_mail *mail)
-{
- static const char *const no_keywords[] = { NULL };
- struct index_mail_data *data = &mail->data;
- ARRAY_TYPE(keyword_indexes) keyword_indexes_arr;
+const char *const *index_mail_get_keywords(struct mail *_mail)
+{
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct index_mail_data *data = &mail->data;
const char *const *names;
const unsigned int *keyword_indexes;
unsigned int i, count, names_count;
@@ -140,16 +138,11 @@ index_mail_get_keywords_real(struct inde
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);
-
- keyword_indexes = array_get(&keyword_indexes_arr, &count);
- if (count == 0)
- return no_keywords;
-
+ (void)index_mail_get_keyword_indexes(_mail);
+
+ 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 @@ index_mail_get_keywords_real(struct inde
return array_idx(&data->keywords, 0);
}
-const char *const *index_mail_get_keywords(struct mail *_mail)
-{
- struct index_mail *mail = (struct index_mail *)_mail;
- const char *const *ret;
-
- T_FRAME(
- ret = index_mail_get_keywords_real(mail);
- );
- return ret;
+const ARRAY_TYPE(keyword_indexes) *
+index_mail_get_keyword_indexes(struct mail *_mail)
+{
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct index_mail_data *data = &mail->data;
+
+ 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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/index-mail.h
--- 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 index_mail_data {
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 @@ int index_mail_get_header_stream(struct
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);
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/maildir/maildir-mail.c
--- 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 @@ struct mail_vfuncs maildir_mail_vfuncs =
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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/mbox/mbox-mail.c
--- 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 @@ struct mail_vfuncs mbox_mail_vfuncs = {
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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/index/raw/raw-mail.c
--- 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 @@ struct mail_vfuncs raw_mail_vfuncs = {
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,
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/mail-storage-private.h
--- 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 @@ struct mail_vfuncs {
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);
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/mail-storage.h
--- 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 ma
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);
diff -r 45e07aee9aa2 -r 58b8daf695bf src/lib-storage/mail.c
--- 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
@@ -45,6 +45,13 @@ const char *const *mail_get_keywords(str
struct mail_private *p = (struct mail_private *)mail;
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)
More information about the dovecot-cvs
mailing list