# HG changeset patch # User Kim Alvefur # Date 1463001171 -7200 # Node ID cc0cf674888512e52e48eb2f48027f26011cbe32 # Parent 7be158b3376fcd57d521cb41a3d74b3c2176cb58 mod_presence_cache: Also cache the 'show' value diff -r 7be158b3376f -r cc0cf6748885 mod_presence_cache/mod_presence_cache.lua --- a/mod_presence_cache/mod_presence_cache.lua Sun May 08 18:05:41 2016 +0200 +++ b/mod_presence_cache/mod_presence_cache.lua Wed May 11 23:12:51 2016 +0200 @@ -7,7 +7,7 @@ local cache_size = module:get_option_number("presence_cache_size", 100); -local bare_cache = {}; -- [username NUL bare_jid] = { [full_jid] = timestamp, ... } +local bare_cache = {}; -- [username NUL bare_jid] = { [full_jid] = { timestamp, ... } } local function on_evict(cache_key) local bare_cache_key = cache_key:match("^%Z+%z[^/]+"); @@ -51,11 +51,14 @@ return; end - local stamp = datetime.datetime(); + local presence_bits = { + stamp = datetime.datetime(); + show = stanza:get_child_text("show"); + }; if jids then - jids[contact_full] = stamp; + jids[contact_full] = presence_bits; else - jids = { [contact_full] = stamp }; + jids = { [contact_full] = presence_bits }; bare_cache[bare_cache_key] = jids; end presence_cache:set(cache_key, true); @@ -76,9 +79,14 @@ local cached = bare_cache[bare_cache_key]; if not cached then return end - for jid, stamp in pairs(cached) do + for jid, presence_bits in pairs(cached) do local presence = st.presence({ to = origin.full_jid, from = jid }) - :tag("delay", { xmlns = "urn:xmpp:delay", from = module.host, stamp = stamp }):up(); + if presence_bits.show then + presence:tag("show"):text(presence_bits.show):up(); + end + if presence_bits.stamp then + presence:tag("delay", { xmlns = "urn:xmpp:delay", from = module.host, stamp = presence_bits.stamp }):up(); + end origin.send(presence); end end