From: Timo Sirainen Date: Mon, 6 Dec 2010 03:28:29 +0000 (+0000) Subject: Moved fts/virtual plugin communication functions away from lib-storage. X-Git-Tag: 2.1.alpha1~442 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=499fec3443374cc89fb8c83b8027c1614097d7a3;p=thirdparty%2Fdovecot%2Fcore.git Moved fts/virtual plugin communication functions away from lib-storage. --- diff --git a/src/lib-storage/index/cydir/cydir-storage.c b/src/lib-storage/index/cydir/cydir-storage.c index 5570550c48..58309b5cef 100644 --- a/src/lib-storage/index/cydir/cydir-storage.c +++ b/src/lib-storage/index/cydir/cydir-storage.c @@ -160,9 +160,6 @@ struct mailbox cydir_mailbox = { index_storage_get_uid_range, index_storage_get_expunges, NULL, - NULL, - NULL, - NULL, index_mail_alloc, index_header_lookup_init, index_header_lookup_deinit, diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index f848fe5e5d..a9e4cdcb25 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -419,9 +419,6 @@ struct mailbox mdbox_mailbox = { index_storage_get_uid_range, index_storage_get_expunges, NULL, - NULL, - NULL, - NULL, dbox_mail_alloc, index_header_lookup_init, index_header_lookup_deinit, diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index e0c7cbf443..9249f953fe 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -386,9 +386,6 @@ struct mailbox sdbox_mailbox = { index_storage_get_uid_range, index_storage_get_expunges, NULL, - NULL, - NULL, - NULL, dbox_mail_alloc, index_header_lookup_init, index_header_lookup_deinit, diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index a822f48ab6..33f97d72e1 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -659,9 +659,6 @@ struct mailbox maildir_mailbox = { index_storage_get_seq_range, index_storage_get_uid_range, index_storage_get_expunges, - NULL, - NULL, - NULL, maildir_get_private_flags_mask, index_mail_alloc, index_header_lookup_init, diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 909ba53eb3..da226cf7b7 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -764,9 +764,6 @@ struct mailbox mbox_mailbox = { index_storage_get_uid_range, index_storage_get_expunges, NULL, - NULL, - NULL, - NULL, index_mail_alloc, index_header_lookup_init, index_header_lookup_deinit, diff --git a/src/lib-storage/index/raw/raw-storage.c b/src/lib-storage/index/raw/raw-storage.c index b6d4498dd0..73e6a56ea0 100644 --- a/src/lib-storage/index/raw/raw-storage.c +++ b/src/lib-storage/index/raw/raw-storage.c @@ -160,9 +160,6 @@ struct mailbox raw_mailbox = { index_storage_get_uid_range, index_storage_get_expunges, NULL, - NULL, - NULL, - NULL, index_mail_alloc, index_header_lookup_init, index_header_lookup_deinit, diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 6f53b7f500..02bfbe8fa4 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -162,16 +162,6 @@ struct mailbox_vfuncs { bool (*get_expunges)(struct mailbox *box, uint64_t prev_modseq, const ARRAY_TYPE(seq_range) *uids_filter, ARRAY_TYPE(mailbox_expunge_rec) *expunges); - bool (*get_virtual_uid)(struct mailbox *box, - const char *backend_mailbox, - uint32_t backend_uidvalidity, - uint32_t backend_uid, uint32_t *uid_r); - void (*get_virtual_backend_boxes)(struct mailbox *box, - ARRAY_TYPE(mailboxes) *mailboxes, - bool only_with_msgs); - void (*get_virtual_box_patterns)(struct mailbox *box, - ARRAY_TYPE(mailbox_virtual_patterns) *includes, - ARRAY_TYPE(mailbox_virtual_patterns) *excludes); enum mail_flags (*get_private_flags_mask)(struct mailbox *box); struct mail * diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 828913746e..db8b388ee9 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1034,42 +1034,6 @@ bool mailbox_get_expunges(struct mailbox *box, uint64_t prev_modseq, uids_filter, expunges); } -bool mailbox_get_virtual_uid(struct mailbox *box, const char *backend_mailbox, - uint32_t backend_uidvalidity, - uint32_t backend_uid, uint32_t *uid_r) -{ - if (box->v.get_virtual_uid == NULL) - return FALSE; - return box->v.get_virtual_uid(box, backend_mailbox, backend_uidvalidity, - backend_uid, uid_r); -} - -void mailbox_get_virtual_backend_boxes(struct mailbox *box, - ARRAY_TYPE(mailboxes) *mailboxes, - bool only_with_msgs) -{ - if (box->v.get_virtual_backend_boxes == NULL) - array_append(mailboxes, &box, 1); - else - box->v.get_virtual_backend_boxes(box, mailboxes, only_with_msgs); -} - -void mailbox_get_virtual_box_patterns(struct mailbox *box, - ARRAY_TYPE(mailbox_virtual_patterns) *includes, - ARRAY_TYPE(mailbox_virtual_patterns) *excludes) -{ - if (box->v.get_virtual_box_patterns == NULL) { - struct mailbox_virtual_pattern pat; - - memset(&pat, 0, sizeof(pat)); - pat.ns = box->list->ns; - pat.pattern = box->name; - array_append(includes, &pat, 1); - } else { - box->v.get_virtual_box_patterns(box, includes, excludes); - } -} - struct mailbox_header_lookup_ctx * mailbox_header_lookup_init(struct mailbox *box, const char *const headers[]) { diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index 08c616db26..baafbe41ee 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -464,22 +464,6 @@ void mailbox_get_uid_range(struct mailbox *box, bool mailbox_get_expunges(struct mailbox *box, uint64_t prev_modseq, const ARRAY_TYPE(seq_range) *uids_filter, ARRAY_TYPE(mailbox_expunge_rec) *expunges); -/* If box is a virtual mailbox, look up UID for the given backend message. - Returns TRUE if found, FALSE if not. */ -bool mailbox_get_virtual_uid(struct mailbox *box, const char *backend_mailbox, - uint32_t backend_uidvalidity, - uint32_t backend_uid, uint32_t *uid_r); -/* If box is a virtual mailbox, return all backend mailboxes. If - only_with_msgs=TRUE, return only those mailboxes that have at least one - message existing in the virtual mailbox. */ -void mailbox_get_virtual_backend_boxes(struct mailbox *box, - ARRAY_TYPE(mailboxes) *mailboxes, - bool only_with_msgs); -/* If mailbox is a virtual mailbox, return all mailbox list patterns that - are used to figure out which mailboxes belong to the virtual mailbox. */ -void mailbox_get_virtual_box_patterns(struct mailbox *box, - ARRAY_TYPE(mailbox_virtual_patterns) *includes, - ARRAY_TYPE(mailbox_virtual_patterns) *excludes); /* Initialize new search request. charset specifies the character set used in the search argument strings. If sort_program is non-NULL, the messages are diff --git a/src/lib-storage/test-mailbox.c b/src/lib-storage/test-mailbox.c index 9c8a0e1e0a..c1c1abeb86 100644 --- a/src/lib-storage/test-mailbox.c +++ b/src/lib-storage/test-mailbox.c @@ -303,9 +303,6 @@ struct mailbox test_mailbox = { test_mailbox_get_uid_range, test_mailbox_get_expunged_uids, NULL, - NULL, - NULL, - NULL, test_mailbox_mail_alloc, test_mailbox_header_lookup_init, test_mailbox_header_lookup_deinit, diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index 17050ee460..29fc412203 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -7,6 +7,7 @@ #include "unichar.h" #include "mail-storage-private.h" #include "mail-namespace.h" +#include "fts-mailbox.h" #include "solr-connection.h" #include "fts-solr-plugin.h" @@ -452,7 +453,7 @@ fts_backend_solr_filter_mailboxes(struct fts_backend *_backend, t_array_init(&includes_arr, 16); t_array_init(&excludes_arr, 16); - mailbox_get_virtual_box_patterns(box, &includes_arr, &excludes_arr); + fts_mailbox_get_virtual_box_patterns(box, &includes_arr, &excludes_arr); includes = array_get(&includes_arr, &inc_count); excludes = array_get(&excludes_arr, &exc_count); i_assert(inc_count > 0); @@ -783,8 +784,8 @@ static bool solr_virtual_uid_map(const char *ns_prefix, const char *mailbox, for (; ns != NULL; ns = ns->alias_chain_next) { vname = convert_inbox ? ns->prefix : mail_namespace_get_vname(ns, ctx->vname, mailbox); - if (mailbox_get_virtual_uid(ctx->box, vname, uidvalidity, - *uid, uid)) + if (fts_mailbox_get_virtual_uid(ctx->box, vname, uidvalidity, + *uid, uid)) return TRUE; } return FALSE; diff --git a/src/plugins/fts/Makefile.am b/src/plugins/fts/Makefile.am index 98c92de00f..98bde0e7aa 100644 --- a/src/plugins/fts/Makefile.am +++ b/src/plugins/fts/Makefile.am @@ -3,7 +3,8 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib-charset \ -I$(top_srcdir)/src/lib-mail \ -I$(top_srcdir)/src/lib-index \ - -I$(top_srcdir)/src/lib-storage + -I$(top_srcdir)/src/lib-storage \ + -I$(top_srcdir)/src/lib-storage/index lib20_fts_plugin_la_LDFLAGS = -module -avoid-version @@ -12,6 +13,7 @@ module_LTLIBRARIES = \ lib20_fts_plugin_la_SOURCES = \ fts-api.c \ + fts-mailbox.c \ fts-plugin.c \ fts-search.c \ fts-storage.c @@ -19,5 +21,6 @@ lib20_fts_plugin_la_SOURCES = \ noinst_HEADERS = \ fts-api.h \ fts-api-private.h \ + fts-mailbox.h \ fts-plugin.h \ fts-storage.h diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index 69b2011682..1fc50b1c52 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -13,6 +13,7 @@ #include "mail-search-build.h" #include "mail-storage-private.h" #include "fts-api-private.h" +#include "fts-mailbox.h" #include "fts-storage.h" #include "fts-plugin.h" @@ -453,7 +454,7 @@ static int fts_build_init_virtual(struct fts_search_context *fctx) int ret; t_array_init(&mailboxes, 64); - mailbox_get_virtual_backend_boxes(fctx->t->box, &mailboxes, TRUE); + fts_mailbox_get_virtual_backend_boxes(fctx->t->box, &mailboxes, TRUE); boxes = array_get_modifiable(&mailboxes, &box_count); vctx->pool = pool_alloconly_create("fts virtual build", 1024); diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index a49582ee47..f78bbd5ea0 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -29,6 +29,7 @@ struct virtual_mailbox_list { extern struct mail_storage virtual_storage; extern struct mailbox virtual_mailbox; +extern struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs; struct virtual_storage_module virtual_storage_module = MODULE_CONTEXT_INIT(&mail_storage_module_register); @@ -234,6 +235,7 @@ virtual_mailbox_alloc(struct mail_storage *_storage, struct mailbox_list *list, mbox->box.storage = _storage; mbox->box.list = list; mbox->box.mail_vfuncs = &virtual_mail_vfuncs; + mbox->vfuncs = virtual_mailbox_vfuncs; index_storage_mailbox_alloc(&mbox->box, name, flags, VIRTUAL_INDEX_PREFIX); @@ -530,9 +532,6 @@ struct mailbox virtual_mailbox = { index_storage_get_seq_range, index_storage_get_uid_range, index_storage_get_expunges, - virtual_get_virtual_uid, - virtual_get_virtual_backend_boxes, - virtual_get_virtual_box_patterns, NULL, virtual_mail_alloc, index_header_lookup_init, @@ -551,3 +550,9 @@ struct mailbox virtual_mailbox = { virtual_is_inconsistent } }; + +struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs = { + virtual_get_virtual_uid, + virtual_get_virtual_backend_boxes, + virtual_get_virtual_box_patterns +}; diff --git a/src/plugins/virtual/virtual-storage.h b/src/plugins/virtual/virtual-storage.h index 7814fcca96..4e3240c836 100644 --- a/src/plugins/virtual/virtual-storage.h +++ b/src/plugins/virtual/virtual-storage.h @@ -99,6 +99,19 @@ struct virtual_backend_box { }; ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *); +struct virtual_mailbox_vfuncs { + bool (*get_virtual_uid)(struct mailbox *box, + const char *backend_mailbox, + uint32_t backend_uidvalidity, + uint32_t backend_uid, uint32_t *uid_r); + void (*get_virtual_backend_boxes)(struct mailbox *box, + ARRAY_TYPE(mailboxes) *mailboxes, + bool only_with_msgs); + void (*get_virtual_box_patterns)(struct mailbox *box, + ARRAY_TYPE(mailbox_virtual_patterns) *includes, + ARRAY_TYPE(mailbox_virtual_patterns) *excludes); +}; + struct virtual_mailbox { struct mailbox box; struct virtual_storage *storage; @@ -122,6 +135,8 @@ struct virtual_mailbox { ARRAY_TYPE(mailbox_virtual_patterns) list_include_patterns; ARRAY_TYPE(mailbox_virtual_patterns) list_exclude_patterns; + struct virtual_mailbox_vfuncs vfuncs; + unsigned int uids_mapped:1; unsigned int sync_initialized:1; unsigned int inconsistent:1;