change plugins
[opensuse:myopensuse.git] / vendor / plugins / rss / app / controllers / widgets / rss_controller.rb
1 class Widgets::RssController < WidgetController
2
3   before_filter :load_widget
4   LIMIT = 10
5
6   def index
7     @items = get_items @widget.get_config_value( :url )
8     render :partial => "widget/default", :locals =>  {:item_partial => 'widget/default_item',  :widget => @widget }
9   end
10
11   def self.default_options
12     options = Array.new
13     options << {:name => 'URL', :default_value => 'http://news.opensuse.org/feed/', :type => 'string', :info => 'rss url'}
14     options << {:name => 'Title', :default_value => 'News', :type => 'string', :info => 'headline'}
15     options << {:name => 'Subtitle', :default_value => 'Articles from news.opensuse.org', :type => 'string', :info => 'sub headline'}
16     options
17   end
18
19 private
20
21   def get_items url
22     items = Rails.cache.read('rss-' + Digest::MD5.hexdigest(url))
23     if (items.nil?)
24       logger.debug "Cache miss for RSS at #{url[0..160]}"
25       response = RedirectFollower.new(url).resolve
26       rss_xml = REXML::Document.new(response.body)
27       items = Array.new
28       rss_xml.root.elements.to_a("//item").entries[0..(LIMIT)].each do |item|
29         items << {:link => item.elements['link'].text, :prefix => relative_time_string( item.elements['pubDate'].text ),
30                    :summary => item.elements['title'].text }
31       end
32       Rails.cache.write('rss-' + Digest::MD5.hexdigest(url), items, :expires_in => 5.minutes)
33     end
34     items
35   end
36
37 end