index-storage.h revision 100e980900f652c9114997d7153e010e0639effe
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen#ifndef __INDEX_STORAGE_H
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen#define __INDEX_STORAGE_H
08d6658a4e2ec8104cd1307f6baa75fdb07a24f8Mark Washenberger
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainen#include "mail-storage.h"
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen#include "mail-index.h"
bdd36cfdba3ff66d25570a9ff568d69e1eb543cfTimo Sirainen#include "imap-message-cache.h"
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainentypedef struct _IndexMailbox IndexMailbox;
be5c76fabc7439fd33bc799bc3ab3f570799977bTimo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenstruct _IndexMailbox {
b0e9375a1ff97c9c7d40655922af5ccc73ecaa76Timo Sirainen Mailbox box;
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* expunge messages marked as deleted, requires index to be
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen exclusively locked */
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen int (*expunge_locked)(IndexMailbox *ibox, int notify);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen MailboxSyncCallbacks sync_callbacks;
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen void *sync_context;
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen MailIndex *index;
b624773984e35dd894db8dff976c1a2114c70782Timo Sirainen ImapMessageCache *cache;
5afc76d0215c5f7631dec06ef864d59f0686a0a8Timo Sirainen unsigned int synced_messages_count;
b624773984e35dd894db8dff976c1a2114c70782Timo Sirainen
12d38e76ba7f70d6219c89ec7416fea0d5de7e02Timo Sirainen unsigned int sent_diskspace_warning:1;
b624773984e35dd894db8dff976c1a2114c70782Timo Sirainen};
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenextern ImapMessageCacheIface index_msgcache_iface;
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint mail_storage_set_index_error(IndexMailbox *ibox);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenvoid index_storage_add(MailIndex *index);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo SirainenMailIndex *index_storage_lookup_ref(const char *path);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenvoid index_storage_unref(MailIndex *index);
3a7113e3e2dac0e333e1a3f62af7d682896f59c6Timo Sirainen
be5c76fabc7439fd33bc799bc3ab3f570799977bTimo SirainenIndexMailbox *index_storage_init(MailStorage *storage, Mailbox *box,
be5c76fabc7439fd33bc799bc3ab3f570799977bTimo Sirainen MailIndex *index, const char *name,
be5c76fabc7439fd33bc799bc3ab3f570799977bTimo Sirainen int readonly, int fast);
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenint index_storage_close(Mailbox *box);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_sync_and_lock(IndexMailbox *ibox, int sync_size,
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen MailLockType data_lock_type);
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainenint index_storage_sync_modifylog(IndexMailbox *ibox, int hide_deleted);
e9371f899a3d4207a0ffd3923ea5ec7250cf5e75Timo Sirainen
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainenint index_mailbox_fix_custom_flags(IndexMailbox *ibox, MailFlags *flags,
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen const char *custom_flags[]);
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainenunsigned int index_storage_get_recent_count(MailIndex *index);
788a0754cfd38dcfec1902844b085e4e84cfe7e6Timo Sirainen
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenint index_expunge_seek_first(IndexMailbox *ibox, unsigned int *seq,
788a0754cfd38dcfec1902844b085e4e84cfe7e6Timo Sirainen MailIndexRecord **rec);
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainenint index_expunge_mail(IndexMailbox *ibox, MailIndexRecord *rec,
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen unsigned int seq, int notify);
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenint index_storage_save(MailStorage *storage, const char *path,
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen IBuffer *inbuf, OBuffer *outbuf, uoff_t data_size);
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenint index_msgcache_open(ImapMessageCache *cache, MailIndex *index,
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen MailIndexRecord *rec, ImapCacheField fields);
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen/* Mailbox methods: */
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenvoid index_storage_set_sync_callbacks(Mailbox *box,
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen MailboxSyncCallbacks *callbacks,
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen void *context);
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainenint index_storage_copy(Mailbox *box, Mailbox *destbox,
f93c833d644ecff0b0f80bee4f1cdde3e697b5c8Timo Sirainen const char *messageset, int uidset);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_expunge(Mailbox *box, int notify);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_get_status(Mailbox *box, MailboxStatusItems items,
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen MailboxStatus *status);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_sync(Mailbox *box, int sync_expunges);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_update_flags(Mailbox *box, const char *messageset, int uidset,
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen MailFlags flags, const char *custom_flags[],
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen ModifyType modify_type, int notify,
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen int *all_found);
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainenint index_storage_fetch(Mailbox *box, MailFetchData *fetch_data,
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen OBuffer *outbuf, int *all_found);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainenint index_storage_search(Mailbox *box, const char *charset, MailSearchArg *args,
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen OBuffer *outbuf, int uid_result);
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen
2e29e4797a48d78d669821722bdb54fd0a1d3b94Timo Sirainen#endif
31597236d79ac38a5cea7ab65a9d0a3df64ed201Timo Sirainen