dbox-storage.h revision 61b0637759146621cbb7edcbd0b03a71cfd66dfe
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#ifndef DBOX_STORAGE_H
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_STORAGE_H
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#include "mail-storage-private.h"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosestruct dbox_file;
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosestruct dbox_mail;
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_SUBSCRIPTION_FILE_NAME "subscriptions"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_UIDVALIDITY_FILE_NAME "dovecot-uidvalidity"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_INDEX_PREFIX "dovecot.index"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_MAILBOX_DIR_NAME "mailboxes"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_TRASH_DIR_NAME "trash"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_MAILDIR_NAME "dbox-Mails"
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose/* How often to scan for stale temp files (based on dir's atime) */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_TMP_SCAN_SECS (8*60*60)
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose/* Delete temp files having ctime older than this. */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#define DBOX_TMP_DELETE_SECS (36*60*60)
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosestruct dbox_storage_vfuncs {
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose /* dbox file has zero references now. it should be either freed or
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose left open in case it's accessed again soon */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose void (*file_unrefed)(struct dbox_file *file);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose /* create a new file using the same permissions as file.
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose if parents=TRUE, create the directory if necessary */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose int (*file_create_fd)(struct dbox_file *file, const char *path,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose bool parents);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose /* open the mail and return its file/offset */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose int (*mail_open)(struct dbox_mail *mail, uoff_t *offset_r,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose struct dbox_file **file_r);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose /* create/update mailbox indexes */
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose int (*mailbox_create_indexes)(struct mailbox *box,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const struct mailbox_update *update);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose};
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosestruct dbox_storage {
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose struct mail_storage storage;
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose struct dbox_storage_vfuncs v;
544a20de7667f05c1a406c4dea0706b0ab507430Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose unsigned int files_corrupted:1;
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose};
cc2d77d5218c188119fa954c856e858cbde76947Pavel Březina
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosevoid dbox_storage_get_list_settings(const struct mail_namespace *ns,
544a20de7667f05c1a406c4dea0706b0ab507430Sumit Bose struct mailbox_list_settings *set);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseuint32_t dbox_get_uidvalidity_next(struct mailbox_list *list);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bosevoid dbox_notify_changes(struct mailbox *box);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseint dbox_mailbox_open(struct mailbox *box);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseint dbox_mailbox_create(struct mailbox *box,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const struct mailbox_update *update, bool directory);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseint dbox_list_iter_is_mailbox(struct mailbox_list_iterate_context *ctx,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const char *dir, const char *fname,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const char *mailbox_name,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose enum mailbox_list_file_type type,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose enum mailbox_info_flags *flags);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseint dbox_list_rename_mailbox_pre(struct mailbox_list *oldlist,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const char *oldname,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose struct mailbox_list *newlist,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose const char *newname);
45726939a48e605b0166521f94300ae04981a3a7Sumit Boseint dbox_list_rename_mailbox(struct mailbox_list *oldlist, const char *oldname,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose struct mailbox_list *newlist, const char *newname,
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose bool rename_children);
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose#endif
45726939a48e605b0166521f94300ae04981a3a7Sumit Bose