Mercurial > dovecot > core-2.2
view src/lib-storage/mailbox-list-notify.h @ 19117:fa979ccfa34c
Mailbox list notify API changed to return multiple events at once.
This fixes some issues where a single event could actually trigger multiple
different kinds of events.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 07 Sep 2015 23:55:31 +0300 |
parents | fcd480c4a0db |
children | c5eae96dcd71 |
line wrap: on
line source
#ifndef MAILBOX_LIST_NOTIFY_H #define MAILBOX_LIST_NOTIFY_H #include "guid.h" struct mailbox_list_notify; enum mailbox_list_notify_event { MAILBOX_LIST_NOTIFY_CREATE = 0x01, MAILBOX_LIST_NOTIFY_DELETE = 0x02, MAILBOX_LIST_NOTIFY_RENAME = 0x04, MAILBOX_LIST_NOTIFY_SUBSCRIBE = 0x08, MAILBOX_LIST_NOTIFY_UNSUBSCRIBE = 0x10, MAILBOX_LIST_NOTIFY_UIDVALIDITY = 0x20, MAILBOX_LIST_NOTIFY_APPENDS = 0x40, MAILBOX_LIST_NOTIFY_EXPUNGES = 0x80, MAILBOX_LIST_NOTIFY_SEEN_CHANGES = 0x100, MAILBOX_LIST_NOTIFY_MODSEQ_CHANGES = 0x200 #define MAILBOX_LIST_NOTIFY_STATUS \ (MAILBOX_LIST_NOTIFY_APPENDS | \ MAILBOX_LIST_NOTIFY_EXPUNGES | \ MAILBOX_LIST_NOTIFY_SEEN_CHANGES | \ MAILBOX_LIST_NOTIFY_MODSEQ_CHANGES) }; struct mailbox_list_notify { struct mailbox_list *list; enum mailbox_list_notify_event mask; }; struct mailbox_list_notify_rec { /* Each record can contain multiple events */ enum mailbox_list_notify_event events; /* For all events: */ const char *storage_name, *vname; /* For selectable mailboxes: */ guid_128_t guid; /* For rename: */ const char *old_vname; }; /* Monitor for specified changes in the mailbox list. Returns 0 if ok, -1 if notifications aren't supported. */ int mailbox_list_notify_init(struct mailbox_list *list, enum mailbox_list_notify_event mask, struct mailbox_list_notify **notify_r); void mailbox_list_notify_deinit(struct mailbox_list_notify **notify); /* Get the next change. Returns 1 if record was returned, 0 if there are no more changes currently or -1 if some error occurred */ int mailbox_list_notify_next(struct mailbox_list_notify *notify, const struct mailbox_list_notify_rec **rec_r); /* Call the specified callback when something changes. */ void mailbox_list_notify_wait(struct mailbox_list_notify *notify, void (*callback)(void *context), void *context); #endif