diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index 7de7c9a..e151230 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -16,11 +16,8 @@ require 'tempfile' require 'timeout' class ArticleError < RuntimeError; end -class ReconnectError < ArticleError; end -class GroupInfoError < ArticleError; end -class BodyError < ArticleError; end -class XhdrError < ArticleError; end -class TimeoutError < ArticleError; end +class TempError < ArticleError; end +class PermError < ArticleError; end class Article @@ -60,7 +57,7 @@ def reconnect(server) rescue SocketError print "Reconnect to #{server} failed\n" del_server(server) - raise ReconnectError + raise PermError, "Couldn't connect to #{server}" end print "Succesfully reconnected to #{server}\n" end @@ -88,7 +85,8 @@ def get_articles(cachedir=false) for server in @connections.keys begin first, last = get_group_info(server) - rescue ReconnectError, GroupInfoError + rescue PermError + print "#{$!}\n" del_server(server) next end @@ -108,13 +106,14 @@ def get_articles(cachedir=false) print "rangelist: #{rangelist}\n" if Debuglevel >1 print "rangelist: #{rangelist.type.to_s}\n" if Debuglevel >1 print "rangelist elements: #{range.diff(@connections[server]["skip_ids"]).elements}\n" if Debuglevel >1 + begin unless rangelist == nil or rangelist =~ /^$/ for i in rangelist.split(',') print "i: #{i}\n" if Debuglevel > 1 begin resp, subj_lines = get_xhdr(server, i, "subject") resp, messid_lines = get_xhdr(server, i, "message-id") - rescue TimeoutError, ReconnectError, XhdrError, GroupInfoError + rescue TempError print "Caught: #{$!} reading from #{server}\n" next end @@ -138,6 +137,10 @@ def get_articles(cachedir=false) end end end + rescue PermError + del_server(server) + next + end end save_cache(cachedir) end @@ -153,7 +156,7 @@ def get_group_info(server) resp, count, first, last, name = @connections[server]["nntp"].group(@group) rescue Net::NNTP::RuntimeError print "Got error \"#{$!}\" from #{server}\n" - raise GroupInfoError + raise PermError, "$!" rescue Errno::EPIPE, Errno::ECONNRESET print "Caught Errno::EPIPE reading from server #{server}\n" print "Error: #{$!}\n" @@ -163,7 +166,7 @@ def get_group_info(server) end rescue TimeoutError timedout += 1 - raise TimeoutError, "Too many timeouts! (get_group_info)\n" if timedout > 1 + raise PermError, "Too many timeouts! (get_group_info)\n" if timedout > 1 print "Time out, reconnecting to server...\n" reconnect(server) retry @@ -202,7 +205,7 @@ def get_xhdr(server, range, header) rescue TimeoutError print "Time out, reconnecting to server\n" timedout += 1 - raise TimeoutError, "Too many timeouts! (get_xhrd)\n" if timedout > 1 + raise PermError, "Too many timeouts! (get_xhrd)\n" if timedout > 1 reconnect(server) get_group_info(server) retry @@ -264,7 +267,7 @@ def get_body(server, message) rescue TimeoutError print "Time out, reconnecting to server\n" timedout += 1 - raise TimeoutError, "Too many timeouts! (get_body)\n" if timedout > 1 + raise PermError, "Too many timeouts! (get_body)\n" if timedout > 1 reconnect(server) get_group_info(server) retry @@ -293,7 +296,7 @@ def get_group_body(subj) i += 1 retry else - raise BodyError, "Message-id not on another server\n" + raise TempError, "Message-id not on another server\n" end end end @@ -324,7 +327,7 @@ def get_group_body_first(subj) i += 1 retry else - raise BodyError, "Message-id not on another server\n" + raise TempError, "Message-id not on another server\n" end end end @@ -354,7 +357,7 @@ def get_group_body_rest(subj, file=nil) i += 1 retry else - raise BodyError, "Message-id not on another server\n" + raise TempError, "Message-id not on another server\n" end end end