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
total, unread int
deleted map[string]struct{}
}
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)
}
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 {
return err
@ -460,5 +470,18 @@ func (mbox *mailbox) MoveMessages(uid bool, seqSet *imap.SeqSet, destName string
}
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,
u: u,
db: mboxDB,
deleted: make(map[string]struct{}),
}
}