From 53879858b20d0d8e38279192e5fa0d4491c0ace8 Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Sun, 5 May 2002 22:18:11 +0000 Subject: [PATCH] restructure code --- trunk/ripnews/ripnews.rb | 228 ++++++++++++++++++++++----------------- 1 file changed, 130 insertions(+), 98 deletions(-) diff --git a/trunk/ripnews/ripnews.rb b/trunk/ripnews/ripnews.rb index 3166a97..ce8f18b 100755 --- a/trunk/ripnews/ripnews.rb +++ b/trunk/ripnews/ripnews.rb @@ -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