def OPML::import(file_name, refresh=nil, lock_title=nil, save_items=nil, force=false)
begin
contents = if uri?(file_name)
begin
Raggle::Engine::get_url(file_name)[0]
rescue
raise "Couldn't get URI \"#{file_name}\"."
end
else
begin
ret = ''
file = (file_name == '-') ? $stdin : File::open(file_name)
ret = file.read
rescue
raise "Couldn't open input file \"#{file_name}\"."
ensure
file.close
ret
end
end
if contents && contents.size > 0
contents = contents.gsub(/<!\[CDATA\[(.*?)\]\]>/m) do |m|
$1.dup.escape_html
end
dup_added = false
doc = REXML::Document.new(contents)
doc.root.elements.each('//outline') do |outline|
title = outline.attributes['title'] || $config['default_feed_title']
url = outline.attributes['xmlUrl'] || outline.attributes['xmlurl'] || outline.attributes['url']
site = outline.attributes['htmlUrl'] || outline.attributes['htmlurl'] || ''
desc = outline.attributes['description'] || ''
cat = outline.attributes['category'] || nil
image = outline.attributes['image'] || nil
max_items = outline.attributes['max_items'] || nil
priority = outline.attributes['priority'].to_i || $config['default_feed_priority']
if outline.attributes['refresh']: opml_refresh = outline.attributes['refresh'].to_i
else opml_refresh = nil; end
frefresh = refresh || opml_refresh || $config['default_feed_refresh']
fsave_items = save_items || outline.attributes['save_items'] || false
flock_title = lock_title || outline.attributes['lock_title'] || false
if url.nil?
$stderr.puts "Warning: skipping incomplete OPML entry: #{outline}"
next
end
if (url =~ /^exec:/)
if $wins
Interfaces::NcursesInterface::set_status($config['msg_exec_url'])
return 1
else
raise "WARNING!!! EXEC URL IN OPML IMPORT"
end
end
feed = {'title' => title, 'url' => url, 'refresh' => frefresh,
'lock_title?' => flock_title, 'save_items?' => fsave_items,
'site' => site, 'desc' => desc, 'items' => [],
'image' => image, 'category' => cat, 'force' => force,
'priority' => priority, 'max_items' => max_items }
dup_added = true unless Engine::add_feed(feed)
end
if $wins
Interfaces::NcursesInterface::populate_feed_win
Interfaces::NcursesInterface::set_status($config['msg_opml_imported']) unless dup_added
end
else
raise "Empty input file \"#{file_name}\"."
end
rescue REXML::ParseException => parse_err
raise if $wins
die "Parsing #{file_name} failed: #{parse_err.message}" unless $wins
rescue => err
if $wins: Interfaces::NcursesInterface::set_status($config['msg_bad_uri'])
else die err.message; end
end
end