imap-notify.h revision 4ee00532a265bdfb38539d811fcd12d51210ac35
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen#ifndef IMAP_NOTIFY_H
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#define IMAP_NOTIFY_H
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenenum imap_notify_type {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen IMAP_NOTIFY_TYPE_SUBSCRIBED,
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen IMAP_NOTIFY_TYPE_SUBTREE,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen IMAP_NOTIFY_TYPE_MAILBOX
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen};
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenenum imap_notify_event {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen IMAP_NOTIFY_EVENT_MESSAGE_NEW = 0x01,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen IMAP_NOTIFY_EVENT_MESSAGE_EXPUNGE = 0x02,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen IMAP_NOTIFY_EVENT_FLAG_CHANGE = 0x04,
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen IMAP_NOTIFY_EVENT_ANNOTATION_CHANGE = 0x08,
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen IMAP_NOTIFY_EVENT_MAILBOX_NAME = 0x10,
f6c1297c26b355c4aec2a08978f51ec3efecb351Timo Sirainen IMAP_NOTIFY_EVENT_SUBSCRIPTION_CHANGE = 0x20,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen IMAP_NOTIFY_EVENT_MAILBOX_METADATA_CHANGE = 0x40,
f6c1297c26b355c4aec2a08978f51ec3efecb351Timo Sirainen IMAP_NOTIFY_EVENT_SERVER_METADATA_CHANGE = 0x80
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen};
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen#define UNSUPPORTED_EVENTS \
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen (IMAP_NOTIFY_EVENT_ANNOTATION_CHANGE | \
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen IMAP_NOTIFY_EVENT_MAILBOX_METADATA_CHANGE | \
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen IMAP_NOTIFY_EVENT_SERVER_METADATA_CHANGE)
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainenstruct imap_notify_mailboxes {
ef2b2ef2e6a6eb5e4667f2e63faae8a3b646e8baTimo Sirainen enum imap_notify_event events;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen enum imap_notify_type type;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen ARRAY_TYPE(const_string) names;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen};
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainenstruct imap_notify_namespace {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen struct imap_notify_context *ctx;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen struct mail_namespace *ns;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen struct mailbox_list_notify *notify;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen ARRAY(struct imap_notify_mailboxes) mailboxes;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen};
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenstruct imap_notify_context {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen pool_t pool;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen struct client *client;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen const char *error;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen ARRAY(struct imap_notify_namespace) namespaces;
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen enum imap_notify_event selected_events;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen enum imap_notify_event global_used_events;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int global_max_mailbox_names;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
4ea6c43a08b37f270bd54b5809142246fd118263Timo Sirainen struct imap_fetch_context *fetch_ctx;
bf9ea5404a0094a8fb8199b677d81f803512c44eTimo Sirainen struct timeout *to_watch;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int selected_set:1;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int selected_immediate_expunges:1;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int send_immediate_status:1;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int watching_mailbox:1;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int notifying:1;
4ea6c43a08b37f270bd54b5809142246fd118263Timo Sirainen};
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
bf9ea5404a0094a8fb8199b677d81f803512c44eTimo Sirainenbool imap_notify_match_mailbox(struct imap_notify_namespace *notify_ns,
bf9ea5404a0094a8fb8199b677d81f803512c44eTimo Sirainen const struct imap_notify_mailboxes *notify_boxes,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen const char *vname);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenint imap_client_notify_newmails(struct client *client);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenvoid imap_client_notify_finished(struct client *client);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenvoid imap_client_notify_command_freed(struct client *client);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenint imap_notify_begin(struct imap_notify_context *ctx);
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainenvoid imap_notify_deinit(struct imap_notify_context **ctx);
0df9428baed48afaff90b4d4f03792d2fd756a43Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#endif
a443e5aaf632257bfd1e7aa9b3c42c09512bbe43Timo Sirainen