diff options
Diffstat (limited to '')
-rw-r--r-- | src/imap/imap-notify.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/imap/imap-notify.h b/src/imap/imap-notify.h new file mode 100644 index 0000000..936d622 --- /dev/null +++ b/src/imap/imap-notify.h @@ -0,0 +1,75 @@ +#ifndef IMAP_NOTIFY_H +#define IMAP_NOTIFY_H + +enum imap_notify_type { + IMAP_NOTIFY_TYPE_SUBSCRIBED, + IMAP_NOTIFY_TYPE_SUBTREE, + IMAP_NOTIFY_TYPE_MAILBOX +}; + +enum imap_notify_event { + IMAP_NOTIFY_EVENT_MESSAGE_NEW = 0x01, + IMAP_NOTIFY_EVENT_MESSAGE_EXPUNGE = 0x02, + IMAP_NOTIFY_EVENT_FLAG_CHANGE = 0x04, + IMAP_NOTIFY_EVENT_ANNOTATION_CHANGE = 0x08, + IMAP_NOTIFY_EVENT_MAILBOX_NAME = 0x10, + IMAP_NOTIFY_EVENT_SUBSCRIPTION_CHANGE = 0x20, + IMAP_NOTIFY_EVENT_MAILBOX_METADATA_CHANGE = 0x40, + IMAP_NOTIFY_EVENT_SERVER_METADATA_CHANGE = 0x80 +}; +#define UNSUPPORTED_EVENTS \ + (IMAP_NOTIFY_EVENT_ANNOTATION_CHANGE | \ + IMAP_NOTIFY_EVENT_MAILBOX_METADATA_CHANGE | \ + IMAP_NOTIFY_EVENT_SERVER_METADATA_CHANGE) + +struct imap_notify_mailboxes { + enum imap_notify_event events; + enum imap_notify_type type; + ARRAY_TYPE(const_string) names; +}; + +struct imap_notify_namespace { + struct imap_notify_context *ctx; + struct mail_namespace *ns; + + struct mailbox_list_notify *notify; + ARRAY(struct imap_notify_mailboxes) mailboxes; +}; + +struct imap_notify_context { + pool_t pool; + struct client *client; + const char *error; + + ARRAY(struct imap_notify_namespace) namespaces; + enum imap_notify_event selected_events; + enum imap_notify_event global_used_events; + unsigned int global_max_mailbox_names; + + struct imap_fetch_context *fetch_ctx; + struct timeout *to_watch; + + bool have_subscriptions:1; + bool selected_set:1; + bool selected_immediate_expunges:1; + bool send_immediate_status:1; + bool watching_mailbox:1; + bool notifying:1; +}; + +bool imap_notify_match_mailbox(struct imap_notify_namespace *notify_ns, + const struct imap_notify_mailboxes *notify_boxes, + const char *vname); + +int imap_client_notify_newmails(struct client *client); +void imap_client_notify_finished(struct client *client); + +void imap_client_notify_command_allocated(struct client *client); +void imap_client_notify_command_freed(struct client *client); + +int imap_notify_begin(struct imap_notify_context *ctx); +void imap_notify_deinit(struct imap_notify_context **ctx); + +void imap_notify_flush(struct imap_notify_context *ctx); + +#endif |