]> granicus.if.org Git - neomutt/commitdiff
notify: add Mailbox Events
authorRichard Russon <rich@flatcap.org>
Tue, 9 Jul 2019 14:23:50 +0000 (15:23 +0100)
committerRichard Russon <rich@flatcap.org>
Sat, 13 Jul 2019 23:25:45 +0000 (00:25 +0100)
account.c
mailbox.h

index 9ababa0098bcf2fd6ce7467272a0d9c6a12f1886..2d7df2d6d1ffb0cc32fd04f952dc02ee4ad689e1 100644 (file)
--- a/account.c
+++ b/account.c
@@ -133,7 +133,10 @@ bool account_mailbox_add(struct Account *a, struct Mailbox *m)
   struct MailboxNode *np = mutt_mem_calloc(1, sizeof(*np));
   np->mailbox = m;
   STAILQ_INSERT_TAIL(&a->mailboxes, np, entries);
+  notify_set_parent(m->notify, a->notify);
 
+  struct EventMailbox ev_m = { m };
+  notify_send(a->notify, NT_MAILBOX, NT_MAILBOX_ADD, IP & ev_m);
   return true;
 }
 
@@ -156,6 +159,8 @@ bool account_mailbox_remove(struct Account *a, struct Mailbox *m)
   {
     if (!m || (np->mailbox == m))
     {
+      struct EventMailbox ev_m = { m };
+      notify_send(a->notify, NT_MAILBOX, NT_MAILBOX_REMOVE, IP & ev_m);
       STAILQ_REMOVE(&a->mailboxes, np, MailboxNode, entries);
       mailbox_free(&np->mailbox);
       FREE(&np);
index f45665fc6f05162e55570c5990a7ed9ef84d09b0..234f476530b7b94077acda3d4715a61be12ac1c9 100644 (file)
--- a/mailbox.h
+++ b/mailbox.h
@@ -146,6 +146,7 @@ struct Mailbox
   void *mdata;                 /**< driver specific data */
   void (*free_mdata)(void **); /**< driver-specific data free function */
 
+  struct Notify *notify;        ///< Notifications handler
   void (*notify2)(struct Mailbox *m, enum MailboxNotification action); ///< Notification callback
   void *ndata; ///< Notification callback private data
 };
@@ -160,6 +161,23 @@ struct MailboxNode
 };
 STAILQ_HEAD(MailboxList, MailboxNode);
 
+/**
+ * struct EventMailbox - An Event that happened to a Mailbox
+ */
+struct EventMailbox
+{
+  struct Mailbox *mailbox; ///< The Mailbox this Event relates to
+};
+
+/**
+ * enum NotifyMailbox - Types of Mailbox Event
+ */
+enum NotifyMailbox
+{
+  NT_MAILBOX_ADD = 1, ///< A new Mailbox has been created
+  NT_MAILBOX_REMOVE,  ///< A Mailbox is about to be destroyed
+};
+
 void            mailbox_free             (struct Mailbox **ptr);
 struct Mailbox *mailbox_new              (void);
 void            mutt_mailbox_changed     (struct Mailbox *m, enum MailboxNotification action);