Mercurial > prosody-modules
diff mod_mam/mod_mam.lua @ 1135:0d6ab5e4bc30
mod_mam: Break out routines for converting prefs between XML and our internal representation into a library
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Aug 2013 20:38:25 +0200 |
parents | 2345a30dd8b4 |
children | d055c44a7f61 |
line wrap: on
line diff
--- a/mod_mam/mod_mam.lua Sat Aug 10 17:32:28 2013 +0200 +++ b/mod_mam/mod_mam.lua Sat Aug 10 20:38:25 2013 +0200 @@ -10,7 +10,9 @@ local st = require "util.stanza"; local rsm = module:require "rsm"; local prefs = module:require"mamprefs"; +local prefsxml = module:require"mamprefsxml"; local set_prefs, get_prefs = prefs.set, prefs.get; +local prefs_to_stanza, prefs_from_stanza = prefsxml.tostanza, prefsxml.fromstanza; local jid_bare = require "util.jid".bare; local jid_split = require "util.jid".split; local jid_prep = require "util.jid".prep; @@ -47,51 +49,17 @@ local origin, stanza = event.origin, event.stanza; local user = origin.username; if stanza.attr.type == "get" then - local prefs = get_prefs(user); - local default = prefs[false]; - default = default ~= nil and default_attrs[default] or global_default_policy; - local reply = st.reply(stanza):tag("prefs", { xmlns = xmlns_mam, default = default }) - local always = st.stanza("always"); - local never = st.stanza("never"); - for k,v in pairs(prefs) do - if k then - (v and always or never):tag("jid"):text(k):up(); - end - end - reply:add_child(always):add_child(never); - origin.send(reply); - return true + local prefs = prefs_to_stanza(get_prefs(user)); + local reply = st.reply(stanza):add_child(prefs); + return origin.send(reply); else -- type == "set" - local prefs = {}; local new_prefs = stanza:get_child("prefs", xmlns_mam); - local new_default = new_prefs.attr.default; - if new_default then - prefs[false] = default_attrs[new_default]; - end - - local always = new_prefs:get_child("always"); - if always then - for rule in always:childtags("jid") do - local jid = rule:get_text(); - prefs[jid] = true; - end - end - - local never = new_prefs:get_child("never"); - if never then - for rule in never:childtags("jid") do - local jid = rule:get_text(); - prefs[jid] = false; - end - end - + local prefs = prefs_from_stanza(new_prefs); local ok, err = set_prefs(user, prefs); if not ok then - origin.send(st.error_reply(stanza, "cancel", "internal-server-error", "Error storing preferences: "..tostring(err))); - else - origin.send(st.reply(stanza)); + return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", "Error storing preferences: "..tostring(err))); end - return true + return origin.send(st.reply(stanza)); end end);