imap: add support for EXPUNGE

This commit is contained in:
emersion 2018-01-12 22:09:43 +01:00
parent 0fdabd4447
commit 4f14e3ba81
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 26 additions and 2 deletions

View File

@ -28,6 +28,7 @@ type mailbox struct {
initializedLock sync.Mutex initializedLock sync.Mutex
total, unread int total, unread int
deleted map[string]struct{}
} }
func (mbox *mailbox) Name() string { func (mbox *mailbox) Name() string {
@ -404,7 +405,16 @@ func (mbox *mailbox) UpdateMessagesFlags(uid bool, seqSet *imap.SeqSet, op imap.
err = mbox.u.c.UnlabelMessages(protonmail.LabelStarred, apiIDs) err = mbox.u.c.UnlabelMessages(protonmail.LabelStarred, apiIDs)
} }
case imap.DeletedFlag: case imap.DeletedFlag:
// TODO switch op {
case imap.SetFlags, imap.AddFlags:
for _, apiID := range apiIDs {
mbox.deleted[apiID] = struct{}{}
}
case imap.RemoveFlags:
for _, apiID := range apiIDs {
delete(mbox.deleted, apiID)
}
}
} }
if err != nil { if err != nil {
return err return err
@ -460,5 +470,18 @@ func (mbox *mailbox) MoveMessages(uid bool, seqSet *imap.SeqSet, destName string
} }
func (mbox *mailbox) Expunge() error { func (mbox *mailbox) Expunge() error {
return errNotYetImplemented // TODO if err := mbox.init(); err != nil {
return err
}
apiIDs := make([]string, 0, len(mbox.deleted))
for apiID := range mbox.deleted {
apiIDs = append(apiIDs, apiID)
}
if err := mbox.u.c.DeleteMessages(apiIDs); err != nil {
return err
}
return nil
} }

View File

@ -85,6 +85,7 @@ func (u *user) initMailboxes() error {
flags: data.flags, flags: data.flags,
u: u, u: u,
db: mboxDB, db: mboxDB,
deleted: make(map[string]struct{}),
} }
} }