diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index 3d8e101..f6e5d52 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -20,7 +20,6 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc") @sorted = false @grouped = false - #@skip_ids = Set::IntSpan.new() @groups = {} @gotten = {} @group = groupname @@ -34,7 +33,6 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc") @connections[server]["newsrc"] = News::Newsrc.new("#{newsrc}.#{server}") set_skip_ids(server, @connections[server]["newsrc"].marked_articles(@group)) } - #@nntp = Net::NNTP.new(nntpservers) end def add(messid, id, server, subject) @@ -142,13 +140,19 @@ def get_group_body(subj) group_subject_sort(subj) for i in (0...@groups[subj]["messages"].length) unless @gotten.has_key?(@groups[subj]["messages"][i]) - print "getting article: #{i}\n" if Debuglevel > 0 + print "getting article: #{i}\n" if Debuglevel > 1 begin print "Server: #{@groups[subj]["servers"][i]}\n" print "Messid: #{@groups[subj]["messages"][i]}\n" resp, id, messid, list = @connections[@groups[subj]["servers"][i]]["nntp"].body(@groups[subj]["messages"][i]) rescue Net::NNTPReplyError print "Caught Net::NNTPReplyError in get_group_body reading article #{@groups[subj]["messages"][0]}\n" + if (i+1 < @groups[subj]["messages"].length) and + (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) + print "Trying next server\n" + next + end + return false end result = list end @@ -158,18 +162,27 @@ end def get_group_body_first(subj) group_subject_sort(subj) - begin - resp, id, messid, list = @connections[@groups[subj]["servers"][0]]["nntp"].body(@groups[subj]["messages"][0]) - rescue Net::NNTPReplyError - print "Caught Net::NNTPReplyError in get_group_body_first reading article #{@groups[subj]["messages"][0]}\n" - return false + i = 0 + while @gotten[messid] == false + begin + resp, id, messid, list = @connections[@groups[subj]["servers"][i]]["nntp"].body(@groups[subj]["messages"][i]) + @gotten[messid] = true + rescue Net::NNTPReplyError + print "Caught Net::NNTPReplyError in get_group_body_first reading article #{@groups[subj]["messages"][0]}\n" + if (i+1 < @groups[subj]["messages"].length) and + (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) + print "Trying next server\n" + i += 1 + next + end + return false + end end print "getting article: #{subj}\n" if Debuglevel > 0 + print "full subject: #{@groups[subj]["subject"][0]}\n" if Debuglevel > 0 print "message id: #{messid}\n" if Debuglevel > 0 print "id: #{id}\n" if Debuglevel > 0 print "server: #{@groups[subj]["servers"][0]}\n" if Debuglevel > 0 - print "full subject: #{@groups[subj]["subject"][0]}\n" if Debuglevel > 0 - @gotten[messid] = true return list end @@ -177,7 +190,7 @@ def get_group_body_rest(subj, file=nil) result = [] for i in (1...@groups[subj]["messages"].length) unless @gotten.has_key?(@groups[subj]["messages"][i]) - print "getting article: #{i}\n" if Debuglevel > 0 + print "getting article: #{i}\n" if Debuglevel > 1 begin print "Server: #{@groups[subj]["servers"][i]}\n" print "Messid: #{@groups[subj]["messages"][i]}\n" @@ -187,13 +200,18 @@ def get_group_body_rest(subj, file=nil) end rescue Net::NNTPReplyError print "Caught Net::NNTPReplyError in get_group_body_rest reading article #{@groups[subj]["messages"][0]}\n" + if (i+1 < @groups[subj]["messages"].length) and + (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) + print "Trying next server\n" + next + end return false end - print "getting article: #{subj}\n" if Debuglevel > 0 + print "getting article: #{subj}\n" if Debuglevel > 1 + print "full subject: #{@groups[subj]["subject"][i]}\n" if Debuglevel > 0 print "message id: #{messid}\n" if Debuglevel > 0 print "id: #{id}\n" if Debuglevel > 0 print "server: #{@groups[subj]["servers"][i]}\n" if Debuglevel > 0 - print "full subject: #{@groups[subj]["subject"][i]}\n" if Debuglevel > 0 @gotten[ @groups[subj]["messages"][i] ] = true if file list.collect{|line| file.print "#{line}\n"} @@ -283,8 +301,6 @@ end def group_update_newsrc(subject) for i in (0...@groups[subject]["messages"].length) -# print "server: #{@groups[subject]["servers"][i]}\n" -# print "id: #{@groups[subject]["ids"][i]}\n" @connections[@groups[subject]["servers"][i]]["newsrc"].mark(@group, @groups[subject]["ids"][i]) end end @@ -306,14 +322,7 @@ def read_cache(cachedir) file = File.new( filename ) lines = file.readlines lines.collect{|line| - #print "line: #{line}\n" if line =~ /^(\d+)\|(.*?)\|(.*?)\|(.*)$/ - #print "id: #{$1}\n" - #print "messid: #{$2}\n" - #print "server: #{$3}\n" - #print "subject: #{$4}\n" - #print "First: #{@connections[$3]["first"].to_i}\n"; - #print "Last: #{@connections[$3]["last"].to_i}\n"; if @connections.has_key?($3) unless excludes.has_key?($3) and excludes[$3].has_key?($1.to_i) or $1.to_i < @connections[$3]["first"].to_i or @@ -486,7 +495,6 @@ def uudecode_group(subj, tempdir=nil) body = get_group_body_first(subj) if body.to_s =~ /begin/ print "uuencoded!\n" if Debuglevel > 0 - #if (file and outfile) if (tempdir != nil) file = Tempfile.new("#{tempdir}/riptmp") body.collect{|i| file.print "#{i}\n"} @@ -821,21 +829,20 @@ def rechunk_runlist(runlist) return nil if runlist == nil blalist = runlist.split(',') blalist.collect!{|x| - result = "" - if x =~ /(.*)-(.*)/ - a = $1 - while ($2.to_i - a.to_i) > 200 - result += "#{a}-#{a.to_i+199}," - a = a.to_i + 200 + result = "" + if x =~ /(.*)-(.*)/ + a = $1 + while ($2.to_i - a.to_i) > 200 + result += "#{a}-#{a.to_i+199}," + a = a.to_i + 200 + end + result += "#{a}-#{$2}" + else + x end - result += "#{a}-#{$2}" - else - x - end - blup = blalist.join(",") - return blup -} - + blup = blalist.join(",") + return blup + } return end diff --git a/trunk/ripnews/ripnews.rb b/trunk/ripnews/ripnews.rb index 833e6b7..d164a34 100755 --- a/trunk/ripnews/ripnews.rb +++ b/trunk/ripnews/ripnews.rb @@ -255,7 +255,7 @@ def get_multi(subj, group) fileout.close return mode, filename, body end - print "unknown encoding (not UU, not yEnc), skipping...\n" + print " Unknown encoding (not UU, not yEnc), skipping...\n" return false end end