restructure code

This commit is contained in:
Ward Wouts 2002-05-05 22:18:11 +00:00
parent 6f01b486db
commit 53879858b2

View file

@ -36,6 +36,7 @@ def save_file(dir, name, data)
print " Saving as: '#{newname}'\n"
else
print "couldn't rename tempfile\n"
return false
end
when "Array"
if file = File.new("#{dir}/#{newname}", "w", "0644")
@ -43,10 +44,13 @@ def save_file(dir, name, data)
data.collect{|i| file.print "#{i}"}
else
print "couldn't open file for writeing\n"
return false
end
else
print "EEEEPS\n"
print "EEEEPS Can't save data of type: #{data.type.to_s}\n"
return false
end
return true
end
def parse_options(options)
@ -82,7 +86,8 @@ def parse_config(default = {})
i = 0
group = ""
config = {}
grouparr = []
@config = {}
lines.collect!{|x|
x.sub!(/^\s*/, "")
@ -103,42 +108,44 @@ def parse_config(default = {})
print "#{i}: #{line}\n" if Debuglevel > 1
if line =~ /(.*?)\s*\+=\s*(.*)/
if group == ""
default[$1] += $2
else
for g in group.split('|')
if config[g].has_key?($1)
config[g][$1] += $2
elsif default.has_key?($1)
config[g][$1] = default[$1] + $2
else
config[g][$1] = $2
end
if default.has_key?($1)
default[$1] += $2
else
default[$1] = $2
end
else
grouparr.collect{|g|
if @config[g].has_key?($1)
@config[g][$1] += $2
elsif default.has_key?($1)
@config[g][$1] = default[$1] + $2
else
@config[g][$1] = $2
end
}
end
elsif line =~ /(.*?)\s*=\s*(.*)/
if group == ""
default[$1] = $2
else
for g in group.split('|')
config[g][$1] = $2
end
grouparr.collect{|g|
@config[g][$1] = $2
}
end
elsif line =~ /(.*?)\s*\{/
group = $1
for g in group.split('|')
unless config.has_key?(g)
config[g] = {}
end
end
grouparr = group.split('|')
grouparr.collect{|g|
@config[g] = {} unless @config.has_key?(g)
}
elsif line =~ /^}$/
default.each_key{|x|
for g in group.split('|')
unless config[g].has_key?(x)
config[g][x] = default[x]
end
end
grouparr.collect{|g|
@config[g][x] = default[x] unless @config[g].has_key?(x)
}
}
group = ""
grouparr = []
elsif line =~ /^$/
next
else
@ -153,115 +160,140 @@ def parse_config(default = {})
end
if Debuglevel > 2
config.each_key{|x|
@config.each_key{|x|
print "Group: #{x}\n"
config[x].each_key{|y|
print "Key: '#{y}' => Value: '#{config[x][y]}'\n"
@config[x].each_key{|y|
print "Key: '#{y}' => Value: '#{@config[x][y]}'\n"
}
}
end
return config
return true
end
def check_config(config)
config.each_key {|i|
unless config[i].has_key?("-I")
def check_config
@config.each_key {|i|
unless @config[i].has_key?("-I")
print "No inclusions given for group #{i}. Won't match anything.\n"
exit
end
unless config[i].has_key?("DATADIR")
config[i]["DATADIR"] ="."
unless @config[i].has_key?("DATADIR")
@config[i]["DATADIR"] ="."
end
unless config[i].has_key?("PERMISSION")
config[i]["PERMISSION"] = "0755"
unless @config[i].has_key?("PERMISSION")
@config[i]["PERMISSION"] = "0755"
end
}
end
def get_single(articles, subj)
print " Singlepart!\n"
body = articles.get_group_body(subj)
if articles.is_uuencoded(body)
mode, filename, body = articles.uudecode(body)
else
print "Not UUencoded!\n"
return false
end
return mode, filename, body
end
def get_multi(articles, subj, group)
print " Multipart!\n"
if @config[group]["TEMPDIR"] == nil or @config[group]["TEMPDIR"] == ""
body = articles.get_group_body(subj)
if articles.is_uuencoded(body)
mode, filename, body = articles.uudecode(body)
else
print "Multipart article not UUencoded!\n"
return false
end
else
body = articles.get_group_body_first(subj)
next if body == false
if articles.is_uuencoded(body)
file = Tempfile.new("riptmp", @config[group]["TEMPDIR"])
body.collect{|x| file.print "#{x}\n"}
next unless articles.get_group_body_rest(subj, file)
fileout = Tempfile.new("riptmp", @config[group]["TEMPDIR"])
mode, filename, body = articles.uudecode(file, fileout)
body = fileout.path
file.close
fileout.close
else
print "Multipart article not UUencoded!\n"
return false
end
end
return -mode, filename, body
end
def output_data(mode, filename="", body="")
if mode
print " mode: #{mode}\n" if Debuglevel > 0
print " Filename: '#{filename}'\n" if Debuglevel > 0
if @config[group].has_key?("-L") and @config[group]["-L"]
print "longname\n" if Debuglevel > 1
if save_file("#{@config[group]["DATADIR"]}/#{group}", i, body)
articles.group_update_newsrc(i)
articles.save_newsrc unless @config[group].has_key?("-T") and @config[group]["-T"]
end
else
print "shortname\n" if Debuglevel > 1
if save_file("#{@config[group]["DATADIR"]}/#{group}", filename, body)
articles.group_update_newsrc(i)
articles.save_newsrc unless @config[group].has_key?("-T") and @config[group]["-T"]
end
end
else
return false
end
return true
#messids = articles.get_group_messids(i)
#articles.group_update_newsrc(i)
#newsrc.mark_list(group, marked)
#articles.save_newsrc unless @config[group].has_key?("-T") and @config[group]["-T"]
#marked.collect!{|x| print "marked: #{x}\n"}
end
#############################################################################################
defaults = {'-c' => '.ripnewsrc'}
defaults = parse_options(defaults)
config = parse_config(defaults)
check_config(config)
parse_config(defaults)
check_config
if Debuglevel > 2
config.each_key{|i|
@config.each_key{|i|
print "Group: #{i}\n"
config[i].each_key{|j|
print "Opt: #{j} val: #{config[i][j]}\n"
@config[i].each_key{|j|
print "Opt: #{j} val: #{@config[i][j]}\n"
}
}
end
for group in config.keys.sort
#newsrc = News::Newsrc.new(config[group]["NEWSRCNAME"])
for group in @config.keys.sort
print "Getting articles for #{group}\n"
articles = Article.new(config[group]["NNTPSERVER"], group, config[group]["NEWSRCNAME"])
#articles.set_skip_ids(config[group]["NNTPSERVER"], newsrc.marked_articles(group))
articles.get_articles(config[group]["CACHEDIR"])
articles = Article.new(@config[group]["NNTPSERVER"], group, @config[group]["NEWSRCNAME"])
articles.get_articles(@config[group]["CACHEDIR"])
unless FileTest.directory?("#{config[group]["DATADIR"]}/#{group}") or
Dir.mkdir("#{config[group]["DATADIR"]}/#{group}", config[group]["PERMISSION"].oct)
unless FileTest.directory?("#{@config[group]["DATADIR"]}/#{group}") or
Dir.mkdir("#{@config[group]["DATADIR"]}/#{group}", @config[group]["PERMISSION"].oct)
print "eeeps, couldn't create dir\n"
exit
end
for i in articles.get_group_subjects
print "#{i}\n" if Debuglevel > 2
if !(config[group].has_key?("-X") and i =~ /#{config[group]["-X"]}/) and
i =~ /#{config[group]["-I"]}/
if !(@config[group].has_key?("-X") and i =~ /#{@config[group]["-X"]}/) and
i =~ /#{@config[group]["-I"]}/
print "Match: #{i}\n" if Debuglevel > 0
if articles.group_is_complete(i)
print " Fetching: #{i}\n"
if articles.group_is_singlepart(i)
print " Singlepart!\n"
body = articles.get_group_body(i)
if articles.is_uuencoded(body)
mode, filename, body = articles.uudecode(body)
else
print "Not UUencoded!\n"
end
mode, filename, body = get_single(articles, i)
elsif articles.group_is_multipart(i)
print " Multipart!\n"
if config[group]["TEMPDIR"] == nil or config[group]["TEMPDIR"] == ""
body = articles.get_group_body(i)
if articles.is_uuencoded(body)
mode, filename, body = articles.uudecode(body)
else
print "Multipart article not UUencoded!\n"
end
else
body = articles.get_group_body_first(i)
if articles.is_uuencoded(body)
file = Tempfile.new("riptmp", config[group]["TEMPDIR"])
body.collect{|x| file.print "#{x}\n"}
articles.get_group_body_rest(i, file)
fileout = Tempfile.new("riptmp", config[group]["TEMPDIR"])
mode, filename, body = articles.uudecode(file, fileout)
body = fileout.path
file.close
fileout.close
else
print "Multipart article not UUencoded!\n"
end
end
mode, filename, body = get_multi(articles, i, group)
end
if mode
print " mode: #{mode}\n" if Debuglevel > 0
print " Filename: '#{filename}'\n" if Debuglevel > 0
if config[group].has_key?("-L") and config[group]["-L"]
print "longname\n" if Debuglevel > 1
save_file("#{config[group]["DATADIR"]}/#{group}", i, body)
else
print "shortname\n" if Debuglevel > 1
save_file("#{config[group]["DATADIR"]}/#{group}", filename, body)
end
end
#messids = articles.get_group_messids(i)
articles.group_update_newsrc(i)
#newsrc.mark_list(group, marked)
articles.save_newsrc unless config[group].has_key?("-T") and config[group]["-T"]
#marked.collect!{|x| print "marked: #{x}\n"}
output_data(mode, filename, body)
else
print " Not complete: #{i}\n"
end