imap: expose folders as mailboxes

This commit is contained in:
Simon Ser 2020-01-29 14:59:45 +01:00
parent cffd3cd13a
commit 5fb5ec9775
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 35 additions and 8 deletions

View File

@ -31,6 +31,22 @@ type mailbox struct {
deleted map[string]struct{}
}
func newMailbox(name string, label string, flags []string, u *user) (*mailbox, error) {
mboxDB, err := u.db.Mailbox(label)
if err != nil {
return nil, err
}
return &mailbox{
name: name,
label: label,
flags: flags,
u: u,
db: mboxDB,
deleted: make(map[string]struct{}),
}, nil
}
func (mbox *mailbox) Name() string {
return mbox.name
}

View File

@ -110,18 +110,29 @@ func (u *user) initMailboxes() error {
u.mailboxes = make(map[string]*mailbox)
for _, data := range systemMailboxes {
mboxDB, err := u.db.Mailbox(data.label)
var err error
u.mailboxes[data.label], err = newMailbox(data.name, data.label, data.flags, u)
if err != nil {
return err
}
}
labels, err := u.c.ListLabels()
if err != nil {
return err
}
u.mailboxes[data.label] = &mailbox{
name: data.name,
label: data.label,
flags: data.flags,
u: u,
db: mboxDB,
deleted: make(map[string]struct{}),
for _, label := range labels {
if label.Exclusive != 1 {
continue
}
if _, ok := u.mailboxes[label.ID]; ok {
continue
}
u.mailboxes[label.ID], err = newMailbox(label.Name, label.ID, nil, u)
if err != nil {
return err
}
}