diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index 88c4472..f4af412 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -77,23 +77,8 @@ end def del_server(server) print "Removing server #{server} from list\n" - dellist = [] @connections.delete(server) @serverlist.delete(server) - print "@servers.length #{@servers.length}\n" - for i in (0...@servers.length) - dellist.push(i) - end - for i in (dellist.reverse) - if @servers[i] == server - @messids.delete_at(i) - @ids.delete_at(i) - @servers.delete_at(i) - @subjects.delete_at(i) - end - end - @sorted = false - @grouped = false end def get_articles(cachedir=false) @@ -129,7 +114,7 @@ def get_articles(cachedir=false) resp, subj_lines = get_xhdr(server, i, "subject") resp, messid_lines = get_xhdr(server, i, "message-id") rescue TempError - print "Caught: #{$!} reading from #{server}\n" + print "Caught: #{$!} reading from #{server} (get_articles)\n" next end @@ -174,7 +159,7 @@ def get_group_info(server) print "Got error \"#{$!}\" from #{server}\n" raise PermError, "#{$!}" rescue Errno::EPIPE, Errno::ECONNRESET - print "Caught Errno::EPIPE reading from server #{server}\n" + print "Caught Errno::EPIPE reading from server #{server} (get_group_info)\n" print "Error: #{$!}\n" reconnect(server) retry @@ -183,7 +168,7 @@ def get_group_info(server) rescue TimeoutError timedout += 1 raise PermError, "Too many timeouts! (get_group_info)" if timedout > 1 - print "Time out, reconnecting to server...\n" + print "Time out, reconnecting to server... (get_group_info)\n" reconnect(server) retry end @@ -207,10 +192,10 @@ def get_xhdr(server, range, header) raise TempError end rescue Net::NNTP::RuntimeError - print "Caught Net::NNTP::RuntimeError reading from server #{server}\n" + print "Caught Net::NNTP::RuntimeError reading from server #{server} (get_xhdr)\n" print "Error: #{$!}\n" rescue Errno::EPIPE, Errno::ECONNRESET - print "Caught Errno::EPIPE reading from server #{server}\n" + print "Caught Errno::EPIPE reading from server #{server} (get_xhdr)\n" print "Error: #{$!}\n" reconnect(server) get_group_info(server) @@ -219,7 +204,7 @@ def get_xhdr(server, range, header) end return resp, lines rescue TimeoutError - print "Time out, reconnecting to server\n" + print "Time out, reconnecting to server (get_xhdr)\n" timedout += 1 raise PermError, "Too many timeouts! (get_xhrd)" if timedout > 1 reconnect(server) @@ -268,11 +253,15 @@ def get_body(server, message) begin resp, id, messid, list = @connections[server]["nntp"].body(message) rescue Net::NNTPReplyError - print "Caught Net::NNTPReplyError reading article #{message} from #{server}\n" + print "Caught Net::NNTPReplyError reading article #{message} from #{server} (get_body)\n" + print "Error: #{$!}\n" + return false + rescue EOFError + print "Caught EOFError reading article #{message} from #{server} (get_body)\n" print "Error: #{$!}\n" return false rescue Errno::EPIPE, Errno::ECONNRESET - print "Caught Errno::EPIPE reading from server #{server}\n" + print "Caught Errno::EPIPE reading from server #{server} (get_body)\n" print "Error: #{$!}\n" reconnect(server) get_group_info(server) @@ -281,7 +270,7 @@ def get_body(server, message) end return resp, id, messid, list rescue TimeoutError - print "Time out, reconnecting to server\n" + print "Time out, reconnecting to server (get_body)\n" timedout += 1 raise PermError, "Too many timeouts! (get_body)" if timedout > 1 reconnect(server) @@ -302,7 +291,11 @@ def get_group_body(subj) print "id: #{@groups[subj]["ids"][i]}\n" if Debuglevel > 1 print "server: #{@groups[subj]["servers"][i]}\n" if Debuglevel > 0 begin - resp, id, messid, list = get_body(@groups[subj]["servers"][i], @groups[subj]["messages"][i]) + if @serverlist.include?(@groups[subj]["servers"][i]) + resp, id, messid, list = get_body(@groups[subj]["servers"][i], @groups[subj]["messages"][i]) + else + resp = false + end if resp == false print "mess-id i: #{@groups[subj]["messages"][i]}\n" print "mess-id i+1: #{@groups[subj]["messages"][i+1]}\n" @@ -949,6 +942,21 @@ end ############################################################### +# a bas64 decoder... +def decode64(str) + string = '' + for line in str.split("\n") + line.delete!('^A-Za-z0-9+') # remove non-base64 chars + line.tr!('A-Za-z0-9+', ' -_') # convert to uuencoded format + len = ["#{32 + line.length * 3 / 4}"].pack("c") + # compute length byte + string += "#{len}#{line}".unpack("u") # uudecode and concatenate + end + return string +end + +############################################################### + def group_subject_sort(subj) #print "Sorting articles\n" serverhash = {}