NeoMutt  2022-04-29-81-g9c5a59
Teaching an old dog new tricks
account.h File Reference

A group of associated Mailboxes. More...

#include <stdbool.h>
#include "mutt/lib.h"
#include "mailbox.h"
+ Include dependency graph for account.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Account
 A group of associated Mailboxes. More...
struct  EventAccount
 An Event that happened to an Account. More...


 Types of Account Event. More...


 TAILQ_HEAD (AccountList, Account)
void account_free (struct Account **ptr)
 Free an Account. More...
bool account_mailbox_add (struct Account *a, struct Mailbox *m)
 Add a Mailbox to an Account. More...
bool account_mailbox_remove (struct Account *a, struct Mailbox *m)
 Remove a Mailbox from an Account. More...
struct Accountaccount_new (const char *name, struct ConfigSubset *sub)
 Create a new Account. More...

Detailed Description

A group of associated Mailboxes.

  • Michael R. Elkins
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see

Definition in file account.h.

Enumeration Type Documentation

◆ NotifyAccount

Types of Account Event.

Observers of NT_ACCOUNT will be passed an EventAccount.

Delete notifications are sent before the object is deleted.
Other notifications are sent after the event.

Account has been added.


Account is about to be deleted.


All Accounts are about to be deleted.


Account has been changed.

Definition at line 67 of file account.h.

68 {
73 };
Account has been added.
Definition: account.h:69
Account has been changed.
Definition: account.h:72
Account is about to be deleted.
Definition: account.h:70
All Accounts are about to be deleted.
Definition: account.h:71

Function Documentation


