diff options
Diffstat (limited to '')
-rw-r--r-- | lib/feed2imap.rb | 1 | ||||
-rw-r--r-- | lib/feed2imap/cache.rb | 3 | ||||
-rw-r--r-- | lib/feed2imap/channel.rb | 1 | ||||
-rw-r--r-- | lib/feed2imap/httpfetcher.rb | 41 | ||||
-rw-r--r-- | lib/feed2imap/imap.rb | 3 |
5 files changed, 19 insertions, 30 deletions
diff --git a/lib/feed2imap.rb b/lib/feed2imap.rb index 7168268..f813f27 100644 --- a/lib/feed2imap.rb +++ b/lib/feed2imap.rb @@ -1,3 +1,4 @@ +require 'feed2imap/feed2imap' require 'feed2imap/cache' require 'feed2imap/channel' require 'feed2imap/config' diff --git a/lib/feed2imap/cache.rb b/lib/feed2imap/cache.rb index 1534483..c984a5d 100644 --- a/lib/feed2imap/cache.rb +++ b/lib/feed2imap/cache.rb @@ -105,7 +105,6 @@ class CachedChannel updateditems = [] items.each { |i| i.cacheditem ||= CachedItem::new(i) } items.each do |i| - # TODO rewrite with the fact that break can return a value found = false # Try to find a perfect match @items.each do |j| @@ -119,7 +118,7 @@ class CachedChannel # Try to find an updated item @items.each do |j| if i.link and i.link == j.link - # TODO use a better heuristic ? + # Do we need a better heuristic ? i.cacheditem.index = j.index i.cacheditem.updated = true updateditems.push(i) diff --git a/lib/feed2imap/channel.rb b/lib/feed2imap/channel.rb index ae83d18..a9b4499 100644 --- a/lib/feed2imap/channel.rb +++ b/lib/feed2imap/channel.rb @@ -235,7 +235,6 @@ class Item s end - # TODO from significatif def to_mail(from = 'Feed2Imap') message = RMail::Message::new message.header['From'] = "#{from} <feed2imap@feed2imap.net>" diff --git a/lib/feed2imap/httpfetcher.rb b/lib/feed2imap/httpfetcher.rb index 6c72bf3..6041845 100644 --- a/lib/feed2imap/httpfetcher.rb +++ b/lib/feed2imap/httpfetcher.rb @@ -17,32 +17,34 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA =end +require 'feed2imap' require 'net/http' # get openssl if available begin - require 'openssl' + require 'net/https' rescue end require 'uri' -# Class used to retrieve the feed over HTTP -# TODO non standard port, authentification -# TODO don't use If-Mod-Since if = 0 - if defined?(F2I_VERSION) USERAGENT = 'Feed2Imap v#{F2I_VERSION} http://home.gna.org/feed2imap/' else USERAGENT = 'Feed2Imap http://home.gna.org/feed2imap/' end +# max number of redirections +MAXREDIR = 5 + +# Class used to retrieve the feed over HTTP class HTTPFetcher def HTTPFetcher::fetcher(baseuri, uri, lastcheck, recursion) - if uri.scheme == 'http' - http = Net::HTTP::new(uri.host, uri.port) + http = Net::HTTP::new(uri.host, uri.port) + http.use_ssl = true if uri.scheme == 'https' + if lastcheck == Time::at(0) + req = Net::HTTP::Get::new(uri.request_uri, {'User-Agent' => USERAGENT }) else - http = Net::HTTPS::new(uri.host, uri.port) + req = Net::HTTP::Get::new(uri.request_uri, {'User-Agent' => USERAGENT, 'If-Modified-Since' => lastcheck.httpdate}) end - req = Net::HTTP::Get::new(uri.request_uri, {'User-Agent' => USERAGENT, 'If-Modified-Since' => lastcheck.httpdate}) if uri.userinfo login, pw = uri.userinfo.split(':') req.basic_auth(login, pw) @@ -54,7 +56,7 @@ class HTTPFetcher begin response = http.request(req) rescue Timeout::Error - raise "Timeout while fetching #{uri.to_s}" + raise "Timeout while fetching #{baseuri.to_s}" end case response when Net::HTTPSuccess @@ -65,25 +67,16 @@ class HTTPFetcher if recursion > 0 redir = URI::join(uri.to_s, response['location']) return fetcher(baseuri, redir, lastcheck, recursion - 1) + else + raise "Too many redirections while fetching #{baseuri.to_s}" end + else + raise "#{response.code}: #{response.message} while fetching #{baseuri.to_s}" end - # or raise en exception - response.error! end def HTTPFetcher::fetch(url, lastcheck) uri = URI::parse(url) - return HTTPFetcher::fetcher(uri, uri, lastcheck, 5) - http = Net::HTTP::new(uri.host) - response = http.get(uri.path, {'User-Agent' => USERAGENT, 'If-Modified-Since' => lastcheck.httpdate}) - if response.class == Net::HTTPOK - return response.body - elsif response.class == Net::HTTPNotModified - return nil - elsif response.class == Net::HTTPNotFound - raise "Page not found (404)" - else - raise "Unknown response #{response.class}" - end + return HTTPFetcher::fetcher(uri, uri, lastcheck, MAXREDIR) end end diff --git a/lib/feed2imap/imap.rb b/lib/feed2imap/imap.rb index 591f561..70a0aa0 100644 --- a/lib/feed2imap/imap.rb +++ b/lib/feed2imap/imap.rb @@ -93,13 +93,10 @@ class ImapAccount # Put the mail in the given folder # You should check whether the folder exist first. def putmail(folder, mail) - # TODO check response @connection.append(folder, mail) end def updatemail(folder, mail, idx) - # TODO check response - # TODO keep flags of deleted mail @connection.select(folder) searchres = @connection.search(['HEADER', 'X-CacheIndex', "-#{idx}-"]) if searchres.length == 1 |