maildir-storage.h revision e7f1eb4dced5cf8088757b2fdcaa5ead718d20fb
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen#ifndef __MAILDIR_STORAGE_H
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#define __MAILDIR_STORAGE_H
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen/* Hierarchy separator in Maildir++ filenames - shouldn't be changed */
7e209b78ca757294dbbc15604c88673b3a6b0c39Timo Sirainen#define MAILDIR_FS_SEP '.'
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#define MAILDIR_FS_SEP_S "."
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#define SUBSCRIPTION_FILE_NAME "subscriptions"
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen#define MAILDIR_INDEX_PREFIX "dovecot.index"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "index-storage.h"
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct timeval;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct maildir_save_context;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct maildir_copy_context;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct maildir_transaction_context {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct index_transaction_context ictx;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct maildir_save_context *save_ctx;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct maildir_copy_context *copy_ctx;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen};
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenextern struct mail maildir_mail;
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen/* Return -1 = error, 0 = file not found, 1 = ok */
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainentypedef int maildir_file_do_func(struct index_mailbox *ibox,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *path, void *context);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenint maildir_file_do(struct index_mailbox *ibox, uint32_t seq,
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainen maildir_file_do_func *func, void *context);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenconst char *maildir_generate_tmp_filename(const struct timeval *tv);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_create_tmp(struct index_mailbox *ibox, const char *dir,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen mode_t mode, const char **fname_r);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenstruct mailbox_list_context *
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenmaildir_mailbox_list_init(struct mail_storage *storage,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *ref, const char *mask,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen enum mailbox_list_flags flags);
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainenint maildir_mailbox_list_deinit(struct mailbox_list_context *ctx);
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainenstruct mailbox_list *
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainenmaildir_mailbox_list_next(struct mailbox_list_context *ctx);
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainen
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainenstruct mailbox_sync_context *
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainenmaildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_storage_sync_force(struct index_mailbox *ibox);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct maildir_index_sync_context *
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenmaildir_sync_index_begin(struct index_mailbox *ibox);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid maildir_sync_index_abort(struct maildir_index_sync_context *sync_ctx);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_sync_index_finish(struct maildir_index_sync_context *sync_ctx,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen int partial);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenstruct mailbox_transaction_context *
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenmaildir_transaction_begin(struct mailbox *box, int hide);
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenint maildir_transaction_commit(struct mailbox_transaction_context *t,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen enum mailbox_sync_flags flags);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid maildir_transaction_rollback(struct mailbox_transaction_context *t);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct mail_save_context *
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenmaildir_save_init(struct mailbox_transaction_context *_t,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const struct mail_full_flags *flags,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen time_t received_date, int timezone_offset,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *from_envelope, struct istream *input,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen int want_mail);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_save_continue(struct mail_save_context *ctx);
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenint maildir_save_finish(struct mail_save_context *ctx, struct mail **mail_r);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid maildir_save_cancel(struct mail_save_context *ctx);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainenint maildir_transaction_save_commit_pre(struct maildir_save_context *ctx);
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainenvoid maildir_transaction_save_commit_post(struct maildir_save_context *ctx);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid maildir_transaction_save_rollback(struct maildir_save_context *ctx);
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_copy(struct mailbox_transaction_context *t, struct mail *mail,
7e209b78ca757294dbbc15604c88673b3a6b0c39Timo Sirainen struct mail **dest_mail_r);
7e209b78ca757294dbbc15604c88673b3a6b0c39Timo Sirainenint maildir_transaction_copy_commit(struct maildir_copy_context *ctx);
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenvoid maildir_transaction_copy_rollback(struct maildir_copy_context *ctx);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenconst char *maildir_get_path(struct index_storage *storage, const char *name);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_sync_last_commit(struct index_mailbox *ibox);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenint maildir_filename_get_flags(const char *fname, enum mail_flags *flags_r,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen keywords_mask_t keywords_r);
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainenconst char *maildir_filename_set_flags(const char *fname, enum mail_flags flags,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen keywords_mask_t keywords);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenunsigned int maildir_hash(const void *p);
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainenint maildir_cmp(const void *p1, const void *p2);
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainen
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainen#endif
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen