much smarter sorting

bunch o fixes
This commit is contained in:
Ward Wouts 2002-05-06 11:46:56 +00:00
parent 06fee68135
commit 1144fb8437

View file

@ -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]+)/)