aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--imap.go49
-rw-r--r--server.go39
2 files changed, 51 insertions, 37 deletions
diff --git a/imap.go b/imap.go
new file mode 100644
index 0000000..e7e7710
--- /dev/null
+++ b/imap.go
@@ -0,0 +1,49 @@
+package koushin
+
+import (
+ "github.com/emersion/go-imap"
+ imapclient "github.com/emersion/go-imap/client"
+)
+
+func (s *Server) connectIMAP() (*imapclient.Client, error) {
+ var c *imapclient.Client
+ var err error
+ if s.imap.tls {
+ c, err = imapclient.DialTLS(s.imap.host, nil)
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ c, err = imapclient.Dial(s.imap.host)
+ if err != nil {
+ return nil, err
+ }
+ if !s.imap.insecure {
+ if err := c.StartTLS(nil); err != nil {
+ c.Close()
+ return nil, err
+ }
+ }
+ }
+
+ return c, err
+}
+
+func listMailboxes(conn *imapclient.Client) ([]*imap.MailboxInfo, error) {
+ ch := make(chan *imap.MailboxInfo, 10)
+ done := make(chan error, 1)
+ go func () {
+ done <- conn.List("", "*", ch)
+ }()
+
+ var mailboxes []*imap.MailboxInfo
+ for mbox := range ch {
+ mailboxes = append(mailboxes, mbox)
+ }
+
+ if err := <-done; err != nil {
+ return nil, err
+ }
+
+ return mailboxes, nil
+}
diff --git a/server.go b/server.go
index 14b9892..f573756 100644
--- a/server.go
+++ b/server.go
@@ -7,7 +7,6 @@ import (
"time"
"github.com/labstack/echo/v4"
- "github.com/emersion/go-imap"
imapclient "github.com/emersion/go-imap/client"
)
@@ -47,30 +46,6 @@ func NewServer(imapURL string) (*Server, error) {
return s, nil
}
-func (s *Server) connectIMAP() (*imapclient.Client, error) {
- var c *imapclient.Client
- var err error
- if s.imap.tls {
- c, err = imapclient.DialTLS(s.imap.host, nil)
- if err != nil {
- return nil, err
- }
- } else {
- c, err = imapclient.Dial(s.imap.host)
- if err != nil {
- return nil, err
- }
- if !s.imap.insecure {
- if err := c.StartTLS(nil); err != nil {
- c.Close()
- return nil, err
- }
- }
- }
-
- return c, err
-}
-
type context struct {
echo.Context
server *Server
@@ -163,18 +138,8 @@ func New(imapURL string) *echo.Echo {
e.GET("/", func(ectx echo.Context) error {
ctx := ectx.(*context)
- ch := make(chan *imap.MailboxInfo, 10)
- done := make(chan error, 1)
- go func () {
- done <- ctx.conn.List("", "*", ch)
- }()
-
- var mailboxes []*imap.MailboxInfo
- for mbox := range ch {
- mailboxes = append(mailboxes, mbox)
- }
-
- if err := <-done; err != nil {
+ mailboxes, err := listMailboxes(ctx.conn)
+ if err != nil {
return err
}