maildir-uidlist.h revision 87c9068892d6e298e488a059136a98dbdf7dec4d
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa#ifndef __MAILDIR_UIDLI3ST_H
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa#define __MAILDIR_UIDLIST_H
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa#define MAILDIR_UIDLIST_NAME "dovecot-uidlist"
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
b1fe9054ad7c7192fe4c474363247dad15963e99Eugen Kuksastruct maildir_uidlist_sync_ctx;
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaenum maildir_uidlist_sync_flags {
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_SYNC_PARTIAL = 0x01
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa};
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaenum maildir_uidlist_rec_flag {
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_REC_FLAG_NEW_DIR = 0x01,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_REC_FLAG_MOVED = 0x02,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_REC_FLAG_RECENT = 0x04,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_REC_FLAG_NONSYNCED = 0x08,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa MAILDIR_UIDLIST_REC_FLAG_RACING = 0x10
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa};
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_lock(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_try_lock(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_lock_touch(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_unlock(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksabool maildir_uidlist_is_locked(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksastruct maildir_uidlist *maildir_uidlist_init(struct maildir_mailbox *mbox);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_deinit(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Returns -1 if error, 0 if file is broken or lost, 1 if ok. */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_refresh(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Returns uidlist record for given filename, or NULL if not found. */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaconst char *
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksamaildir_uidlist_lookup(struct maildir_uidlist *uidlist, uint32_t uid,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa enum maildir_uidlist_rec_flag *flags_r);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Returns TRUE if mail with given UID is recent. */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksabool maildir_uidlist_is_recent(struct maildir_uidlist *uidlist, uint32_t uid);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Returns number of recent messages. */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksauint32_t maildir_uidlist_get_recent_count(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksauint32_t maildir_uidlist_get_uid_validity(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksauint32_t maildir_uidlist_get_next_uid(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_set_uid_validity(struct maildir_uidlist *uidlist,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa uint32_t uid_validity, uint32_t next_uid);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Sync uidlist with what's actually on maildir. Returns same as
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa maildir_uidlist_lock(). */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_sync_init(struct maildir_uidlist *uidlist,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa enum maildir_uidlist_sync_flags sync_flags,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa struct maildir_uidlist_sync_ctx **sync_ctx_r);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Returns 1 = ok, -1 = error, 0 = new file and dovecot-uidlist is locked */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_sync_next_pre(struct maildir_uidlist_sync_ctx *ctx,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *filename);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_sync_next(struct maildir_uidlist_sync_ctx *ctx,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *filename,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa enum maildir_uidlist_rec_flag flags);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaconst char *
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksamaildir_uidlist_sync_get_full_filename(struct maildir_uidlist_sync_ctx *ctx,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *filename);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_sync_finish(struct maildir_uidlist_sync_ctx *ctx);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx **ctx);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaconst char *
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksamaildir_uidlist_get_full_filename(struct maildir_uidlist *uidlist,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *filename);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_add_flags(struct maildir_uidlist *uidlist,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *filename,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa enum maildir_uidlist_rec_flag flags);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* List all maildir files. */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksastruct maildir_uidlist_iter_ctx *
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksamaildir_uidlist_iter_init(struct maildir_uidlist *uidlist);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksaint maildir_uidlist_iter_next(struct maildir_uidlist_iter_ctx *ctx,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa uint32_t *uid_r,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa enum maildir_uidlist_rec_flag *flags_r,
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char **filename_r);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksavoid maildir_uidlist_iter_deinit(struct maildir_uidlist_iter_ctx *ctx);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa#endif
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa