⚲
Project
General
Profile
Sign in
Register
Home
Projects
Help
Search
:
Ruby master
All Projects
Ruby
»
Ruby master
Overview
Activity
Roadmap
Issues
Repository
Like
Download (1.92 KB)
Bug #5190
» imap_idle_fix.rb
hugobarauna (Hugo Baraúna)
, 08/12/2011 10:10 PM
module
Net
class
IMAP
def
receive_responses
connection_closed
=
false
until
connection_closed
synchronize
do
@exception
=
nil
end
begin
resp
=
get_response
rescue
Exception
=>
e
synchronize
do
@sock
.
close
@exception
=
e
end
break
end
unless
resp
synchronize
do
@exception
=
EOFError
.
new
(
"end of file reached"
)
end
break
end
begin
synchronize
do
case
resp
when
TaggedResponse
@tagged_responses
[
resp
.
tag
]
=
resp
@tagged_response_arrival
.
broadcast
if
resp
.
tag
==
@logout_command_tag
return
end
when
UntaggedResponse
record_response
(
resp
.
name
,
resp
.
data
)
if
resp
.
data
.
instance_of?
(
ResponseText
)
&&
(
code
=
resp
.
data
.
code
)
record_response
(
code
.
name
,
code
.
data
)
end
if
resp
.
name
==
"BYE"
&&
@logout_command_tag
.
nil?
@sock
.
close
@exception
=
ByeResponseError
.
new
(
resp
)
connection_closed
=
true
end
when
ContinuationRequest
@continuation_request_arrival
.
signal
end
@response_handlers
.
each
do
|
handler
|
handler
.
call
(
resp
)
end
end
rescue
Exception
=>
e
@exception
=
e
synchronize
do
@tagged_response_arrival
.
broadcast
@continuation_request_arrival
.
broadcast
end
end
end
synchronize
do
@tagged_response_arrival
.
broadcast
@continuation_request_arrival
.
broadcast
# I added the line below in order to release a possible blocked idle command
@idle_done_cond
.
signal
if
@idle_done_cond
end
end
end
end
« Previous
1
2
Next »
(1-1/2)
Loading...