From e9d31b0940793542021b5218e406d6e0c668c185 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 2 Dec 2019 17:58:19 +0100 Subject: [PATCH] Extract IMAP functions into separate file --- imap.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ server.go | 39 ++------------------------------------- 2 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 imap.go 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 }