vmail 2.3.9 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +3 -2
- data/lib/vmail/imap_client.rb +3 -1
- data/lib/vmail/inbox_poller.rb +24 -13
- data/lib/vmail/version.rb +1 -1
- metadata +3 -3
data/README.markdown
CHANGED
@@ -207,8 +207,9 @@ message window. Watch the status line.
|
|
207
207
|
If you have `notify-send` (Linux) or `growlnotify` (OS X) installed on
|
208
208
|
your system, Vmail will also poll your INBOX every 30 seconds for new
|
209
209
|
messages. If it detects a new message, it will alert you through your
|
210
|
-
notification program. **NOTE**:
|
211
|
-
|
210
|
+
notification program. **NOTE**: This is an alert mechanism only;
|
211
|
+
you will still have to manually check for new messages in the Vmail
|
212
|
+
interface to force the new messages to display.
|
212
213
|
|
213
214
|
## Switching mailboxes, moving messages, copying messages to another mailbox
|
214
215
|
|
data/lib/vmail/imap_client.rb
CHANGED
@@ -214,6 +214,9 @@ module Vmail
|
|
214
214
|
log "- got seqnos: #{ids.inspect}"
|
215
215
|
log "- getting seqnos > #{self.max_seqno}"
|
216
216
|
new_ids = ids.select {|seqno| seqno > self.max_seqno}
|
217
|
+
# reset the max_seqno
|
218
|
+
self.max_seqno = ids.max
|
219
|
+
log "- setting max_seqno to #{self.max_seqno}"
|
217
220
|
log "- new uids found: #{new_ids.inspect}"
|
218
221
|
new_ids
|
219
222
|
end
|
@@ -222,7 +225,6 @@ module Vmail
|
|
222
225
|
prime_connection
|
223
226
|
new_ids = check_for_new_messages
|
224
227
|
if !new_ids.empty?
|
225
|
-
self.max_seqno = new_ids[-1]
|
226
228
|
@ids = @ids + new_ids
|
227
229
|
message_ids = fetch_and_cache_headers(new_ids)
|
228
230
|
res = get_message_headers(message_ids)
|
data/lib/vmail/inbox_poller.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Vmail
|
2
2
|
class InboxPoller < ImapClient
|
3
3
|
|
4
|
+
|
4
5
|
# This is a second IMAP client operating in a separate process
|
5
6
|
|
6
7
|
def start_polling
|
@@ -32,26 +33,36 @@ module Vmail
|
|
32
33
|
def update
|
33
34
|
new_ids = check_for_new_messages
|
34
35
|
if !new_ids.empty?
|
35
|
-
self.max_seqno = new_ids[-1]
|
36
36
|
@ids = @ids + new_ids
|
37
|
-
|
38
|
-
res = get_message_headers(message_ids)
|
37
|
+
res = uncached_headers(new_ids).map {|m| m[:sender] }.join(", ")
|
39
38
|
@notifier.call "Vmail: new email", "from #{res}"
|
40
39
|
end
|
41
40
|
rescue
|
42
41
|
log "VMAIL_ERROR: #{[$!.message, $!.backtrace].join("\n")}"
|
43
42
|
end
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
44
|
+
# doesn't try to access Sequel / sqlite3
|
45
|
+
def uncached_headers(id_set)
|
46
|
+
log "Fetching headers for #{id_set.size} messages"
|
47
|
+
results = reconnect_if_necessary do
|
48
|
+
@imap.fetch(id_set, ["FLAGS", "ENVELOPE", "RFC822.SIZE", "UID"])
|
49
|
+
end
|
50
|
+
results.reverse.map do |x|
|
51
|
+
envelope = x.attr["ENVELOPE"]
|
52
|
+
message_id = envelope.message_id
|
53
|
+
subject = Mail::Encodings.unquote_and_convert_to((envelope.subject || ''), 'UTF-8')
|
54
|
+
recipients = ((envelope.to || []) + (envelope.cc || [])).map {|a| extract_address(a)}.join(', ')
|
55
|
+
sender = extract_address envelope.from.first
|
56
|
+
uid = x.attr["UID"]
|
57
|
+
params = {
|
58
|
+
subject: (subject || ''),
|
59
|
+
flags: x.attr['FLAGS'].join(','),
|
60
|
+
date: Time.parse(envelope.date).localtime.to_s,
|
61
|
+
size: x.attr['RFC822.SIZE'],
|
62
|
+
sender: sender,
|
63
|
+
recipients: recipients
|
64
|
+
}
|
65
|
+
end
|
55
66
|
end
|
56
67
|
|
57
68
|
def log(string)
|
data/lib/vmail/version.rb
CHANGED