From db22b5125675e8eaf90bc1651fb20d5d5f48e02a Mon Sep 17 00:00:00 2001 From: lnu Date: Tue, 5 Apr 2005 14:49:46 +0000 Subject: git-svn-id: svn+ssh://svn.gna.org/svn/feed2imap/trunk/feed2imap@12 f70e237a-67f3-0310-a06c-d2b8a7116972 --- lib/feed2imap/feed2imap.rb | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'lib/feed2imap/feed2imap.rb') diff --git a/lib/feed2imap/feed2imap.rb b/lib/feed2imap/feed2imap.rb index 3131587..9896a3c 100644 --- a/lib/feed2imap/feed2imap.rb +++ b/lib/feed2imap/feed2imap.rb @@ -24,6 +24,7 @@ require 'feed2imap/cache' require 'feed2imap/channel' require 'feed2imap/httpfetcher' require 'logger' +require 'thread' # Feed2Imap version F2I_VERSION = '0.2' @@ -81,23 +82,29 @@ class Feed2Imap end # for each feed, fetch, upload to IMAP and cache @logger.info("Fetching feeds") + loggermon = Mutex::new + ths = [] @config.feeds.each do |f| - @logger.info("Processing #{f.name}") - begin - f.body = HTTPFetcher::fetch(f.url, @cache.get_last_check(f.name)) - # dump if requested - if @config.dumpdir - fname = @config.dumpdir + '/' + f.name + '-' + Time::now.xmlschema - File::open(fname, 'w') { |file| file.puts f.body } + ths << Thread::new do + begin + f.body = HTTPFetcher::fetch(f.url, @cache.get_last_check(f.name)) + # dump if requested + if @config.dumpdir + fname = @config.dumpdir + '/' + f.name + '-' + Time::now.xmlschema + File::open(fname, 'w') { |file| file.puts f.body } + end + rescue Timeout::Error + loggermon.synchronize do + @logger.fatal("Timeout::Error while fetching #{f.url}: #{$!}") + end + rescue + loggermon.synchronize do + @logger.fatal("Error while fetching #{f.url}: #{$!}") + end end - rescue Timeout::Error - @logger.fatal("Timeout::Error while fetching #{f.url}: #{$!}") - next - rescue - @logger.fatal("Error while fetching #{f.url}: #{$!}") - next end end + ths.each { |t| t.join } @logger.info("Parsing and uploading") @config.feeds.each do |f| next if f.body.nil? # means 304 @@ -114,7 +121,7 @@ class Feed2Imap puts $!.backtrace next end - @logger.info("#{newitems.length} new items, #{updateditems.length} updated items.") if newitems.length > 0 or updateditems.length > 0 + @logger.info("#{f.name}: #{newitems.length} new items, #{updateditems.length} updated items.") if newitems.length > 0 or updateditems.length > 0 begin if !cacherebuild updateditems.each { |i| f.imapaccount.updatemail(f.folder, i.to_mail(f.name), i.cacheditem.index) } -- cgit v1.2.3-54-g00ecf