imap: add support for EXPUNGE
This commit is contained in:
parent
0fdabd4447
commit
4f14e3ba81
|
@ -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
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ func (u *user) initMailboxes() error {
|
|||
flags: data.flags,
|
||||
u: u,
|
||||
db: mboxDB,
|
||||
deleted: make(map[string]struct{}),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue