From 7defa5c8813fa8a8d6833033ef4f68be27a2252d Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Mon, 26 Jan 2009 01:34:58 +0100 Subject: [PATCH] rss plugin: fix false 'using old data' Store the actual fetch and parse success in the feed itself TODO: doesn't work because e.g. on my machine the reschedule triggers AFTER, and not before, the rest of the show code. --- data/rbot/plugins/rss.rb | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/data/rbot/plugins/rss.rb b/data/rbot/plugins/rss.rb index f80236f0..e8d84869 100644 --- a/data/rbot/plugins/rss.rb +++ b/data/rbot/plugins/rss.rb @@ -185,7 +185,7 @@ end class ::RssBlob attr_accessor :url, :handle, :type, :refresh_rate, :xml, :title, :items, - :mutex, :watchers, :last_fetched + :mutex, :watchers, :last_fetched, :fetched, :parsed def initialize(url,handle=nil,type=nil,watchers=[], xml=nil, lf = nil) @url = url @@ -203,6 +203,10 @@ class ::RssBlob @mutex = Mutex.new @last_fetched = lf sanitize_watchers(watchers) + # last fetch was successfull + @fetched = nil + # last parse got this many items + @parsed = nil end def dup @@ -605,14 +609,12 @@ class RSSFeedsPlugin < Plugin feed.add_watch(m.replyto) end else - fetched = fetchRss(feed, m, false) - end - return unless fetched or feed.xml - if fetched or not feed.items - parsed = parseRss(feed, m) + fetchRss(feed, m, false) end + return unless feed.fetched or feed.xml + parseRss(feed, m) if feed.fetched and not feed.parsed return unless feed.items - m.reply "using old data" unless fetched and parsed and parsed > 0 + m.reply "using old data" unless feed.fetched and feed.parsed and feed.parsed > 0 title = feed.title items = feed.items @@ -1108,6 +1110,8 @@ class RSSFeedsPlugin < Plugin end feed.mutex.synchronize do feed.xml = xml + feed.fetched = true + feed.parsed = nil end return true end @@ -1127,14 +1131,14 @@ class RSSFeedsPlugin < Plugin debug "parsed but not validated #{feed}" rescue RSS::Error => e report_problem("parsing rss stream failed, whoops =(", e, m) - return nil + return feed.parsed = nil end rescue RSS::Error => e report_problem("parsing rss stream failed, oioi", e, m) - return nil + return feed.parsed = nil rescue => e report_problem("processing error occured, sorry =(", e, m) - return nil + return feed.parsed = nil end items = [] if rss.nil? @@ -1143,13 +1147,13 @@ class RSSFeedsPlugin < Plugin else report_problem("#{feed.handle} @ #{feed.url} doesn't seem to contain an RSS or Atom feed I can read", nil, m) end - return nil + return feed.parsed = nil else begin rss.output_encoding = 'UTF-8' rescue RSS::UnknownConvertMethod => e report_problem("bah! something went wrong =(", e, m) - return nil + return feed.parsed = nil end if rss.respond_to? :channel rss.channel.title ||= "(?)" @@ -1169,7 +1173,7 @@ class RSSFeedsPlugin < Plugin feed.title = title.strip feed.items = items end - return items.length + return feed.parsed = items.length end end end -- 2.32.0.93.g670b81a890