From 92b406375fa95e9111653b8139d74cebe8c65b01 Mon Sep 17 00:00:00 2001 From: Lucas Nussbaum Date: Wed, 6 May 2009 11:07:48 +0200 Subject: Only include images once as attachments if the image is duplicated in the item (thanks to Joachim Breitner for noticing) --- lib/feed2imap/itemtomail.rb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/feed2imap/itemtomail.rb b/lib/feed2imap/itemtomail.rb index ec3bbfb..00ce84f 100644 --- a/lib/feed2imap/itemtomail.rb +++ b/lib/feed2imap/itemtomail.rb @@ -95,20 +95,24 @@ def item_to_mail(item, index, updated, from = 'Feed2Imap', inline_images = false texthtml.add_part(htmlpart) message.add_part(texthtml) + cids = [] htmlpart.body.gsub!(/(]+)src="(\S+?\/([^\/]+?\.(png|gif|jpe?g)))"([^>]*>)/i) do |match| # $2 contains url, $3 the image name, $4 the image extension begin image = Base64.encode64(HTTPFetcher::fetch($2, Time.at(0)).chomp) + "\n" cid = "#{Digest::MD5.hexdigest($2)}@feed2imap.acme.com" - imgpart = RMail::Message.new - imgpart.header.set('Content-ID', "<#{cid}>") - type = $4 - type = 'jpeg' if type.downcase == 'jpg' # hack hack hack - imgpart.header.set('Content-Type', "image/#{type}", 'name' => $3) - imgpart.header.set('Content-Disposition', 'attachment', 'filename' => $3) - imgpart.header.set('Content-Transfer-Encoding', 'base64') - imgpart.body = image - message.add_part(imgpart) + if not cids.include?(cid) + cids << cid + imgpart = RMail::Message.new + imgpart.header.set('Content-ID', "<#{cid}>") + type = $4 + type = 'jpeg' if type.downcase == 'jpg' # hack hack hack + imgpart.header.set('Content-Type', "image/#{type}", 'name' => $3) + imgpart.header.set('Content-Disposition', 'attachment', 'filename' => $3) + imgpart.header.set('Content-Transfer-Encoding', 'base64') + imgpart.body = image + message.add_part(imgpart) + end # now to specify what to replace with newtag = "#{$1}src=\"cid:#{cid}\"#{$5}" #print "#{cid}: Replacing '#{$&}' with '#{newtag}'...\n" -- cgit v1.2.3