mail-index-sync-private.h revision 16c89b1260c9d07c01c83a9219424d3727069b2e
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#ifndef __MAIL_INDEX_SYNC_PRIVATE_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#define __MAIL_INDEX_SYNC_PRIVATE_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen#include "mail-transaction-log.h"
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct mail_index_sync_ctx {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct mail_index *index;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct mail_index_view *view;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
7e94cf9d70ce9fdeccb7a85ff400b899e6386f36Timo Sirainen buffer_t *expunges_buf, *updates_buf;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const struct mail_transaction_expunge *expunges;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const struct mail_transaction_flag_update *updates;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen size_t expunges_count, updates_count;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
7e94cf9d70ce9fdeccb7a85ff400b899e6386f36Timo Sirainen uint32_t append_uid_first, append_uid_last;
7e94cf9d70ce9fdeccb7a85ff400b899e6386f36Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const struct mail_transaction_header *hdr;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const void *data;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen size_t expunge_idx, update_idx;
659fe5d24825b160cae512538088020d97a60239Timo Sirainen uint32_t next_uid;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
b35f7104715edee0cfac6d46ab0b342033867eb7Timo Sirainen unsigned int lock_id;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen unsigned int sync_appends:1;
757726d9acbd04cf0d0d4be8ce14e11525476a0bTimo Sirainen unsigned int sync_dirty:1;
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainen};
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainen
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainenstruct mail_index_expunge_handler {
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen mail_index_expunge_handler_t *handler;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen void **context;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen uint32_t record_offset;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen};
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainenstruct mail_index_sync_map_ctx {
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainen struct mail_index_view *view;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen uint32_t cur_ext_id;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen buffer_t *expunge_handlers; /* struct mail_index_expunge_handler[] */
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen buffer_t *extra_context_buf;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen void **extra_context;
7394389230750c45b105cdefb5850c81cae8cdc0Timo Sirainen
5626ae5e3316eced244adb6485c0927f1c7fdc41Timo Sirainen enum mail_index_sync_handler_type type;
5626ae5e3316eced244adb6485c0927f1c7fdc41Timo Sirainen
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen unsigned int sync_handlers_initialized:1;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen unsigned int expunge_handlers_set:1;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen unsigned int expunge_handlers_used:1;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainen unsigned int cur_ext_ignore:1;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainenextern struct mail_transaction_map_functions mail_index_map_sync_funcs;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainenvoid mail_index_sync_map_init(struct mail_index_sync_map_ctx *sync_map_ctx,
5626ae5e3316eced244adb6485c0927f1c7fdc41Timo Sirainen struct mail_index_view *view,
5626ae5e3316eced244adb6485c0927f1c7fdc41Timo Sirainen enum mail_index_sync_handler_type type);
5626ae5e3316eced244adb6485c0927f1c7fdc41Timo Sirainenvoid mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx);
2a734f36105e33ab452d057df6bc7a2b7d9f96f0Timo Sirainenint mail_index_sync_update_index(struct mail_index_sync_ctx *sync_ctx,
2a734f36105e33ab452d057df6bc7a2b7d9f96f0Timo Sirainen int sync_only_external);
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen
d143077bd518de129b8d446fb58e003903e50867Timo Sirainenint mail_index_sync_record(struct mail_index_sync_map_ctx *ctx,
d143077bd518de129b8d446fb58e003903e50867Timo Sirainen const struct mail_transaction_header *hdr,
d143077bd518de129b8d446fb58e003903e50867Timo Sirainen const void *data);
d143077bd518de129b8d446fb58e003903e50867Timo Sirainen
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenvoid mail_index_sync_replace_map(struct mail_index_sync_map_ctx *ctx,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen struct mail_index_map *map);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainenvoid
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainenmail_index_sync_get_expunge(struct mail_index_sync_rec *rec,
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainen const struct mail_transaction_expunge *exp);
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainenvoid
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainenmail_index_sync_get_update(struct mail_index_sync_rec *rec,
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainen const struct mail_transaction_flag_update *update);
d67f54632110cfb6aafe2d7cd1f99b031c0b208aTimo Sirainen
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenvoid mail_index_sync_init_expunge_handlers(struct mail_index_sync_map_ctx *ctx);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenvoid
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenmail_index_sync_deinit_expunge_handlers(struct mail_index_sync_map_ctx *ctx);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenvoid mail_index_sync_init_handlers(struct mail_index_sync_map_ctx *ctx);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenvoid mail_index_sync_deinit_handlers(struct mail_index_sync_map_ctx *ctx);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenint mail_index_sync_ext_intro(struct mail_index_sync_map_ctx *ctx,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen const struct mail_transaction_ext_intro *u);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenint mail_index_sync_ext_reset(struct mail_index_sync_map_ctx *ctx,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen const struct mail_transaction_ext_reset *u);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenint
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenmail_index_sync_ext_hdr_update(struct mail_index_sync_map_ctx *ctx,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen const struct mail_transaction_ext_hdr_update *u);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenint
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainenmail_index_sync_ext_rec_update(struct mail_index_sync_map_ctx *ctx,
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen const struct mail_transaction_ext_rec_update *u);
a0d34d3982507f513a9d800082481e9faeb9a943Timo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainenint mail_index_sync_keywords(struct mail_index_sync_map_ctx *ctx,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const struct mail_transaction_header *hdr,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const struct mail_transaction_keyword_update *rec);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#endif