imap: better \Deleted flag support

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

View File

@ -141,6 +141,14 @@ func (mbox *mailbox) reset() error {
return mbox.db.Reset() return mbox.db.Reset()
} }
func (mbox *mailbox) fetchFlags(msg *protonmail.Message) []string {
flags := fetchFlags(msg)
if _, ok := mbox.deleted[msg.ID]; ok {
flags = append(flags, imap.DeletedFlag)
}
return flags
}
func (mbox *mailbox) fetchMessage(isUid bool, id uint32, items []imap.FetchItem) (*imap.Message, error) { func (mbox *mailbox) fetchMessage(isUid bool, id uint32, items []imap.FetchItem) (*imap.Message, error) {
var apiID string var apiID string
var err error var err error
@ -175,7 +183,7 @@ func (mbox *mailbox) fetchMessage(isUid bool, id uint32, items []imap.FetchItem)
} }
fetched.BodyStructure = bs fetched.BodyStructure = bs
case imap.FetchFlags: case imap.FetchFlags:
fetched.Flags = fetchFlags(msg) fetched.Flags = mbox.fetchFlags(msg)
case imap.FetchInternalDate: case imap.FetchInternalDate:
fetched.InternalDate = time.Unix(msg.Time, 0) fetched.InternalDate = time.Unix(msg.Time, 0)
case imap.FetchRFC822Size: case imap.FetchRFC822Size:
@ -271,7 +279,7 @@ func (mbox *mailbox) SearchMessages(isUID bool, c *imap.SearchCriteria) ([]uint3
} }
flags := make(map[string]bool) flags := make(map[string]bool)
for _, flag := range fetchFlags(msg) { for _, flag := range mbox.fetchFlags(msg) {
flags[flag] = true flags[flag] = true
} }
for _, f := range c.WithFlags { for _, f := range c.WithFlags {
@ -405,6 +413,7 @@ 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: send updates
switch op { switch op {
case imap.SetFlags, imap.AddFlags: case imap.SetFlags, imap.AddFlags:
for _, apiID := range apiIDs { for _, apiID := range apiIDs {

View File

@ -96,6 +96,7 @@ func hasLabel(msg *protonmail.Message, labelID string) bool {
return false return false
} }
// Doesn't support imap.DeletedFlag.
func fetchFlags(msg *protonmail.Message) []string { func fetchFlags(msg *protonmail.Message) []string {
var flags []string var flags []string
if msg.IsRead != 0 { if msg.IsRead != 0 {
@ -112,7 +113,6 @@ func fetchFlags(msg *protonmail.Message) []string {
flags = append(flags, imap.DraftFlag) flags = append(flags, imap.DraftFlag)
} }
} }
// TODO: DeletedFlag
return flags return flags
} }