summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlnu <lnu@f70e237a-67f3-0310-a06c-d2b8a7116972>2005-04-02 16:03:30 +0000
committerlnu <lnu@f70e237a-67f3-0310-a06c-d2b8a7116972>2005-04-02 16:03:30 +0000
commit4838397390499e06c35d0bbb69f0b9d0ff15fe44 (patch)
treeeac223b36ee2699e560d6eb196674bd1e52d372d
parent80678b1cb394b8abd7179b0f918dadbe4c40eb28 (diff)
downloadfeed2imap-4838397390499e06c35d0bbb69f0b9d0ff15fe44.tar.gz
feed2imap-4838397390499e06c35d0bbb69f0b9d0ff15fe44.tar.bz2
feed2imap-4838397390499e06c35d0bbb69f0b9d0ff15fe44.zip
git-svn-id: svn+ssh://svn.gna.org/svn/feed2imap/trunk/feed2imap@9 f70e237a-67f3-0310-a06c-d2b8a7116972
-rw-r--r--TODO6
-rw-r--r--lib/feed2imap.rb1
-rw-r--r--lib/feed2imap/cache.rb3
-rw-r--r--lib/feed2imap/channel.rb1
-rw-r--r--lib/feed2imap/httpfetcher.rb41
-rw-r--r--lib/feed2imap/imap.rb3
-rwxr-xr-xtest/tc_httpfetcher.rb66
-rwxr-xr-xtest/tc_mail.rb2
-rwxr-xr-xtest/ts_feed2imap.rb5
9 files changed, 91 insertions, 37 deletions
diff --git a/TODO b/TODO
deleted file mode 100644
index 8f648d0..0000000
--- a/TODO
+++ /dev/null
@@ -1,6 +0,0 @@
-TODO :
-- Désactivation temporaire flux par flux
-- export OPML
-- vérifier licences de tout
-- GUI de config avec import d'OPML
-- use feed name (from config) in email's From
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
diff --git a/test/tc_httpfetcher.rb b/test/tc_httpfetcher.rb
new file mode 100755
index 0000000..d44b3ee
--- /dev/null
+++ b/test/tc_httpfetcher.rb
@@ -0,0 +1,66 @@
+#!/usr/bin/ruby
+
+$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
+
+require 'test/unit'
+require 'feed2imap/httpfetcher'
+
+class HttpFetcherTest < Test::Unit::TestCase
+ def test_get_https
+ s = ''
+ assert_nothing_raised do
+ s = HTTPFetcher::fetch('https://linuxfr.org/pub/', Time::at(0))
+ end
+ assert(s.length > 20)
+ end
+
+ def test_get_http
+
+ end
+
+ def test_get_httpnotmodif
+ s = 'aaa'
+ assert_nothing_raised do
+ s = HTTPFetcher::fetch('http://www.lucas-nussbaum.net/feed2imap_tests/notmodified.php', Time::new())
+ end
+ assert_nil(s)
+ end
+
+ def test_get_redir1
+ s = 'aaa'
+ assert_nothing_raised do
+ s = HTTPFetcher::fetch("http://www.lucas-nussbaum.net/feed2imap_tests/redir.php?redir=#{MAXREDIR}", Time::at(0))
+ end
+ assert_equal('OK', s)
+ end
+
+ def test_get_redir2
+ s = ''
+ assert_raise(RuntimeError) do
+ s = HTTPFetcher::fetch("http://www.lucas-nussbaum.net/feed2imap_tests/redir.php?redir=#{MAXREDIR + 1}", Time::at(0))
+ end
+ end
+
+ def test_httpauth
+ s = ''
+ assert_nothing_raised do
+ s = HTTPFetcher::fetch("http://aaa:bbb@ensilinx1.imag.fr/~lucas/f2i_redirauth.php", Time::at(0))
+ end
+ assert_equal("Login: aaa / Password: bbb \n", s)
+ end
+
+ def test_redirauth
+ s = ''
+ assert_nothing_raised do
+ s = HTTPFetcher::fetch("http://aaa:bbb@ensilinx1.imag.fr/~lucas/f2i_redirauth.php?redir=1", Time::at(0))
+ end
+ assert_equal("Login: aaa / Password: bbb \n", s)
+ end
+
+ def test_notfound
+ s = ''
+ assert_raises(RuntimeError) do
+ s = HTTPFetcher::fetch("http://ensilinx1.imag.fr/~lucas/notfound.html", Time::at(0))
+ end
+ end
+end
diff --git a/test/tc_mail.rb b/test/tc_mail.rb
index d3b99fd..3b700df 100755
--- a/test/tc_mail.rb
+++ b/test/tc_mail.rb
@@ -6,7 +6,7 @@ require 'test/unit'
require 'feed2imap/channel'
require 'rmail'
-class ConfigTest < Test::Unit::TestCase
+class MailTest < Test::Unit::TestCase
def test_require_rmail
# let's just test Rubymail is loaded
m = RMail::Message::new
diff --git a/test/ts_feed2imap.rb b/test/ts_feed2imap.rb
index fdea1a3..3e3aa08 100755
--- a/test/ts_feed2imap.rb
+++ b/test/ts_feed2imap.rb
@@ -1,7 +1,11 @@
#!/usr/bin/ruby -w
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
+$:.unshift File.join(File.dirname(__FILE__), '..', 'test')
+$:.unshift File.join(File.dirname(__FILE__), 'lib')
+$:.unshift File.join(File.dirname(__FILE__), 'test')
+require 'feed2imap'
require 'tc_cache'
require 'tc_channel_parse'
require 'tc_config'
@@ -10,3 +14,4 @@ require 'tc_converters_toutf8'
require 'tc_parser'
require 'tc_converters_text2html'
require 'tc_mail'
+require 'tc_httpfetcher'