aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/emersion/go-imap/responses/idle.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/emersion/go-imap/responses/idle.go')
-rw-r--r--vendor/github.com/emersion/go-imap/responses/idle.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/github.com/emersion/go-imap/responses/idle.go b/vendor/github.com/emersion/go-imap/responses/idle.go
new file mode 100644
index 0000000..b5efcac
--- /dev/null
+++ b/vendor/github.com/emersion/go-imap/responses/idle.go
@@ -0,0 +1,38 @@
+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
+}