diff options
Diffstat (limited to 'worker/imap')
-rw-r--r-- | worker/imap/worker.go | 44 |
1 files changed, 3 insertions, 41 deletions
diff --git a/worker/imap/worker.go b/worker/imap/worker.go index 4e6bc52a..0f1c38d6 100644 --- a/worker/imap/worker.go +++ b/worker/imap/worker.go @@ -56,10 +56,6 @@ type IMAPWorker struct { worker *types.Worker // Map of sequence numbers to UIDs, index 0 is seq number 1 seqMap []uint32 - // automatic reconnect - loggingOut bool - loggedOut <-chan struct{} - reconnecting bool } func NewIMAPWorker(worker *types.Worker) (types.Backend, error) { @@ -73,10 +69,7 @@ func NewIMAPWorker(worker *types.Worker) (types.Backend, error) { func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error { if w.client != nil && w.client.State() == imap.SelectedState { - if w.idleStop != nil { - close(w.idleStop) - w.idleStop = nil - } + close(w.idleStop) if err := <-w.idleDone; err != nil { w.worker.PostMessage(&types.Error{Error: err}, nil) } @@ -162,27 +155,21 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error { } } case *types.Connect: - if w.client != nil && w.client.State() == imap.SelectedState && !w.reconnecting { + if w.client != nil && w.client.State() == imap.SelectedState { return fmt.Errorf("Already connected") } - w.loggingOut = false c, err := w.connect() if err != nil { - if !w.reconnecting { - go w.tryReconnect() - } return err } + c.Updates = w.updates - w.loggedOut = c.LoggedOut() w.client = &imapClient{c, sortthread.NewThreadClient(c), sortthread.NewSortClient(c)} w.worker.PostMessage(&types.Done{types.RespondTo(msg)}, nil) case *types.Disconnect: - w.reconnecting = false if w.client == nil || w.client.State() != imap.SelectedState { return fmt.Errorf("Not connected") } - w.loggingOut = true if err := w.client.Logout(); err != nil { return err } @@ -391,25 +378,6 @@ func (w *IMAPWorker) setKeepaliveParameters(conn *net.TCPConn) error { return err } -func (w *IMAPWorker) tryReconnect() { - w.reconnecting = true - for w.reconnecting { - w.worker.Logger.Printf("IMAP reconnection in 2 seconds...\n") - time.Sleep(2 * time.Second) - c := make(chan types.WorkerMessage) - w.worker.PostAction(&types.Connect{}, func(m types.WorkerMessage) { - c <- m - }) - result := <-c - switch result.(type) { - case *types.Done: - w.reconnecting = false - case *types.Error: - w.worker.Logger.Printf("IMAP connection failed\n") - } - } -} - func (w *IMAPWorker) Run() { for { select { @@ -427,12 +395,6 @@ func (w *IMAPWorker) Run() { } case update := <-w.updates: w.handleImapUpdate(update) - case <-w.loggedOut: - w.loggedOut = nil - if !w.loggingOut && !w.reconnecting { - w.reconnecting = true - go w.tryReconnect() - } } } } |