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