From c2697725ead29c3c108a8e5f7a9f6ab7519ed7c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 4 Jun 2023 21:55:50 +0200 Subject: Add new config option to set max number of IMAP connections. Default is 5 (as was the hard-coded value before). Closes issue #98. --- internal/imap/client.go | 30 ++++++++++++++---------------- internal/imap/imap.go | 6 +++--- 2 files changed, 17 insertions(+), 19 deletions(-) (limited to 'internal') diff --git a/internal/imap/client.go b/internal/imap/client.go index 83903fa..4a0a0d8 100644 --- a/internal/imap/client.go +++ b/internal/imap/client.go @@ -13,8 +13,6 @@ import ( "github.com/Necoro/feed2imap-go/pkg/log" ) -const numberConns = 5 - type connConf struct { host string delimiter string @@ -23,13 +21,13 @@ type connConf struct { type Client struct { connConf - mailboxes *mailboxes - commander *commander - connections [numberConns]*connection - idxCounter int - connChannel chan *connection - connLock sync.Mutex - disconnected bool + mailboxes *mailboxes + commander *commander + connections []*connection + maxConnections int + connChannel chan *connection + connLock sync.Mutex + disconnected bool } var dialer imapClient.Dialer @@ -107,9 +105,7 @@ func (cl *Client) Disconnect() { func (cl *Client) createConnection(c *imapClient.Client) *connection { - cl.idxCounter++ - - if cl.idxCounter >= len(cl.connections) { + if len(cl.connections) == cl.maxConnections { panic("Too many connections") } @@ -121,13 +117,15 @@ func (cl *Client) createConnection(c *imapClient.Client) *connection { c: client, } - cl.connections[cl.idxCounter] = conn + cl.connections = append(cl.connections, conn) return conn } -func newClient() *Client { +func newClient(maxConnections int) *Client { return &Client{ - mailboxes: NewMailboxes(), - connChannel: make(chan *connection, 0), + mailboxes: NewMailboxes(), + connChannel: make(chan *connection, 0), + connections: make([]*connection, 0, maxConnections), + maxConnections: maxConnections, } } diff --git a/internal/imap/imap.go b/internal/imap/imap.go index a44a513..80a37a1 100644 --- a/internal/imap/imap.go +++ b/internal/imap/imap.go @@ -7,10 +7,10 @@ import ( "github.com/Necoro/feed2imap-go/pkg/log" ) -func Connect(url config.Url) (*Client, error) { +func Connect(url config.Url, maxConnections int) (*Client, error) { var err error - client := newClient() + client := newClient(maxConnections) client.host = url.Host defer func() { if err != nil { @@ -41,7 +41,7 @@ func Connect(url config.Url) (*Client, error) { } // the other connections - for i := 1; i < len(client.connections); i++ { + for i := 1; i < client.maxConnections; i++ { go func(id int) { if _, err := client.connect(url); err != nil { // explicitly new var 'err', b/c these are now harmless log.Warnf("connecting #%d: %s", id, err) -- cgit v1.2.3