class IMAP

Public Instance Methods

idle(&response_handler) click to toggle source

Sends an IDLE command that waits for notifications of new or expunged messages. Yields responses from the server during the IDLE.

Use idle_done to leave IDLE.

# File lib/net/imap/idle.rb, line 11
def idle(&response_handler)
  raise LocalJumpError, "no block given" unless response_handler

  response = nil

  synchronize do
    tag = Thread.current[:net_imap_tag] = generate_tag
    put_string "#{tag} IDLE#{CRLF}"

    begin
      add_response_handler response_handler

      @idle_done_cond = new_cond
      @idle_done_cond.wait
      @idle_done_cond = nil
    ensure
      remove_response_handler response_handler
      put_string "DONE#{CRLF}"
      response = get_tagged_response tag
    end
  end

  response
end
idle_done() click to toggle source

Leaves IDLE

# File lib/net/imap/idle.rb, line 39
def idle_done
  raise Net::IMAP::Error, 'not during idle' unless @idle_done_cond

  synchronize do
    @idle_done_cond.signal
  end
end