changeset 12540:3c883e0dcb31

Moved fts/virtual plugin communication functions away from lib-storage.
author Timo Sirainen <tss@iki.fi>
date Mon, 06 Dec 2010 03:28:29 +0000
parents d0a24521d13f
children 5815ff80f198
files 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
diffstat 15 files changed, 33 insertions(+), 91 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/cydir/cydir-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -160,9 +160,6 @@
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
 		NULL,
-		NULL,
-		NULL,
-		NULL,
 		index_mail_alloc,
 		index_header_lookup_init,
 		index_header_lookup_deinit,
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -419,9 +419,6 @@
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
 		NULL,
-		NULL,
-		NULL,
-		NULL,
 		dbox_mail_alloc,
 		index_header_lookup_init,
 		index_header_lookup_deinit,
--- a/src/lib-storage/index/dbox-single/sdbox-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/dbox-single/sdbox-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -386,9 +386,6 @@
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
 		NULL,
-		NULL,
-		NULL,
-		NULL,
 		dbox_mail_alloc,
 		index_header_lookup_init,
 		index_header_lookup_deinit,
--- a/src/lib-storage/index/maildir/maildir-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -659,9 +659,6 @@
 		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,
--- a/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -764,9 +764,6 @@
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
 		NULL,
-		NULL,
-		NULL,
-		NULL,
 		index_mail_alloc,
 		index_header_lookup_init,
 		index_header_lookup_deinit,
--- a/src/lib-storage/index/raw/raw-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/index/raw/raw-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -160,9 +160,6 @@
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
 		NULL,
-		NULL,
-		NULL,
-		NULL,
 		index_mail_alloc,
 		index_header_lookup_init,
 		index_header_lookup_deinit,
--- a/src/lib-storage/mail-storage-private.h	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/mail-storage-private.h	Mon Dec 06 03:28:29 2010 +0000
@@ -162,16 +162,6 @@
 	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 *
--- a/src/lib-storage/mail-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/mail-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -1034,42 +1034,6 @@
 				   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[])
 {
--- a/src/lib-storage/mail-storage.h	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/mail-storage.h	Mon Dec 06 03:28:29 2010 +0000
@@ -464,22 +464,6 @@
 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
--- a/src/lib-storage/test-mailbox.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/lib-storage/test-mailbox.c	Mon Dec 06 03:28:29 2010 +0000
@@ -303,9 +303,6 @@
 		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,
--- a/src/plugins/fts-solr/fts-backend-solr.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/plugins/fts-solr/fts-backend-solr.c	Mon Dec 06 03:28:29 2010 +0000
@@ -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 @@
 
 	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 @@
 	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;
--- a/src/plugins/fts/Makefile.am	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/plugins/fts/Makefile.am	Mon Dec 06 03:28:29 2010 +0000
@@ -3,7 +3,8 @@
 	-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 @@
 
 lib20_fts_plugin_la_SOURCES = \
 	fts-api.c \
+	fts-mailbox.c \
 	fts-plugin.c \
 	fts-search.c \
 	fts-storage.c
@@ -19,5 +21,6 @@
 noinst_HEADERS = \
 	fts-api.h \
 	fts-api-private.h \
+	fts-mailbox.h \
 	fts-plugin.h \
 	fts-storage.h
--- a/src/plugins/fts/fts-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/plugins/fts/fts-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -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 @@
 	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);
--- a/src/plugins/virtual/virtual-storage.c	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/plugins/virtual/virtual-storage.c	Mon Dec 06 03:28:29 2010 +0000
@@ -29,6 +29,7 @@
 
 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 @@
 	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 @@
 		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 @@
 		virtual_is_inconsistent
 	}
 };
+
+struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs = {
+	virtual_get_virtual_uid,
+	virtual_get_virtual_backend_boxes,
+	virtual_get_virtual_box_patterns
+};
--- a/src/plugins/virtual/virtual-storage.h	Mon Dec 06 03:11:08 2010 +0000
+++ b/src/plugins/virtual/virtual-storage.h	Mon Dec 06 03:28:29 2010 +0000
@@ -99,6 +99,19 @@
 };
 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 @@
 	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;