]> oss.titaniummirror.com Git - webber.git/blobdiff - plugins/rss_feed.py
Fix directories key error in get_path_to_root
[webber.git] / plugins / rss_feed.py
index a8adbec8bb068ce3e7ddd29bdd1e02a14d1d0aad..6104bf51139da3f5b8aced75c0f81f3ef93dbfad 100644 (file)
@@ -8,6 +8,7 @@ except ImportError:
        raise
 
 items = []
+max_age = 0
 
 
 @set_hook("checkconfig")
@@ -15,21 +16,27 @@ def checkconfig(params):
        if not cfg.has_key("rss_file"):
                log('no "rss_file:" configured, using "feed.rss":', 4)
                cfg.rss_file = "feed.rss"
+       if not cfg.has_key("rss_max_items"):
+               cfg.rss_max_items = 0
+       if cfg.has_key("rss_max_age_days"):
+               import time
+               global max_age
+               max_age = int(time.time()) - int(cfg.rss_max_age_days)*86400
 
 
 # Helper class needed for datetime.datetime to generate GMT timestamps
 ZERO = datetime.timedelta(0)
 class UTC(datetime.tzinfo):
-    """UTC"""
+       """UTC"""
 
-    def utcoffset(self, dt):
-        return ZERO
+       def utcoffset(self, dt):
+               return ZERO
 
-    def tzname(self, dt):
-        return "UTC"
+       def tzname(self, dt):
+               return "UTC"
 
-    def dst(self, dt):
-        return ZERO
+       def dst(self, dt):
+               return ZERO
 utc = UTC()
 
 
@@ -38,27 +45,47 @@ def sitemap_scan(params):
        global items
 
        file = params.file
+       # Only consider new stuff
+       if max_age and file["mtime"] < max_age:
+               return
+       # Ignore non-pages
        if not file.has_key("linktitle"):
                return
+       # Ignore hidden pages
+       if file.has_key("hide") and file.hide:
+               return
+
        if file.has_key("change"):
                change = file["change"]
        else:
                change = ""
 
-       fname_out = os.path.join(cfg.out_dir, file.out_path)
-       full_url = "http://%s/%s" % (cfg.main_url, fname_out)
+       full_url = "http://%s/%s" % (cfg.main_url, file.out_path)
        item = PyRSS2Gen.RSSItem(
                title = file["title"],
                link = full_url,
                guid = PyRSS2Gen.Guid("%s %s" % (full_url, file["mtime"]), isPermaLink=0),
                description = change,
-               pubDate = datetime.datetime.fromtimestamp(file["mtime"], utc),
+               pubDate = file["mtime"]
        )
        items.append(item)
 
 
 @set_hook("finish")
 def finish(params):
+       global items
+       # Sort items by pubDate, which still holds the mtime
+       items.sort(key=lambda i: i.pubDate, reverse=True)
+
+       # Limit to requested number
+       count = int(cfg.rss_max_items)
+       if count:
+               items = items[:count]
+
+       # convert mtime to real pupDate
+       for i in items:
+               i.pubDate = datetime.datetime.fromtimestamp(i.pubDate, utc)
+
        rss = PyRSS2Gen.RSS2(
                title = cfg.subtitle,
                link = "http://%s" % cfg.main_url,