diff options
-rw-r--r-- | core/rostermanager.lua | 14 | ||||
-rw-r--r-- | plugins/mod_roster.lua | 8 |
2 files changed, 11 insertions, 11 deletions
diff --git a/core/rostermanager.lua b/core/rostermanager.lua index 143fdf7d..c1fa3dea 100644 --- a/core/rostermanager.lua +++ b/core/rostermanager.lua @@ -7,6 +7,7 @@ end local setmetatable = setmetatable; local format = string.format; local loadfile, setfenv, pcall = loadfile, setfenv, pcall; +local pairs, ipairs = pairs, ipairs; local hosts = hosts; @@ -14,7 +15,6 @@ require "util.datamanager" local datamanager = datamanager; local st = require "util.stanza"; -local send = require "core.sessionmanager".send_to_session; module "rostermanager" @@ -66,19 +66,19 @@ function roster_push(username, host, jid) stanza:tag("query", {xmlns = "jabber:iq:roster"}); if item then stanza:tag("item", {jid = jid, subscription = item.subscription, name = item.name}); + for group in pairs(item.groups) do + stanza:tag("group"):text(group):up(); + end else stanza:tag("item", {jid = jid, subscription = "remove"}); end - for group in item.groups do - stanza:tag("group"):text(group):up(); - end stanza:up(); stanza:up(); -- stanza ready - for _, session in ipairs(hosts[host].sessions[username].sessions) do + for _, session in pairs(hosts[host].sessions[username].sessions) do if session.full_jid then -- FIXME do we need to set stanza.attr.to? - send(session, stanza); + session.send(stanza); end end end @@ -98,7 +98,7 @@ end function save_roster(username, host) if hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster then - return datamanager.save(username, host, "roster", hosts[host].sessions[username].roster); + return datamanager.store(username, host, "roster", hosts[host].sessions[username].roster); end return nil; end diff --git a/plugins/mod_roster.lua b/plugins/mod_roster.lua index f32efaa8..8e2f6bbb 100644 --- a/plugins/mod_roster.lua +++ b/plugins/mod_roster.lua @@ -6,6 +6,7 @@ local jid_split = require "util.jid".split; local t_concat = table.concat; local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; +local rm_add_to_roster = require "core.rostermanager".add_to_roster; local rm_roster_push = require "core.rostermanager".roster_push; add_iq_handler("c2s", "jabber:iq:roster", @@ -15,15 +16,14 @@ add_iq_handler("c2s", "jabber:iq:roster", local roster = st.reply(stanza) :query("jabber:iq:roster"); for jid in pairs(session.roster) do - local item = st.stanza("item", { + roster:tag("item", { jid = jid, subscription = session.roster[jid].subscription, name = session.roster[jid].name, }); for group in pairs(session.roster[jid].groups) do - item:tag("group"):text(group):up(); + roster:tag("group"):text(group):up(); end - roster:add_child(item); end send(session, roster); return true; @@ -52,7 +52,7 @@ add_iq_handler("c2s", "jabber:iq:roster", local r_item = {name = item.attr.name, groups = {}}; if r_item.name == "" then r_item.name = nil; end if session.roster[item.attr.jid] then - r_item.subscription = session.roster[item.attr.jid]; + r_item.subscription = session.roster[item.attr.jid].subscription; else r_item.subscription = "none"; end |