From 1144fb843705242422e992ba59db77c905c52b44 Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Mon, 6 May 2002 11:46:56 +0000 Subject: [PATCH] much smarter sorting bunch o fixes --- trunk/ripnews/news/article.rb | 69 +++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 19 deletions(-) diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index 59ffc79..c871fe1 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -134,12 +134,16 @@ def get_groups return @groups end +def get_groupname + return @group +end + def get_group_body(subj) result = [] + 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 "#{@groups[subj]}\n" begin print "Server: #{@groups[subj]["servers"][i]}\n" print "Messid: #{@groups[subj]["messages"][i]}\n" @@ -154,6 +158,7 @@ def get_group_body(subj) 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 @@ -185,17 +190,17 @@ def get_group_body_rest(subj, file=nil) print "Caught Net::NNTPReplyError reading article #{@groups[subj]["messages"][0]}\n" return false end - end print "getting article: #{subj}\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"} - else - result += list + if file + list.collect{|line| file.print "#{line}\n"} + else + result += list + end end end return result @@ -240,8 +245,6 @@ end def group_subjects @groups = {} - #subject_sort unless @sorted - prev_subj = "" for i in (0...@subjects.length) print "group subjects: #{i} #{@subjects[i]}\n" if Debuglevel > 1 if @subjects[i] =~ /(.*)\((\d+)\/(\d+)\)(.*)/ || @subjects[i] =~ /(.*)\[(\d+)\/(\d+)\](.*)/ @@ -253,21 +256,18 @@ def group_subjects number = 1 total = 1 end - if j == prev_subj and number.to_i !=0 + if @groups.has_key?(j) and number.to_i !=0 @groups[j]["messages"] += [ @messids[i] ] @groups[j]["ids"] += [ @ids[i].to_i ] @groups[j]["servers"] += [ @servers[i] ] @groups[j]["subject"] += [ @subjects[i] ] - else - unless number.to_i == 0 - prev_subj = j - @groups[j] = {} - @groups[j]["total"] = total - @groups[j]["messages"] = [ @messids[i] ] - @groups[j]["ids"] = [ @ids[i].to_i ] - @groups[j]["servers"] = [ @servers[i] ] - @groups[j]["subject"] = [ @subjects[i] ] - end + elsif number.to_i !=0 + @groups[j] = {} + @groups[j]["total"] = total + @groups[j]["messages"] = [ @messids[i] ] + @groups[j]["ids"] = [ @ids[i].to_i ] + @groups[j]["servers"] = [ @servers[i] ] + @groups[j]["subject"] = [ @subjects[i] ] end end @grouped = true @@ -284,6 +284,8 @@ 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 @@ -534,6 +536,35 @@ def subject_sort @sorted = true end +def group_subject_sort(subj) + print "Sorting articles\n" + sort_arr = [] + for i in (0...@groups[subj]["subject"].length) + print "subj sort #{@groups[subj]["subject"][i]}\n" if Debuglevel > 2 + print "subj sort #{@groups[subj]["messages"][i]}\n" if Debuglevel > 2 + print "subj sort #{@groups[subj]["ids"][i]}\n" if Debuglevel > 2 + print "subj sort #{@groups[subj]["servers"][i]}\n" if Debuglevel > 2 + sort_arr += ["#{@groups[subj]["subject"][i]} #{@groups[subj]["messages"][i]} #{@groups[subj]["ids"][i]} #{@groups[subj]["servers"][i]}"] + end + sort_arr.sort!{|a,b| ward_sort(a, b)} + @groups[subj].clear + sort_arr.collect{|i| + i =~ /^(.*) (<[^<]*>) (\d+) (\S*)$/ || i =~ /^(.*) \[<[^<]*>\] (\d+) (\S*)$/ + if @groups[subj].has_key?("messages") + @groups[subj]["messages"] += [$2] + @groups[subj]["ids"] += [$3.to_i] + @groups[subj]["subject"] += [$1] + @groups[subj]["servers"] += [$4] + else + @groups[subj]["messages"] = [$2] + @groups[subj]["ids"] = [$3.to_i] + @groups[subj]["subject"] = [$1] + @groups[subj]["servers"] = [$4] + end + print "subject sort: #{$1}\n" if Debuglevel > 2 + } +end + def ward_sort(a, b) a =~ /^(.*) (<[^<]*> \d+ \S*)$/ c = $1.to_s.split(/([0-9]+)/)