imap: expose folders as mailboxes
This commit is contained in:
parent
cffd3cd13a
commit
5fb5ec9775
|
@ -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
|
||||
}
|
||||
|
|
27
imap/user.go
27
imap/user.go
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
u.mailboxes[data.label] = &mailbox{
|
||||
name: data.name,
|
||||
label: data.label,
|
||||
flags: data.flags,
|
||||
u: u,
|
||||
db: mboxDB,
|
||||
deleted: make(map[string]struct{}),
|
||||
labels, err := u.c.ListLabels()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue