diff options
Diffstat (limited to 'utils')
| -rw-r--r-- | utils/email/folders.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/utils/email/folders.go b/utils/email/folders.go new file mode 100644 index 0000000..3acffae --- /dev/null +++ b/utils/email/folders.go @@ -0,0 +1,30 @@ +package email + +import ( + "lain/types" + + "github.com/emersion/go-imap" +) + +func FetchFolders(client *types.EmailClient) ([]types.IMAPFolder, error) { + mailboxes := make(chan *imap.MailboxInfo, 10) + done := make(chan error, 1) + + go func() { + done <- client.List("", "*", mailboxes) + }() + + var folders []types.IMAPFolder + for m := range mailboxes { + folders = append(folders, types.IMAPFolder{ + Name: m.Name, + HasChildren: hasAttribute(m.Attributes, "\\HasChildren"), + }) + } + + if err := <-done; err != nil { + return nil, err + } + + return folders, nil +} |
