Changeset

2175:cc0cf6748885

mod_presence_cache: Also cache the 'show' value
author Kim Alvefur <zash@zash.se>
date Wed, 11 May 2016 23:12:51 +0200
parents 2174:7be158b3376f
children 2176:b76b062e77db
files mod_presence_cache/mod_presence_cache.lua
diffstat 1 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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