From 1192a5719e5805cf65245323c3436568e6e8ff74 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Sun, 28 Jun 2009 21:49:31 +0500 Subject: mod_pep: Use cached caps --- plugins/mod_pep.lua | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_pep.lua b/plugins/mod_pep.lua index 3d0b6ad8..78098423 100644 --- a/plugins/mod_pep.lua +++ b/plugins/mod_pep.lua @@ -48,6 +48,18 @@ local function publish(session, node, item) end end end +local function publish_all(user, recipient, session) + local d = data[user]; + local notify = recipients[user] and recipients[user][recipient]; + if d and notify then + for node, message in pairs(notify) do + if d[node] then + message.attr.to = recipient; + session.send(message); + end + end + end +end local function get_caps_hash_from_presence(stanza, current) local t = stanza.attr.type; @@ -85,11 +97,16 @@ module:hook("presence/bare", function(event) if recipients[user] then recipients[user][recipient] = nil; end else recipients[user] = recipients[user] or {}; - recipients[user][recipient] = hash; - origin.send( - st.stanza("iq", {from=stanza.attr.to, to=stanza.attr.from, id="disco", type="get"}) - :query("http://jabber.org/protocol/disco#info") - ); + if hash_map[hash] then + recipients[user][recipient] = hash_map[hash]; + publish_all(user, recipient); + else + recipients[user][recipient] = hash; + origin.send( + st.stanza("iq", {from=stanza.attr.to, to=stanza.attr.from, id="disco", type="get"}) + :query("http://jabber.org/protocol/disco#info") + ); + end end end end, 10); @@ -180,15 +197,7 @@ module:hook("iq/bare/disco", function(event) hash_map[ver] = notify; -- update hash map recipients[user][contact] = notify; -- set recipient's data to calculated data -- send messages to recipient - local d = data[user]; - if d then - for node, message in pairs(notify) do - if d[node] then - message.attr.to = stanza.attr.from; - session.send(message); - end - end - end + publish_all(user, contact, session); end end end); -- cgit v1.2.3