]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/rss.rb
plugins: raise a descriptive LoadError when the db is corrupt on load
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / rss.rb
index 7407655e23639de4e0d7d5b16c8e3c973fae228c..7dcfdf6649977a2eccac37961163cae7964848e6 100644 (file)
@@ -314,6 +314,10 @@ class RSSFeedsPlugin < Plugin
   # TODO: load personal ones
   def define_filters
     @outkey = :"rss.out"
+    @bot.register_filter(:headlines, @outkey) { |s|
+      line1 = (s[:handle].empty? ? "%{date}" : "%{handle}") << "%{title}"
+      make_stream(line1, nil, s)
+    }
     @bot.register_filter(:blog, @outkey) { |s|
       author = s[:author] ? (s[:author] + " ") : ""
       abt = s[:category] ? "about #{s[:category]} " : ""
@@ -329,13 +333,13 @@ class RSSFeedsPlugin < Plugin
       make_stream(line1, line2, s, :author => author, :abt => abt)
     }
     @bot.register_filter(:news, @outkey) { |s|
-      line1 = "%{handle}%{date}%{title} @ %{link}" % s
+      line1 = "%{handle}%{date}%{title}%{at}%{link}" % s
       line2 = "%{handle}%{date}%{desc}" % s
       make_stream(line1, line2, s)
     }
     @bot.register_filter(:git, @outkey) { |s|
       author = s[:author] ? (s[:author] + " ") : ""
-      line1 = "%{handle}%{date}%{author}committed %{title} @ %{link}"
+      line1 = "%{handle}%{date}%{author}committed %{title}%{at}%{link}"
       make_stream(line1, nil, s, :author => author)
     }
     @bot.register_filter(:forum, @outkey) { |s|
@@ -353,7 +357,7 @@ class RSSFeedsPlugin < Plugin
     }
     @bot.register_filter(:trac, @outkey) { |s|
       author = s[:author].sub(/@\S+?\s*>/, "@...>") + ": " if s[:author]
-      line1 = "%{handle}%{date}%{author}%{title} @ %{link}"
+      line1 = "%{handle}%{date}%{author}%{title}%{at}%{link}"
       line2 = nil
       unless s[:item].title =~ /^(?:Changeset \[(?:[\da-f]+)\]|\(git commit\))/
         line2 = "%{handle}%{date}%{desc}"
@@ -441,7 +445,7 @@ class RSSFeedsPlugin < Plugin
       }
 
       @feeds = @registry[:feeds]
-      raise unless @feeds
+      raise LoadError, "corrupted feed database" unless @feeds
 
       @registry.recovery = nil
 
@@ -1088,6 +1092,13 @@ class RSSFeedsPlugin < Plugin
     # reassign the 0.9 RDFs to 1.0, and hope it goes right.
     xml.gsub!("xmlns=\"http://my.netscape.com/rdf/simple/0.9/\"",
               "xmlns=\"http://purl.org/rss/1.0/\"")
+    # make sure the parser doesn't double-convert in case the feed is not UTF-8
+    xml.sub!(/<\?xml (.*?)\?>/) do |match|
+      if /\bencoding=(['"])(.*?)\1/.match(match)
+        match.sub!(/\bencoding=(['"])(?:.*?)\1/,'encoding="UTF-8"')
+      end
+      match
+    end
     feed.mutex.synchronize do
       feed.xml = xml
     end
@@ -1149,7 +1160,7 @@ class RSSFeedsPlugin < Plugin
         report_problem("no items found in the feed, maybe try weed?", e, m)
         return nil
       end
-      feed.title = title
+      feed.title = title.strip
       feed.items = items
       return true
     end