From 311d3dd2078c1b711a0cef013ba43a94078c115c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 10 Apr 2013 14:13:51 +0300 Subject: [PATCH] lib-storage: Added mail_namespaces_added hook. --- src/lib-storage/mail-storage-hooks.c | 10 ++++++++++ src/lib-storage/mail-storage-hooks.h | 7 +++++++ src/lib-storage/mail-user.c | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/src/lib-storage/mail-storage-hooks.c b/src/lib-storage/mail-storage-hooks.c index fd8d9a6a30..c553ca4132 100644 --- a/src/lib-storage/mail-storage-hooks.c +++ b/src/lib-storage/mail-storage-hooks.c @@ -281,6 +281,16 @@ void hook_mail_namespaces_created(struct mail_namespace *namespaces) } } +void hook_mail_namespaces_added(struct mail_namespace *namespaces) +{ + const struct mail_storage_hooks *const *hooks; + + array_foreach(&namespaces->user->hooks, hooks) { + if ((*hooks)->mail_namespaces_added != NULL) + (*hooks)->mail_namespaces_added(namespaces); + } +} + void hook_mail_storage_created(struct mail_storage *storage) { const struct mail_storage_hooks *const *hooks; diff --git a/src/lib-storage/mail-storage-hooks.h b/src/lib-storage/mail-storage-hooks.h index 0cba2a08f4..beb3fa2d04 100644 --- a/src/lib-storage/mail-storage-hooks.h +++ b/src/lib-storage/mail-storage-hooks.h @@ -12,7 +12,13 @@ struct mail; struct mail_storage_hooks { void (*mail_user_created)(struct mail_user *user); void (*mail_namespace_storage_added)(struct mail_namespace *ns); + /* called the first time user's initial namespaces were added */ void (*mail_namespaces_created)(struct mail_namespace *namespaces); + /* called every time namespaces are added. most importantly called + when shared mailbox accesses trigger creating new namespaces. + this is called before mail_namespaces_created() at startup. + The namespaces parameter contains all of the current namespaces. */ + void (*mail_namespaces_added)(struct mail_namespace *namespaces); void (*mail_storage_created)(struct mail_storage *storage); void (*mailbox_list_created)(struct mailbox_list *list); void (*mailbox_allocated)(struct mailbox *box); @@ -37,6 +43,7 @@ void mail_storage_hooks_remove_internal(const struct mail_storage_hooks *hooks); void hook_mail_user_created(struct mail_user *user); void hook_mail_namespace_storage_added(struct mail_namespace *ns); void hook_mail_namespaces_created(struct mail_namespace *namespaces); +void hook_mail_namespaces_added(struct mail_namespace *namespaces); void hook_mail_storage_created(struct mail_storage *storage); void hook_mailbox_list_created(struct mailbox_list *list); void hook_mailbox_allocated(struct mailbox *box); diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index b0ac752f92..ed10fc9a9f 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -258,6 +258,10 @@ void mail_user_add_namespace(struct mail_user *user, *tmp = ns; } *namespaces = user->namespaces; + + T_BEGIN { + hook_mail_namespaces_added(user->namespaces); + } T_END; } void mail_user_drop_useless_namespaces(struct mail_user *user) -- 2.47.3