summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-01-10 05:24:04 -0800
committerLucas Nussbaum <lucas@lucas-nussbaum.net>2011-02-18 17:13:25 +0100
commit7579f7326ae3b8c8f441ef8b42be915cb400dc6d (patch)
treec13834a437f1be2435bb4e50cd2fc9b061ad8804
parente36e42b740d9fd8b31e0d6129812501f4b787a34 (diff)
downloadfeed2imap-7579f7326ae3b8c8f441ef8b42be915cb400dc6d.tar.gz
feed2imap-7579f7326ae3b8c8f441ef8b42be915cb400dc6d.tar.bz2
feed2imap-7579f7326ae3b8c8f441ef8b42be915cb400dc6d.zip
add "parts" config option
This allows disabling either HTML or text parts to save bandwidth/disk space on the IMAP server.
Diffstat (limited to '')
-rw-r--r--lib/feed2imap/config.rb8
-rw-r--r--lib/feed2imap/itemtomail.rb24
-rwxr-xr-xtest/tc_config.rb18
3 files changed, 40 insertions, 10 deletions
diff --git a/lib/feed2imap/config.rb b/lib/feed2imap/config.rb
index 231eb1d..74d5507 100644
--- a/lib/feed2imap/config.rb
+++ b/lib/feed2imap/config.rb
@@ -23,6 +23,7 @@ require 'feed2imap/imap'
require 'feed2imap/maildir'
require 'etc'
require 'socket'
+require 'set'
# Default cache file
DEFCACHE = ENV['HOME'] + '/.feed2imap.cache'
@@ -33,7 +34,7 @@ LOGNAME = Etc.getlogin
# Feed2imap configuration
class F2IConfig
- attr_reader :imap_accounts, :cache, :feeds, :dumpdir, :updateddebug, :max_failures, :include_images, :default_email, :hostname, :reupload_if_updated
+ attr_reader :imap_accounts, :cache, :feeds, :dumpdir, :updateddebug, :max_failures, :include_images, :default_email, :hostname, :reupload_if_updated, :parts
# Load the configuration from the IO stream
# TODO should do some sanity check on the data read.
@@ -48,8 +49,13 @@ class F2IConfig
@updateddebug = false
@updateddebug = @conf['debug-updated'] if @conf.has_key?('debug-updated')
+ @parts = %w(text html)
+ @parts = Array(@conf['parts']) if @conf.has_key?('parts') && !@conf['parts'].empty?
+ @parts = Set.new(@parts)
+
@include_images = true
@include_images = @conf['include-images'] if @conf.has_key?('include-images')
+ @parts << 'html' if @include_images && ! @parts.include?('html')
@reupload_if_updated = true
@reupload_if_updated = @conf['reupload-if-updated'] if @conf.has_key?('reupload-if-updated')
diff --git a/lib/feed2imap/itemtomail.rb b/lib/feed2imap/itemtomail.rb
index 6c70cbd..fcf8f8b 100644
--- a/lib/feed2imap/itemtomail.rb
+++ b/lib/feed2imap/itemtomail.rb
@@ -77,14 +77,20 @@ def item_to_mail(config, item, id, updated, from = 'Feed2Imap', inline_images =
message.header['Subject'] = subj
end
end
- textpart = RMail::Message::new
- textpart.header['Content-Type'] = 'text/plain; charset=utf-8; format=flowed'
- textpart.header['Content-Transfer-Encoding'] = '8bit'
- textpart.body = item.to_text(true, wrapto, false)
- htmlpart = RMail::Message::new
- htmlpart.header['Content-Type'] = 'text/html; charset=utf-8'
- htmlpart.header['Content-Transfer-Encoding'] = '8bit'
- htmlpart.body = item.to_html
+ textpart = htmlpart = nil
+ parts = config.parts
+ if parts.include?('text')
+ textpart = parts.size == 1 ? message : RMail::Message::new
+ textpart.header['Content-Type'] = 'text/plain; charset=utf-8; format=flowed'
+ textpart.header['Content-Transfer-Encoding'] = '8bit'
+ textpart.body = item.to_text(true, wrapto, false)
+ end
+ if parts.include?('html')
+ htmlpart = parts.size == 1 ? message : RMail::Message::new
+ htmlpart.header['Content-Type'] = 'text/html; charset=utf-8'
+ htmlpart.header['Content-Transfer-Encoding'] = '8bit'
+ htmlpart.body = item.to_html
+ end
# inline images as attachments
imgs = []
@@ -127,7 +133,7 @@ def item_to_mail(config, item, id, updated, from = 'Feed2Imap', inline_images =
imgs.each do |i|
message.add_part(i)
end
- else
+ elsif parts.size != 1
message.header['Content-Type'] = 'multipart/alternative'
message.add_part(textpart)
message.add_part(htmlpart)
diff --git a/test/tc_config.rb b/test/tc_config.rb
index ce910e9..ad4877c 100755
--- a/test/tc_config.rb
+++ b/test/tc_config.rb
@@ -34,6 +34,17 @@ feeds:
url: http://something2
target: imaps://login:pasword@ezaezae/Feeds/B
EOF
+CONFPARTS = <<EOF
+parts: text
+include-images: false
+feeds:
+ - name: feed1
+ url: http://something
+ target: imap://login:pasword@ezaezae/Feeds/A
+ - name: feed2
+ url: http://something2
+ target: imap://login:pasword@ezaezae/Feeds/B
+EOF
class ConfigTest < Test::Unit::TestCase
def test_cache
@@ -61,4 +72,11 @@ class ConfigTest < Test::Unit::TestCase
assert_equal('http://something', conf.feeds[0].url)
assert_equal('http://something2', conf.feeds[1].url)
end
+
+ def test_parts
+ sio = StringIO::new CONFPARTS
+ conf = F2IConfig::new(sio)
+ assert conf.parts.include?('text')
+ assert ! conf.parts.include?('html')
+ end
end