1package idle
2
3import (
4	"github.com/emersion/go-imap"
5	"github.com/emersion/go-imap/responses"
6)
7
8// An IDLE response.
9type Response struct {
10	RepliesCh chan []byte
11	Stop   <-chan struct{}
12
13	gotContinuationReq bool
14}
15
16func (r *Response) Replies() <-chan []byte {
17	return r.RepliesCh
18}
19
20func (r *Response) stop() {
21	r.RepliesCh <- []byte(doneLine + "\r\n")
22}
23
24func (r *Response) Handle(resp imap.Resp) error {
25	// Wait for a continuation request
26	if _, ok := resp.(*imap.ContinuationReq); ok && !r.gotContinuationReq {
27		r.gotContinuationReq = true
28
29		// We got a continuation request, wait for r.Stop to be closed
30		go func() {
31			<-r.Stop
32			r.stop()
33		}()
34
35		return nil
36	}
37
38	return responses.ErrUnhandled
39}
40