mail-transaction-util.h revision 1f2c3bde353d45f6d76c5210adf1e0a952247f3a
75f5c2db254c0167a0e396254460de09b775d203trawick#ifndef __MAIL_TRANSACTION_UTIL_H
75f5c2db254c0167a0e396254460de09b775d203trawick#define __MAIL_TRANSACTION_UTIL_H
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawickstruct mail_transaction_type_map {
75f5c2db254c0167a0e396254460de09b775d203trawick enum mail_transaction_type type;
75f5c2db254c0167a0e396254460de09b775d203trawick enum mail_index_sync_type sync_type;
75f5c2db254c0167a0e396254460de09b775d203trawick size_t record_size;
75f5c2db254c0167a0e396254460de09b775d203trawick};
75f5c2db254c0167a0e396254460de09b775d203trawickextern const struct mail_transaction_type_map mail_transaction_type_map[];
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawickstruct mail_transaction_map_functions {
75f5c2db254c0167a0e396254460de09b775d203trawick int (*expunge)(const struct mail_transaction_expunge *e, void *context);
75f5c2db254c0167a0e396254460de09b775d203trawick int (*append)(const struct mail_index_record *rec, void *context);
75f5c2db254c0167a0e396254460de09b775d203trawick int (*flag_update)(const struct mail_transaction_flag_update *u,
75f5c2db254c0167a0e396254460de09b775d203trawick void *context);
75f5c2db254c0167a0e396254460de09b775d203trawick int (*cache_update)(const struct mail_transaction_cache_update *u,
75f5c2db254c0167a0e396254460de09b775d203trawick void *context);
75f5c2db254c0167a0e396254460de09b775d203trawick};
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawickconst struct mail_transaction_type_map *
75f5c2db254c0167a0e396254460de09b775d203trawickmail_transaction_type_lookup(enum mail_transaction_type type);
75f5c2db254c0167a0e396254460de09b775d203trawickenum mail_transaction_type
75f5c2db254c0167a0e396254460de09b775d203trawickmail_transaction_type_mask_get(enum mail_index_sync_type sync_type);
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawickint mail_transaction_map(const struct mail_transaction_header *hdr,
75f5c2db254c0167a0e396254460de09b775d203trawick const void *data,
75f5c2db254c0167a0e396254460de09b775d203trawick struct mail_transaction_map_functions *map,
75f5c2db254c0167a0e396254460de09b775d203trawick void *context);
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawickvoid
75f5c2db254c0167a0e396254460de09b775d203trawickmail_transaction_log_sort_expunges(buffer_t *expunges_buf,
75f5c2db254c0167a0e396254460de09b775d203trawick const struct mail_transaction_expunge *src,
75f5c2db254c0167a0e396254460de09b775d203trawick size_t src_buf_size);
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawick/* Iterate through expunges buffer. iter_seek()'s seq1/seq2 is assumed to be
75f5c2db254c0167a0e396254460de09b775d203trawick in post-expunge view, iter_get() updates them to pre-expunge view. Some
75f5c2db254c0167a0e396254460de09b775d203trawick post-expunge sequence arrays may go through expunges, we split them so it
75f5c2db254c0167a0e396254460de09b775d203trawick won't be visible. */
75f5c2db254c0167a0e396254460de09b775d203trawickstruct mail_transaction_expunge_iter_ctx *
75f5c2db254c0167a0e396254460de09b775d203trawickmail_transaction_expunge_iter_init(const buffer_t *expunges_buf);
75f5c2db254c0167a0e396254460de09b775d203trawickvoid mail_transaction_expunge_iter_deinit(
75f5c2db254c0167a0e396254460de09b775d203trawick struct mail_transaction_expunge_iter_ctx *ctx);
75f5c2db254c0167a0e396254460de09b775d203trawick/* Returns TRUE if seq1 or seq2 will be modified by iter_get(). If FALSE is
75f5c2db254c0167a0e396254460de09b775d203trawick returned calling iter_get() is a bit pointless. */
75f5c2db254c0167a0e396254460de09b775d203trawickint mail_transaction_expunge_iter_seek(
75f5c2db254c0167a0e396254460de09b775d203trawick struct mail_transaction_expunge_iter_ctx *ctx,
75f5c2db254c0167a0e396254460de09b775d203trawick uint32_t seq1, uint32_t seq2);
75f5c2db254c0167a0e396254460de09b775d203trawick/* Returns TRUE while sequences are returned. */
75f5c2db254c0167a0e396254460de09b775d203trawickint mail_transaction_expunge_iter_get(
75f5c2db254c0167a0e396254460de09b775d203trawick struct mail_transaction_expunge_iter_ctx *ctx,
75f5c2db254c0167a0e396254460de09b775d203trawick uint32_t *seq1_r, uint32_t *seq2_r);
75f5c2db254c0167a0e396254460de09b775d203trawick
75f5c2db254c0167a0e396254460de09b775d203trawick#endif
75f5c2db254c0167a0e396254460de09b775d203trawick