# HG changeset patch # User Kim Alvefur # Date 1465221521 -7200 # Node ID eb5555a3a535a361f89cfe72af6fdccdecacab26 # Parent e9e38ae8037f6aa64b61f27c13a2052cb954dda4 mod_cloud_notify: Enable persistent storage of user notification settings diff -r e9e38ae8037f -r eb5555a3a535 mod_cloud_notify/mod_cloud_notify.lua --- a/mod_cloud_notify/mod_cloud_notify.lua Mon Jun 06 15:25:29 2016 +0200 +++ b/mod_cloud_notify/mod_cloud_notify.lua Mon Jun 06 15:58:41 2016 +0200 @@ -15,7 +15,8 @@ local include_sender = module:get_option("push_notification_with_sender", false); -- For keeping state across reloads -local push_enabled = module:shared("push-enabled-users"); +local push_enabled = module:open_store(); +-- TODO map store would be better here -- http://xmpp.org/extensions/xep-0357.html#disco module:hook("account-disco-info", function(event) @@ -38,10 +39,9 @@ origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid publish options")); return true; end - local user_push_services = push_enabled[origin.username]; + local user_push_services = push_enabled:get(origin.username); if not user_push_services then user_push_services = {}; - push_enabled[origin.username] = user_push_services; end user_push_services[push_jid .. "<" .. (push_node or "")] = { jid = push_jid; @@ -49,7 +49,12 @@ count = 0; options = publish_options; }; - origin.send(st.reply(stanza)); + local ok, err = push_enabled:set(origin.username, user_push_services); + if not ok then + origin.send(st.error_reply(stanza, "wait", "internal-server-error")); + else + origin.send(st.reply(stanza)); + end return true; end); @@ -62,7 +67,7 @@ origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing jid")); return true; end - local user_push_services = push_enabled[origin.username]; + local user_push_services = push_enabled:get(origin.username); for key, push_info in pairs(user_push_services) do if push_info.jid == push_jid and (not push_node or push_info.node == push_node) then user_push_services[key] = nil; @@ -84,7 +89,7 @@ local function handle_notify_request(origin, stanza) local to = stanza.attr.to; local node = to and jid.split(to) or origin.username; - local user_push_services = push_enabled[node]; + local user_push_services = push_enabled:get(node); if not user_push_services then return end for _, push_info in pairs(user_push_services) do @@ -163,7 +168,7 @@ module:hook("message/offline/broadcast", function(event) - local user_push_services = push_enabled[event.origin.username]; + local user_push_services = push_enabled:get(event.origin.username); if not user_push_services then return end for _, push_info in pairs(user_push_services) do