dovecot-2.1: lib-storage: Added struct mailbox.set_subscribed() ...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Dec 30 11:55:19 EET 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/bc9217cb0193
changeset: 13876:bc9217cb0193
user: Timo Sirainen <tss at iki.fi>
date: Fri Dec 30 11:54:48 2011 +0200
description:
lib-storage: Added struct mailbox.set_subscribed() virtual method.
diffstat:
src/lib-storage/index/cydir/cydir-storage.c | 1 +
src/lib-storage/index/dbox-multi/mdbox-storage.c | 1 +
src/lib-storage/index/dbox-single/sdbox-storage.c | 1 +
src/lib-storage/index/imapc/imapc-storage.c | 1 +
src/lib-storage/index/index-storage.c | 35 +++++++++++++++++++++++
src/lib-storage/index/index-storage.h | 1 +
src/lib-storage/index/maildir/maildir-storage.c | 1 +
src/lib-storage/index/mbox/mbox-storage.c | 1 +
src/lib-storage/index/raw/raw-storage.c | 1 +
src/lib-storage/mail-storage-private.h | 1 +
src/lib-storage/mail-storage.c | 33 +--------------------
src/lib-storage/test-mailbox.c | 9 +++++
src/plugins/virtual/virtual-storage.c | 1 +
13 files changed, 56 insertions(+), 31 deletions(-)
diffs (226 lines):
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/cydir/cydir-storage.c
--- a/src/lib-storage/index/cydir/cydir-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/cydir/cydir-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -139,6 +139,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
NULL,
+ index_storage_set_subscribed,
index_storage_list_index_has_changed,
index_storage_list_index_update_sync,
cydir_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/dbox-multi/mdbox-storage.c
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -437,6 +437,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
mdbox_mailbox_get_metadata,
+ index_storage_set_subscribed,
index_storage_list_index_has_changed,
index_storage_list_index_update_sync,
mdbox_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/dbox-single/sdbox-storage.c
--- a/src/lib-storage/index/dbox-single/sdbox-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/dbox-single/sdbox-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -397,6 +397,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
sdbox_mailbox_get_metadata,
+ index_storage_set_subscribed,
index_storage_list_index_has_changed,
index_storage_list_index_update_sync,
sdbox_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/imapc/imapc-storage.c
--- a/src/lib-storage/index/imapc/imapc-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -772,6 +772,7 @@
index_storage_mailbox_rename,
imapc_mailbox_get_status,
imapc_mailbox_get_metadata,
+ index_storage_set_subscribed,
NULL,
NULL,
imapc_mailbox_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/index-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -664,3 +664,38 @@
}
} T_END;
}
+
+int index_storage_set_subscribed(struct mailbox *box, bool set)
+{
+ struct mail_namespace *ns;
+ struct mailbox_list *list = box->list;
+ const char *subs_name;
+
+ if ((list->ns->flags & NAMESPACE_FLAG_SUBSCRIPTIONS) != 0)
+ subs_name = box->name;
+ else {
+ /* subscriptions=no namespace, find another one where we can
+ add the subscription to */
+ ns = mail_namespace_find_subscribable(list->ns->user->namespaces,
+ box->vname);
+ if (ns == NULL) {
+ mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
+ "This namespace has no subscriptions");
+ return -1;
+ }
+ /* use <orig ns prefix><orig storage name> as the
+ subscription name */
+ subs_name = t_strconcat(list->ns->prefix, box->name, NULL);
+ /* drop the common prefix (typically there isn't one) */
+ i_assert(strncmp(ns->prefix, subs_name, strlen(ns->prefix)) == 0);
+ subs_name += strlen(ns->prefix);
+
+ list = ns->list;
+ }
+ if (mailbox_list_set_subscribed(list, subs_name, set) < 0) {
+ mail_storage_copy_list_error(box->storage, list);
+ return -1;
+ }
+ return 0;
+}
+
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/index-storage.h Fri Dec 30 11:54:48 2011 +0200
@@ -134,6 +134,7 @@
void index_save_context_free(struct mail_save_context *ctx);
void index_copy_cache_fields(struct mail_save_context *ctx,
struct mail *src_mail, uint32_t dest_seq);
+int index_storage_set_subscribed(struct mailbox *box, bool set);
bool index_keyword_array_cmp(const ARRAY_TYPE(keyword_indexes) *k1,
const ARRAY_TYPE(keyword_indexes) *k2);
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/maildir/maildir-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -625,6 +625,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
maildir_mailbox_get_metadata,
+ index_storage_set_subscribed,
maildir_list_index_has_changed,
maildir_list_index_update_sync,
maildir_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/mbox/mbox-storage.c
--- a/src/lib-storage/index/mbox/mbox-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/mbox/mbox-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -776,6 +776,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
mbox_mailbox_get_metadata,
+ index_storage_set_subscribed,
index_storage_list_index_has_changed,
index_storage_list_index_update_sync,
mbox_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/index/raw/raw-storage.c
--- a/src/lib-storage/index/raw/raw-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/index/raw/raw-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -218,6 +218,7 @@
index_storage_mailbox_rename,
index_storage_get_status,
index_mailbox_get_metadata,
+ index_storage_set_subscribed,
index_storage_list_index_has_changed,
index_storage_list_index_update_sync,
raw_storage_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/mail-storage-private.h Fri Dec 30 11:54:48 2011 +0200
@@ -126,6 +126,7 @@
int (*get_metadata)(struct mailbox *box,
enum mailbox_metadata_items items,
struct mailbox_metadata *metadata_r);
+ int (*set_subscribed)(struct mailbox *box, bool set);
/* Lookup sync extension record and figure out if it mailbox has
changed since. Returns 1 = yes, 0 = no, -1 = error. */
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/mail-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -1199,42 +1199,13 @@
int mailbox_set_subscribed(struct mailbox *box, bool set)
{
- struct mail_namespace *ns;
- struct mailbox_list *list = box->list;
- const char *subs_name;
-
- if (!mailbox_list_is_valid_existing_name(list, box->name)) {
+ if (!mailbox_list_is_valid_existing_name(box->list, box->name)) {
mail_storage_set_error(box->storage, MAIL_ERROR_PARAMS,
"Invalid mailbox name");
return -1;
}
- if ((list->ns->flags & NAMESPACE_FLAG_SUBSCRIPTIONS) != 0)
- subs_name = box->name;
- else {
- /* subscriptions=no namespace, find another one where we can
- add the subscription to */
- ns = mail_namespace_find_subscribable(list->ns->user->namespaces,
- box->vname);
- if (ns == NULL) {
- mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
- "This namespace has no subscriptions");
- return -1;
- }
- /* use <orig ns prefix><orig storage name> as the
- subscription name */
- subs_name = t_strconcat(list->ns->prefix, box->name, NULL);
- /* drop the common prefix (typically there isn't one) */
- i_assert(strncmp(ns->prefix, subs_name, strlen(ns->prefix)) == 0);
- subs_name += strlen(ns->prefix);
-
- list = ns->list;
- }
- if (mailbox_list_set_subscribed(list, subs_name, set) < 0) {
- mail_storage_copy_list_error(box->storage, list);
- return -1;
- }
- return 0;
+ return box->v.set_subscribed(box, set);
}
struct mail_storage *mailbox_get_storage(const struct mailbox *box)
diff -r 4c827134997f -r bc9217cb0193 src/lib-storage/test-mailbox.c
--- a/src/lib-storage/test-mailbox.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/lib-storage/test-mailbox.c Fri Dec 30 11:54:48 2011 +0200
@@ -82,6 +82,14 @@
return 0;
}
+static int test_mailbox_set_subscribed(struct mailbox *box,
+ bool set ATTR_UNUSED)
+{
+ mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
+ "Test mailbox subscribing isn't supported");
+ return -1;
+}
+
static struct mailbox_sync_context *
test_mailbox_sync_init(struct mailbox *box,
enum mailbox_sync_flags flags ATTR_UNUSED)
@@ -244,6 +252,7 @@
test_mailbox_rename,
test_mailbox_get_status,
NULL,
+ test_mailbox_set_subscribed,
NULL,
NULL,
test_mailbox_sync_init,
diff -r 4c827134997f -r bc9217cb0193 src/plugins/virtual/virtual-storage.c
--- a/src/plugins/virtual/virtual-storage.c Thu Dec 29 14:43:45 2011 +0200
+++ b/src/plugins/virtual/virtual-storage.c Fri Dec 30 11:54:48 2011 +0200
@@ -528,6 +528,7 @@
index_storage_mailbox_rename,
virtual_storage_get_status,
virtual_mailbox_get_metadata,
+ index_storage_set_subscribed,
NULL,
NULL,
virtual_storage_sync_init,
More information about the dovecot-cvs
mailing list