#ifndef MAIL_NAMESPACE_H
#define MAIL_NAMESPACE_H
#include "mail-user.h"
struct mail_storage_callbacks;
enum namespace_type {
NAMESPACE_PRIVATE = 0x01,
NAMESPACE_SHARED = 0x02,
NAMESPACE_PUBLIC = 0x04
};
enum namespace_flags {
NAMESPACE_FLAG_INBOX_USER = 0x01,
NAMESPACE_FLAG_INBOX_ANY = 0x02,
NAMESPACE_FLAG_HIDDEN = 0x04,
NAMESPACE_FLAG_LIST_PREFIX = 0x08,
NAMESPACE_FLAG_LIST_CHILDREN = 0x10,
NAMESPACE_FLAG_SUBSCRIPTIONS = 0x20,
NAMESPACE_FLAG_AUTOCREATED = 0x1000,
NAMESPACE_FLAG_USABLE = 0x2000,
NAMESPACE_FLAG_UNUSABLE = 0x4000,
NAMESPACE_FLAG_NOQUOTA = 0x8000,
NAMESPACE_FLAG_NOACL = 0x10000
};
struct mail_namespace {
struct mail_namespace *next;
int refcount;
enum namespace_type type;
char sep, real_sep, sep_str[3];
enum namespace_flags flags;
char *prefix;
size_t prefix_len;
struct mail_namespace *alias_for;
struct mail_namespace *alias_chain_next;
struct mail_user *user, *owner;
struct mailbox_list *list;
struct mail_storage *storage;
const struct mail_namespace_settings *set, *unexpanded_set;
const struct mail_storage_settings *mail_set;
unsigned int destroyed:1;
};
int mail_namespaces_init(struct mail_user *user, const char **error_r);
int mail_namespaces_init_location(struct mail_user *user, const char *location,
const char **error_r);
struct mail_namespace *mail_namespaces_init_empty(struct mail_user *user);
void mail_namespaces_deinit(struct mail_namespace **namespaces);
void mail_namespace_ref(struct mail_namespace *ns);
void mail_namespace_unref(struct mail_namespace **ns);
void mail_namespaces_set_storage_callbacks(struct mail_namespace *namespaces,
struct mail_storage_callbacks *callbacks,
void *context);
void mail_namespace_add_storage(struct mail_namespace *ns,
struct mail_storage *storage);
void mail_namespace_destroy(struct mail_namespace *ns);
const char *mail_namespace_fix_sep(struct mail_namespace *ns, const char *name);
const char *mail_namespace_get_storage_name(struct mail_namespace *ns,
const char *name);
const char *mail_namespace_get_vname(struct mail_namespace *ns, string_t *dest,
const char *name);
struct mail_storage *
mail_namespace_get_default_storage(struct mail_namespace *ns);
char mail_namespaces_get_root_sep(const struct mail_namespace *namespaces)
ATTR_PURE;
struct mail_namespace *
mail_namespace_find(struct mail_namespace *namespaces, const char **mailbox);
struct mail_namespace *
mail_namespace_find_visible(struct mail_namespace *namespaces,
const char **mailbox);
struct mail_namespace *
mail_namespace_find_subscribable(struct mail_namespace *namespaces,
const char **mailbox);
struct mail_namespace *
mail_namespace_find_unsubscribable(struct mail_namespace *namespaces,
const char **mailbox);
struct mail_namespace *
mail_namespace_find_inbox(struct mail_namespace *namespaces);
bool mail_namespace_update_name(const struct mail_namespace *ns,
const char **mailbox);
struct mail_namespace *
mail_namespace_find_prefix(struct mail_namespace *namespaces,
const char *prefix);
struct mail_namespace *
mail_namespace_find_prefix_nosep(struct mail_namespace *namespaces,
const char *prefix);
void mail_namespace_finish_list_init(struct mail_namespace *ns,
struct mailbox_list *list);
#endif