1 #ifndef MAIL_INDEX_MODSEQ_H 2 #define MAIL_INDEX_MODSEQ_H 3 4 #include "mail-types.h" 5 6 #define MAIL_INDEX_MODSEQ_EXT_NAME "modseq" 7 8 struct mail_keywords; 9 struct mail_index; 10 struct mail_index_map; 11 struct mail_index_view; 12 struct mail_index_modseq; 13 struct mail_index_map_modseq; 14 struct mail_index_sync_map_ctx; 15 16 struct mail_index_modseq_header { 17 /* highest used modseq */ 18 uint64_t highest_modseq; 19 /* last tracked log file position */ 20 uint32_t log_seq; 21 uint32_t log_offset; 22 }; 23 24 void mail_index_modseq_init(struct mail_index *index); 25 26 const struct mail_index_modseq_header * 27 mail_index_map_get_modseq_header(struct mail_index_map *map); 28 uint64_t mail_index_map_modseq_get_highest(struct mail_index_map *map); 29 void mail_index_modseq_enable(struct mail_index *index); 30 bool mail_index_have_modseq_tracking(struct mail_index *index); 31 uint64_t mail_index_modseq_get_highest(struct mail_index_view *view); 32 33 uint64_t mail_index_modseq_lookup(struct mail_index_view *view, uint32_t seq); 34 uint64_t mail_index_modseq_lookup_flags(struct mail_index_view *view, 35 enum mail_flags flags_mask, 36 uint32_t seq); 37 uint64_t mail_index_modseq_lookup_keywords(struct mail_index_view *view, 38 const struct mail_keywords *keywords, 39 uint32_t seq); 40 int mail_index_modseq_set(struct mail_index_view *view, 41 uint32_t seq, uint64_t min_modseq); 42 43 struct mail_index_modseq_sync * 44 mail_index_modseq_sync_begin(struct mail_index_sync_map_ctx *sync_map_ctx); 45 void mail_index_modseq_sync_end(struct mail_index_modseq_sync **ctx); 46 47 void mail_index_modseq_sync_map_replaced(struct mail_index_modseq_sync *ctx); 48 void mail_index_modseq_hdr_update(struct mail_index_modseq_sync *ctx); 49 void mail_index_modseq_append(struct mail_index_modseq_sync *ctx, uint32_t seq); 50 void mail_index_modseq_expunge(struct mail_index_modseq_sync *ctx, 51 uint32_t seq1, uint32_t seq2); 52 void mail_index_modseq_update_flags(struct mail_index_modseq_sync *ctx, 53 enum mail_flags flags_mask, 54 uint32_t seq1, uint32_t seq2); 55 void mail_index_modseq_update_keyword(struct mail_index_modseq_sync *ctx, 56 unsigned int keyword_idx, 57 uint32_t seq1, uint32_t seq2); 58 void mail_index_modseq_reset_keywords(struct mail_index_modseq_sync *ctx, 59 uint32_t seq1, uint32_t seq2); 60 61 struct mail_index_map_modseq * 62 mail_index_map_modseq_clone(const struct mail_index_map_modseq *mmap); 63 void mail_index_map_modseq_free(struct mail_index_map_modseq **mmap); 64 65 bool mail_index_modseq_get_next_log_offset(struct mail_index_view *view, 66 uint64_t modseq, uint32_t *log_seq_r, 67 uoff_t *log_offset_r); 68 69 #endif 70