39 lines
643 B
Go
39 lines
643 B
Go
package responses
|
|
|
|
import (
|
|
"github.com/emersion/go-imap"
|
|
)
|
|
|
|
// An IDLE response.
|
|
type Idle struct {
|
|
RepliesCh chan []byte
|
|
Stop <-chan struct{}
|
|
|
|
gotContinuationReq bool
|
|
}
|
|
|
|
func (r *Idle) Replies() <-chan []byte {
|
|
return r.RepliesCh
|
|
}
|
|
|
|
func (r *Idle) stop() {
|
|
r.RepliesCh <- []byte("DONE\r\n")
|
|
}
|
|
|
|
func (r *Idle) Handle(resp imap.Resp) error {
|
|
// Wait for a continuation request
|
|
if _, ok := resp.(*imap.ContinuationReq); ok && !r.gotContinuationReq {
|
|
r.gotContinuationReq = true
|
|
|
|
// We got a continuation request, wait for r.Stop to be closed
|
|
go func() {
|
|
<-r.Stop
|
|
r.stop()
|
|
}()
|
|
|
|
return nil
|
|
}
|
|
|
|
return ErrUnhandled
|
|
}
|