]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Moved fts/virtual plugin communication functions away from lib-storage.
authorTimo Sirainen <tss@iki.fi>
Mon, 6 Dec 2010 03:28:29 +0000 (03:28 +0000)
committerTimo Sirainen <tss@iki.fi>
Mon, 6 Dec 2010 03:28:29 +0000 (03:28 +0000)
15 files changed:
src/lib-storage/index/cydir/cydir-storage.c
src/lib-storage/index/dbox-multi/mdbox-storage.c
src/lib-storage/index/dbox-single/sdbox-storage.c
src/lib-storage/index/maildir/maildir-storage.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.c
src/lib-storage/mail-storage.h
src/lib-storage/test-mailbox.c
src/plugins/fts-solr/fts-backend-solr.c
src/plugins/fts/Makefile.am
src/plugins/fts/fts-storage.c
src/plugins/virtual/virtual-storage.c
src/plugins/virtual/virtual-storage.h

index 5570550c4803c792d3cdca2ab92e351f9be7e919..58309b5cef5908c12bf336601771a7ae94311539 100644 (file)
@@ -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,
index f848fe5e5daa7dc8788777badcb56de631307b83..a9e4cdcb253c81667a9833bbdf05747205db225d 100644 (file)
@@ -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,
index e0c7cbf44348ac92402406c0834f684657a38fbf..9249f953fe66642400418ee7131b68071e0508f3 100644 (file)
@@ -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,
index a822f48ab6d58bff68710799b260ed5399dd8e98..33f97d72e170727c38bd1cb268f59d184daddd91 100644 (file)
@@ -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,
index 909ba53eb36bad1f39a7f83d93614e0cb7f8d3c1..da226cf7b774483d4e31fcbb50c49e0da9f4bba8 100644 (file)
@@ -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,
index b6d4498dd0cdb12f98e74f0a7adcc3d6e1d8daa6..73e6a56ea0b54f82e28aad14213b4cb9c98c0c42 100644 (file)
@@ -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,
index 6f53b7f500ee6f435ed274e4e03bcb3ee4bc9b4d..02bfbe8fa46938e8ce190955f8ed99e6634d37e1 100644 (file)
@@ -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 *
index 828913746ec23740e02cc4a684a3527b80a59dc8..db8b388ee98efc908f41d8d1d69426d305593e73 100644 (file)
@@ -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[])
 {
index 08c616db26835a94b5dcd8cc0d9a1b199c65e278..baafbe41ee1a3453dd1ff58a06bd8ac4019aebee 100644 (file)
@@ -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
index 9c8a0e1e0af9b68ba787cafb6c0081c8a32931af..c1c1abeb86abcb2ab9668b4452ee49f486f535e2 100644 (file)
@@ -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,
index 17050ee46002a2f244ff93a15521acce4957fbc4..29fc412203a9b898db9f47f69efa94cb8e15fa02 100644 (file)
@@ -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;
index 98c92de00f43bb0573a2fe42e3fa9d2220b1821c..98bde0e7aae9fb9dc1ae0a3aa72b6b389f6c6ce6 100644 (file)
@@ -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
index 69b20116825fe9d8b847ddbb758b77ed59102d4f..1fc50b1c52abe5670c1ce448008ef8a6cb1894a1 100644 (file)
@@ -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);
index a49582ee4726a1ac903582cc7bd6d151fccae7b2..f78bbd5ea0d190c0f820f495100c774c51947efc 100644 (file)
@@ -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
+};
index 7814fcca9628ad9bd06e9950a974b7b624badfc1..4e3240c8365a576da6d03371aee5f46e3ec21b43 100644 (file)
@@ -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;