@@ -228,8 +228,6 @@ module Agents |
||
| 228 | 228 |
|
| 229 | 229 |
next if (uids = seen[mail.uidvalidity]) && uids.include?(mail.uid) |
| 230 | 230 |
|
| 231 |
- next if notified.include?(mail.message_id) |
|
| 232 |
- |
|
| 233 | 231 |
body_parts = mail.body_parts(mime_types) |
| 234 | 232 |
matched_part = nil |
| 235 | 233 |
matches = {}
|
@@ -275,35 +273,37 @@ module Agents |
||
| 275 | 273 |
end |
| 276 | 274 |
} or next |
| 277 | 275 |
|
| 278 |
- matched_part ||= body_parts.first |
|
| 276 |
+ unless notified.include?(mail.message_id) |
|
| 277 |
+ matched_part ||= body_parts.first |
|
| 279 | 278 |
|
| 280 |
- if matched_part |
|
| 281 |
- mime_type = matched_part.mime_type |
|
| 282 |
- body = matched_part.decoded |
|
| 283 |
- else |
|
| 284 |
- mime_type = 'text/plain' |
|
| 285 |
- body = '' |
|
| 286 |
- end |
|
| 279 |
+ if matched_part |
|
| 280 |
+ mime_type = matched_part.mime_type |
|
| 281 |
+ body = matched_part.decoded |
|
| 282 |
+ else |
|
| 283 |
+ mime_type = 'text/plain' |
|
| 284 |
+ body = '' |
|
| 285 |
+ end |
|
| 287 | 286 |
|
| 288 |
- create_event :payload => {
|
|
| 289 |
- 'folder' => mail.folder, |
|
| 290 |
- 'subject' => mail.subject, |
|
| 291 |
- 'from' => mail.from_addrs.first, |
|
| 292 |
- 'to' => mail.to_addrs, |
|
| 293 |
- 'cc' => mail.cc_addrs, |
|
| 294 |
- 'date' => (mail.date.iso8601 rescue nil), |
|
| 295 |
- 'mime_type' => mime_type, |
|
| 296 |
- 'body' => body, |
|
| 297 |
- 'matches' => matches, |
|
| 298 |
- 'has_attachment' => mail.has_attachment?, |
|
| 299 |
- } |
|
| 287 |
+ create_event :payload => {
|
|
| 288 |
+ 'folder' => mail.folder, |
|
| 289 |
+ 'subject' => mail.subject, |
|
| 290 |
+ 'from' => mail.from_addrs.first, |
|
| 291 |
+ 'to' => mail.to_addrs, |
|
| 292 |
+ 'cc' => mail.cc_addrs, |
|
| 293 |
+ 'date' => (mail.date.iso8601 rescue nil), |
|
| 294 |
+ 'mime_type' => mime_type, |
|
| 295 |
+ 'body' => body, |
|
| 296 |
+ 'matches' => matches, |
|
| 297 |
+ 'has_attachment' => mail.has_attachment?, |
|
| 298 |
+ } |
|
| 299 |
+ |
|
| 300 |
+ notified << mail.message_id if mail.message_id |
|
| 301 |
+ end |
|
| 300 | 302 |
|
| 301 | 303 |
if options['mark_as_read'] |
| 302 | 304 |
log 'Marking as read' |
| 303 | 305 |
mail.mark_as_read |
| 304 | 306 |
end |
| 305 |
- |
|
| 306 |
- notified << mail.message_id if mail.message_id |
|
| 307 | 307 |
} |
| 308 | 308 |
|
| 309 | 309 |
notified.slice!(0...-IDCACHE_SIZE) if notified.size > IDCACHE_SIZE |
@@ -228,6 +228,15 @@ describe Agents::ImapFolderAgent do |
||
| 228 | 228 |
} |
| 229 | 229 |
lambda { @checker.check }.should change { Event.count }.by(2)
|
| 230 | 230 |
end |
| 231 |
+ |
|
| 232 |
+ it 'should create just one event for multiple mails with the same Message-Id' do |
|
| 233 |
+ @mails.first.message_id = @mails.last.message_id |
|
| 234 |
+ @checker.options['mark_as_read'] = true |
|
| 235 |
+ @mails.each { |mail|
|
|
| 236 |
+ stub(mail).mark_as_read.once |
|
| 237 |
+ } |
|
| 238 |
+ lambda { @checker.check }.should change { Event.count }.by(1)
|
|
| 239 |
+ end |
|
| 231 | 240 |
end |
| 232 | 241 |
end |
| 233 | 242 |
end |