list_mailboxes.go 780 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package imaputils
  2. import (
  3. "git.sr.ht/~blallo/papero/config"
  4. "github.com/emersion/go-imap"
  5. )
  6. func ListMailboxes(conf *config.AccountData, debug bool) ([]*imap.MailboxInfo, error) {
  7. var empty []*imap.MailboxInfo
  8. conn := NewConnection(conf)
  9. err := conn.Start(debug)
  10. if err != nil {
  11. return empty, err
  12. }
  13. defer conn.Close()
  14. return ListMailboxesInSession(conn)
  15. }
  16. func ListMailboxesInSession(conn *IMAPConnection) ([]*imap.MailboxInfo, error) {
  17. var mailboxes []*imap.MailboxInfo
  18. mboxChan := make(chan *imap.MailboxInfo, 10)
  19. done := make(chan error, 1)
  20. go func() {
  21. done <- conn.client.List("", "*", mboxChan)
  22. }()
  23. for m := range mboxChan {
  24. mailboxes = append(mailboxes, m)
  25. }
  26. if err := <-done; err != nil {
  27. return mailboxes, err
  28. }
  29. return mailboxes, nil
  30. }