TAILQ_HEAD ( AccountList  ,

◆ account_free()

void account_free ( struct Account **  ptr)

Free an Account.

[out]ptrAccount to free

Definition at line 141 of file account.c.

142 {
143  if (!ptr || !*ptr)
144  return;
146  struct Account *a = *ptr;
148  mutt_debug(LL_NOTIFY, "NT_ACCOUNT_DELETE: %s %p\n", mailbox_get_type_name(a->type), a);
149  struct EventAccount ev_a = { a };
152  account_mailbox_remove(a, NULL);
154  if (a->adata && a->adata_free)
155  a->adata_free(&a->adata);
157  cs_subset_free(&a->sub);
158  FREE(&a->name);
159  notify_free(&a->notify);
161  FREE(ptr);
162 }
bool account_mailbox_remove(struct Account *a, struct Mailbox *m)
Remove a Mailbox from an Account.
Definition: account.c:96
#define mutt_debug(LEVEL,...)
Definition: logging.h:84
Log of notifications.
Definition: logging.h:45
const char * mailbox_get_type_name(enum MailboxType type)
Get the type of a Mailbox.
Definition: mailbox.c:310
#define FREE(x)
Definition: memory.h:40
bool notify_send(struct Notify *notify, enum NotifyType event_type, int event_subtype, void *event_data)
Send out a notification message.
Definition: notify.c:171
void notify_free(struct Notify **ptr)
Free a notification handler.
Definition: notify.c:73
Account has changed, NotifyAccount, EventAccount.
Definition: notify_type.h:36
A group of associated Mailboxes.
Definition: account.h:37
enum MailboxType type
Type of Mailboxes this Account contains.
Definition: account.h:38
char * name
Name of Account.
Definition: account.h:39
struct Notify * notify
Notifications: NotifyAccount, EventAccount.
Definition: account.h:42
void(* adata_free)(void **ptr)
Free the private data attached to the Account.
Definition: account.h:53
struct ConfigSubset * sub
Inherited config items.
Definition: account.h:40
void * adata
Private data (for Mailbox backends)
Definition: account.h:43
An Event that happened to an Account.
Definition: account.h:79
void cs_subset_free(struct ConfigSubset **ptr)
Free a Config Subset.
Definition: subset.c:104
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ account_mailbox_add()

bool account_mailbox_add ( struct Account a,
struct Mailbox m 

Add a Mailbox to an Account.

mMailbox to add
Return values
trueMailbox was added

Definition at line 66 of file account.c.

67 {
68  if (!a || !m)
69  return false;
71  if (a->type == MUTT_UNKNOWN)
72  a->type = m->type;
74  m->account = a;
75  struct MailboxNode *np = mutt_mem_calloc(1, sizeof(*np));
76  np->mailbox = m;
77  STAILQ_INSERT_TAIL(&a->mailboxes, np, entries);
78  mailbox_set_subset(m, a->sub);
81  mutt_debug(LL_NOTIFY, "NT_MAILBOX_ADD: %s %p\n", mailbox_get_type_name(m->type), m);
82  struct EventMailbox ev_m = { m };
84  return true;
85 }
bool mailbox_set_subset(struct Mailbox *m, struct ConfigSubset *sub)
Set a Mailbox's Config Subset.
Definition: mailbox.c:258
Mailbox has been added.
Definition: mailbox.h:170
Mailbox wasn't recognised.
Definition: mailbox.h:44
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
Definition: memory.c:50
void notify_set_parent(struct Notify *notify, struct Notify *parent)
Set the parent notification handler.
Definition: notify.c:93
Mailbox has changed, NotifyMailbox, EventMailbox.
Definition: notify_type.h:49
#define STAILQ_INSERT_TAIL(head, elm, field)
Definition: queue.h:389
struct MailboxList mailboxes
List of Mailboxes.
Definition: account.h:41
An Event that happened to a Mailbox.
Definition: mailbox.h:187
List of Mailboxes.
Definition: mailbox.h:154
struct Mailbox * mailbox
Mailbox in the list.
Definition: mailbox.h:155
enum MailboxType type
Mailbox type.
Definition: mailbox.h:102
struct Notify * notify
Notifications: NotifyMailbox, EventMailbox.
Definition: mailbox.h:145
struct Account * account
Account that owns this Mailbox.
Definition: mailbox.h:128
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ account_mailbox_remove()

bool account_mailbox_remove ( struct Account a,
struct Mailbox m 

Remove a Mailbox from an Account.

mMailbox to remove
Return values
trueOn success
If m is NULL, all the mailboxes will be removed and FREE'd. Otherwise, the specified mailbox is removed from the Account but not FREE'd.

Definition at line 96 of file account.c.

97 {
98  if (!a || STAILQ_EMPTY(&a->mailboxes))
99  return false;
101  if (!m)
102  {
103  mutt_debug(LL_NOTIFY, "NT_MAILBOX_DELETE_ALL\n");
104  struct EventMailbox ev_m = { NULL };
106  }
108  bool result = false;
109  struct MailboxNode *np = NULL;
110  struct MailboxNode *tmp = NULL;
111  STAILQ_FOREACH_SAFE(np, &a->mailboxes, entries, tmp)
112  {
113  if (m && (np->mailbox != m))
114  continue;
116  STAILQ_REMOVE(&a->mailboxes, np, MailboxNode, entries);
117  if (m)
118  {
119  m->account = NULL;
121  }
122  else
123  {
124  // we make it invisible here to force the deletion of the mailbox
125  np->mailbox->visible = false;
126  mailbox_free(&np->mailbox);
127  }
128  FREE(&np);
129  result = true;
130  if (m)
131  break;
132  }
134  return result;
135 }
void mailbox_free(struct Mailbox **ptr)
Free a Mailbox.
Definition: mailbox.c:87
All Mailboxes are about to be deleted.
Definition: mailbox.h:172
#define STAILQ_REMOVE(head, elm, type, field)
Definition: queue.h:402
#define STAILQ_EMPTY(head)
Definition: queue.h:348
#define STAILQ_FOREACH_SAFE(var, head, field, tvar)
Definition: queue.h:362
bool visible
True if a result of "mailboxes".
Definition: mailbox.h:131
Container for Accounts, Notifications.
Definition: neomutt.h:37
struct Notify * notify
Notifications handler.
Definition: neomutt.h:38
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ account_new()

struct Account* account_new ( const char *  name,
struct ConfigSubset sub 

Create a new Account.

nameName for the Account
subParent Config Subset
Return values
ptrNew Account

Definition at line 43 of file account.c.

44 {
45  if (!sub)
46  return NULL;
48  struct Account *a = mutt_mem_calloc(1, sizeof(struct Account));
51  a->notify = notify_new();
52  a->name = mutt_str_dup(name);
53  a->sub = cs_subset_new(name, sub, a->notify);
54  a->sub->cs = sub->cs;
57  return a;
58 }
struct Notify * notify_new(void)
Create a new notifications handler.
Definition: notify.c:60
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:250
#define STAILQ_INIT(head)
Definition: queue.h:372
struct ConfigSet * cs
Parent ConfigSet.
Definition: subset.h:51
enum ConfigScope scope
Scope of Subset, e.g. SET_SCOPE_ACCOUNT.
Definition: subset.h:49
struct ConfigSubset * cs_subset_new(const char *name, struct ConfigSubset *sub_parent, struct Notify *not_parent)
Create a new Config Subset.
Definition: subset.c:144
This Config is Account-specific.
Definition: subset.h:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function: