# HG changeset patch # User Kim Alvefur # Date 1320921932 -3600 # Node ID db5702bb9e41801f2e5893036d697a4c16900530 # Parent 942738953ff3e2c023e02d1b423bb9cac39a0721 mod_pubsub_feed: Dynamicaly reloadable config. diff -r 942738953ff3 -r db5702bb9e41 mod_pubsub_feed/mod_pubsub_feed.lua --- a/mod_pubsub_feed/mod_pubsub_feed.lua Thu Nov 10 11:24:31 2011 +0100 +++ b/mod_pubsub_feed/mod_pubsub_feed.lua Thu Nov 10 11:45:32 2011 +0100 @@ -38,19 +38,33 @@ local urldecode = http.urldecode; local urlencode = http.urlencode; -local config = module:get_option("feeds") or { - planet_jabber = "http://planet.jabber.org/atom.xml"; - prosody_blog = "http://blog.prosody.im/feed/atom.xml"; -}; -local refresh_interval = module:get_option_number("feed_pull_interval", 15) * 60; -local use_pubsubhubub = module:get_option_boolean("use_pubsubhubub", true); -- HTTP by default or not? -local httphost = module:get_option_string("pubsubhubub_httphost", module.host); -- If module.host IN A doesn't point to this server, use this to override. -local feed_list = { } -for node, url in pairs(config) do - feed_list[node] = { url = url; node = node; last_update = 0 }; +local feed_list = {}; +local refresh_interval; + +-- Dynamicaly reloadable config. +local function update_config() + local config = module:get_option("feeds") or { + planet_jabber = "http://planet.jabber.org/atom.xml"; + prosody_blog = "http://blog.prosody.im/feed/atom.xml"; + }; + refresh_interval = module:get_option_number("feed_pull_interval", 15) * 60; + local new_feed_list = {}; + for node, url in pairs(config) do + new_feed_list[node] = true; + if not feed_list[node] then + feed_list[node] = { url = url; node = node; last_update = 0 }; + else + feed_list[node].url = url; + end + end + for node in pairs(feed_list) do + if not new_feed_list[node] then + feed_list[node] = nil; + end + end end --- TODO module:hook("config-reloaded", above loop); --- Also, keeping it somewhere persistent in order to avoid duplicated publishes? +update_config(); +module:hook("config-reloaded", update_config); -- Used to kill the timer local module_unloaded = false; @@ -58,6 +72,13 @@ module_unloaded = true; end +-- Config stuff that can't be reloaded, since it would need to re-bind HTTP stuff. + +-- If module.host IN A doesn't point to this server, use this to override. +local httphost = module:get_option_string("pubsubhubub_httphost", module.host); +-- HTTP by default or not? +local use_pubsubhubub = module:get_option_boolean("use_pubsubhubub", true); + -- Thanks to Maranda for this local port, base, ssl = 5280, "callback", false; local ports = module:get_option("feeds_ports") or { port = port, base = base, ssl = ssl }; @@ -169,12 +190,13 @@ end function refresh_feeds() + local now = time(); if module_unloaded then return end --module:log("debug", "Refreshing feeds"); for node, item in pairs(feed_list) do --FIXME Don't fetch feeds which have a subscription -- Otoho, what if the subscription expires or breaks? - if item.last_update + refresh_interval < time() then + if item.last_update + refresh_interval < now then module:log("debug", "checking %s", item.node); fetch(item, update_entry); end