summaryrefslogtreecommitdiff
path: root/utils/email/folders.go
diff options
context:
space:
mode:
Diffstat (limited to 'utils/email/folders.go')
-rw-r--r--utils/email/folders.go30
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
+}