diff options
Diffstat (limited to 'worker/imap/imap.go')
-rw-r--r-- | worker/imap/imap.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/worker/imap/imap.go b/worker/imap/imap.go index 28bac93..06bcd00 100644 --- a/worker/imap/imap.go +++ b/worker/imap/imap.go @@ -2,6 +2,8 @@ package imap import ( "github.com/emersion/go-imap" + + "git.sr.ht/~sircmpwn/aerc/models" ) func toSeqSet(uids []uint32) *imap.SeqSet { @@ -11,3 +13,76 @@ func toSeqSet(uids []uint32) *imap.SeqSet { } return &set } + +func translateBodyStructure(bs *imap.BodyStructure) *models.BodyStructure { + if bs == nil { + return nil + } + var parts []*models.BodyStructure + for _, part := range bs.Parts { + parts = append(parts, translateBodyStructure(part)) + } + return &models.BodyStructure{ + MIMEType: bs.MIMEType, + MIMESubType: bs.MIMESubType, + Params: bs.Params, + Description: bs.Description, + Encoding: bs.Encoding, + Parts: parts, + Disposition: bs.Disposition, + DispositionParams: bs.DispositionParams, + } +} + +func translateEnvelope(e *imap.Envelope) *models.Envelope { + if e == nil { + return nil + } + return &models.Envelope{ + Date: e.Date, + Subject: e.Subject, + From: translateAddresses(e.From), + ReplyTo: translateAddresses(e.ReplyTo), + To: translateAddresses(e.To), + Cc: translateAddresses(e.Cc), + Bcc: translateAddresses(e.Bcc), + MessageId: e.MessageId, + } +} + +func translateAddress(a *imap.Address) *models.Address { + if a == nil { + return nil + } + return &models.Address{ + Name: a.PersonalName, + Mailbox: a.MailboxName, + Host: a.HostName, + } +} + +func translateAddresses(addrs []*imap.Address) []*models.Address { + var converted []*models.Address + for _, addr := range addrs { + converted = append(converted, translateAddress(addr)) + } + return converted +} + +var flagMap = map[string]models.Flag{ + imap.SeenFlag: models.SeenFlag, + imap.RecentFlag: models.RecentFlag, + imap.AnsweredFlag: models.AnsweredFlag, + imap.DeletedFlag: models.DeletedFlag, + imap.FlaggedFlag: models.FlaggedFlag, +} + +func translateFlags(imapFlags []string) []models.Flag { + var flags []models.Flag + for _, imapFlag := range imapFlags { + if flag, ok := flagMap[imapFlag]; ok { + flags = append(flags, flag) + } + } + return flags +} |