index-storage.h revision 8bd7404367404f38cc36c1edb0872915c4d06bf1
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye#ifndef __INDEX_STORAGE_H
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye#define __INDEX_STORAGE_H
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye#include "mail-storage.h"
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye#include "mail-index.h"
d47b7213b7d5cd8f5fc70757b746342924488cf8Trond Norbye#include "imap-message-cache.h"
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyetypedef struct _IndexMailbox IndexMailbox;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyestruct _IndexMailbox {
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye Mailbox box;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye /* expunge messages marked as deleted, requires index to be
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye exclusively locked */
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye int (*expunge_locked)(IndexMailbox *ibox, int notify);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailboxSyncCallbacks sync_callbacks;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye void *sync_context;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailIndex *index;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye ImapMessageCache *cache;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye char *check_path;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye Timeout check_to;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye time_t check_file_stamp;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye time_t last_check;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye unsigned int synced_messages_count;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye unsigned int sent_diskspace_warning:1;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye unsigned int delay_save_unlocking:1; /* For COPYing inside mailbox */
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye};
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeextern ImapMessageCacheIface index_msgcache_iface;
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint mail_storage_set_index_error(IndexMailbox *ibox);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyevoid index_storage_add(MailIndex *index);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond NorbyeMailIndex *index_storage_lookup_ref(const char *path);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyevoid index_storage_unref(MailIndex *index);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond NorbyeIndexMailbox *index_storage_init(MailStorage *storage, Mailbox *box,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailIndex *index, const char *name,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye int readonly, int fast);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_close(Mailbox *box);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_sync_and_lock(IndexMailbox *ibox, int sync_size,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailLockType data_lock_type);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_sync_modifylog(IndexMailbox *ibox, int hide_deleted);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_mailbox_fix_custom_flags(IndexMailbox *ibox, MailFlags *flags,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye const char *custom_flags[]);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeunsigned int index_storage_get_recent_count(MailIndex *index);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_expunge_seek_first(IndexMailbox *ibox, unsigned int *seq,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailIndexRecord **rec);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_expunge_mail(IndexMailbox *ibox, MailIndexRecord *rec,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye unsigned int seq, int notify);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_save(MailStorage *storage, const char *path,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye IBuffer *inbuf, OBuffer *outbuf, uoff_t data_size);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_msgcache_open(ImapMessageCache *cache, MailIndex *index,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailIndexRecord *rec, ImapCacheField fields);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyevoid index_mailbox_check_add(IndexMailbox *ibox, const char *path);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyevoid index_mailbox_check_remove(IndexMailbox *ibox);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye/* Mailbox methods: */
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyevoid index_storage_set_sync_callbacks(Mailbox *box,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailboxSyncCallbacks *callbacks,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye void *context);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_copy(Mailbox *box, Mailbox *destbox,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye const char *messageset, int uidset);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_expunge(Mailbox *box, int notify);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_get_status(Mailbox *box, MailboxStatusItems items,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailboxStatus *status);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_sync(Mailbox *box, int sync_expunges);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_update_flags(Mailbox *box, const char *messageset, int uidset,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye MailFlags flags, const char *custom_flags[],
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye ModifyType modify_type, int notify,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye int *all_found);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_fetch(Mailbox *box, MailFetchData *fetch_data,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye OBuffer *outbuf, int *all_found);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbyeint index_storage_search(Mailbox *box, const char *charset, MailSearchArg *args,
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye OBuffer *outbuf, int uid_result);
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye#endif
099386ae66a95e7edfed3088abb82bc1e78b6e7cTrond Norbye