em-imap 0.2 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of em-imap might be problematic. Click here for more details.
- data/lib/em-imap/client.rb +43 -13
- data/lib/em-imap/connection.rb +4 -4
- data/lib/em-imap.rb +1 -1
- metadata +44 -74
data/lib/em-imap/client.rb
CHANGED
@@ -310,7 +310,7 @@ module EventMachine
|
|
310
310
|
# The same as fetch, but keyed of UIDs instead of sequence numbers.
|
311
311
|
#
|
312
312
|
def uid_fetch(seq, attr="FULL")
|
313
|
-
fetch_internal("UID
|
313
|
+
fetch_internal("UID FETCH", seq, attr)
|
314
314
|
end
|
315
315
|
|
316
316
|
# Update the flags on a message.
|
@@ -371,20 +371,50 @@ module EventMachine
|
|
371
371
|
|
372
372
|
private
|
373
373
|
|
374
|
-
#
|
375
|
-
# See RFC 3501 Section 5.1.3 for more information.
|
374
|
+
# Decode a string from modified UTF-7 format to UTF-8.
|
376
375
|
#
|
377
|
-
|
378
|
-
|
376
|
+
# UTF-7 is a 7-bit encoding of Unicode [UTF7]. IMAP uses a
|
377
|
+
# slightly modified version of this to encode mailbox names
|
378
|
+
# containing non-ASCII characters; see [IMAP] section 5.1.3.
|
379
|
+
#
|
380
|
+
# Net::IMAP does _not_ automatically encode and decode
|
381
|
+
# mailbox names to and from utf7.
|
382
|
+
def to_utf8(s)
|
383
|
+
return force_encoding(s.gsub(/&(.*?)-/n) {
|
384
|
+
if $1.empty?
|
385
|
+
"&"
|
386
|
+
else
|
387
|
+
base64 = $1.tr(",", "/")
|
388
|
+
x = base64.length % 4
|
389
|
+
if x > 0
|
390
|
+
base64.concat("=" * (4 - x))
|
391
|
+
end
|
392
|
+
base64.unpack("m")[0].unpack("n*").pack("U*")
|
393
|
+
end
|
394
|
+
}, "UTF-8")
|
379
395
|
end
|
380
396
|
|
381
|
-
#
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
397
|
+
# Encode a string from UTF-8 format to modified UTF-7.
|
398
|
+
def to_utf7(s)
|
399
|
+
return force_encoding(force_encoding(s, 'UTF-8').gsub(/(&)|([^\x20-\x7e]+)/u) {
|
400
|
+
if $1
|
401
|
+
"&-"
|
402
|
+
else
|
403
|
+
base64 = [$&.unpack("U*").pack("n*")].pack("m")
|
404
|
+
"&" + base64.delete("=\n").tr("/", ",") + "-"
|
405
|
+
end
|
406
|
+
}, "ASCII-8BIT")
|
386
407
|
end
|
387
|
-
|
408
|
+
|
409
|
+
# FIXME: I haven't thought through the ramifications of this yet.
|
410
|
+
def force_encoding(s, encoding)
|
411
|
+
if s.respond_to?(:force_encoding)
|
412
|
+
s.force_encoding(encoding)
|
413
|
+
else
|
414
|
+
s
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
388
418
|
# Send a command that should return a deferrable that succeeds with
|
389
419
|
# a tagged_response.
|
390
420
|
#
|
@@ -459,7 +489,7 @@ module EventMachine
|
|
459
489
|
|
460
490
|
set = Net::IMAP::MessageSet.new(set)
|
461
491
|
|
462
|
-
|
492
|
+
collect_untagged_responses('FETCH', cmd, set, attr).transform do |untagged_responses|
|
463
493
|
untagged_responses.map(&:data)
|
464
494
|
end
|
465
495
|
end
|
@@ -486,7 +516,7 @@ module EventMachine
|
|
486
516
|
when "*", -1, Range
|
487
517
|
Net::IMAP::MessageSet.new(arg)
|
488
518
|
when Array
|
489
|
-
if
|
519
|
+
if arg.inject(true){|bool,item| bool and (item.is_a?(Integer) or item.is_a?(Range))}
|
490
520
|
Net::IMAP::MessageSet.new(arg)
|
491
521
|
else
|
492
522
|
normalize_search_criteria(arg)
|
data/lib/em-imap/connection.rb
CHANGED
@@ -44,7 +44,7 @@ module EventMachine
|
|
44
44
|
if response.is_a?(Net::IMAP::UntaggedResponse) && response.name != "BYE"
|
45
45
|
hello_listener.succeed response
|
46
46
|
else
|
47
|
-
hello_listener.fail Net::IMAP::ResponseParseError.new(response.raw_data)
|
47
|
+
hello_listener.fail Net::IMAP::ResponseParseError.new((RUBY_VERSION[0,3] == "1.8" ? response.raw_data : response))
|
48
48
|
end
|
49
49
|
end.errback do |e|
|
50
50
|
hello_listener.fail e
|
@@ -121,9 +121,9 @@ module EventMachine
|
|
121
121
|
if response.is_a?(Net::IMAP::TaggedResponse) && response.tag == command.tag
|
122
122
|
case response.name
|
123
123
|
when "NO"
|
124
|
-
command.fail Net::IMAP::NoResponseError.new(response.data.text)
|
124
|
+
command.fail Net::IMAP::NoResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.data.text : response))
|
125
125
|
when "BAD"
|
126
|
-
command.fail Net::IMAP::BadResponseError.new(response.data.text)
|
126
|
+
command.fail Net::IMAP::BadResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.data.text : response))
|
127
127
|
else
|
128
128
|
command.succeed response
|
129
129
|
end
|
@@ -155,7 +155,7 @@ module EventMachine
|
|
155
155
|
# to hear any more, so we fail all our listeners.
|
156
156
|
add_response_handler do |response|
|
157
157
|
if response.is_a?(Net::IMAP::UntaggedResponse) && response.name == "BYE"
|
158
|
-
fail Net::IMAP::ByeResponseError.new(response.raw_data)
|
158
|
+
fail Net::IMAP::ByeResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.raw_data : response))
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
data/lib/em-imap.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'net/imap'
|
2
1
|
require 'set'
|
3
2
|
|
4
3
|
require 'rubygems'
|
@@ -6,6 +5,7 @@ require 'eventmachine'
|
|
6
5
|
require 'deferrable_gratification'
|
7
6
|
|
8
7
|
$:.unshift File.dirname( __FILE__ )
|
8
|
+
require 'net/imap'
|
9
9
|
require 'em-imap/listener'
|
10
10
|
require 'em-imap/continuation_synchronisation'
|
11
11
|
require 'em-imap/formatter'
|
metadata
CHANGED
@@ -1,74 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-imap
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
version: "0.2"
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Conrad Irwin
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-03 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: eventmachine
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &15589320 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: deferrable_gratification
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: *15589320
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: deferrable_gratification
|
27
|
+
requirement: &15588820 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
46
33
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rspec
|
50
34
|
prerelease: false
|
51
|
-
|
35
|
+
version_requirements: *15588820
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &15588400 !ruby/object:Gem::Requirement
|
52
39
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
60
44
|
type: :development
|
61
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *15588400
|
62
47
|
description: Allows you to connect to an IMAP4rev1 server in a non-blocking fashion.
|
63
|
-
email:
|
48
|
+
email:
|
64
49
|
- conrad@rapportive.com
|
65
50
|
executables: []
|
66
|
-
|
67
51
|
extensions: []
|
68
|
-
|
69
52
|
extra_rdoc_files: []
|
70
|
-
|
71
|
-
files:
|
53
|
+
files:
|
72
54
|
- lib/em-imap.rb
|
73
55
|
- lib/em-imap/listener.rb
|
74
56
|
- lib/em-imap/formatter.rb
|
@@ -80,41 +62,29 @@ files:
|
|
80
62
|
- lib/em-imap/response_parser.rb
|
81
63
|
- LICENSE.MIT
|
82
64
|
- README.md
|
83
|
-
has_rdoc: true
|
84
65
|
homepage: http://github.com/rapportive-oss/em-imap
|
85
|
-
licenses:
|
66
|
+
licenses:
|
86
67
|
- MIT
|
87
68
|
post_install_message:
|
88
69
|
rdoc_options: []
|
89
|
-
|
90
|
-
require_paths:
|
70
|
+
require_paths:
|
91
71
|
- lib
|
92
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
73
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
hash: 57
|
98
|
-
segments:
|
99
|
-
- 1
|
100
|
-
- 8
|
101
|
-
- 7
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
102
77
|
version: 1.8.7
|
103
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
79
|
none: false
|
105
|
-
requirements:
|
106
|
-
- -
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
version: "0"
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
112
84
|
requirements: []
|
113
|
-
|
114
85
|
rubyforge_project:
|
115
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.8.10
|
116
87
|
signing_key:
|
117
88
|
specification_version: 3
|
118
89
|
summary: An EventMachine based IMAP client.
|
119
90
|
test_files: []
|
120
|
-
|