diff mod_lastlog/mod_lastlog.lua @ 1049:59f031d1cd38

mod_last_offline: Merge into an option of mod_lastlog
author Kim Alvefur <zash@zash.se>
date Mon, 03 Jun 2013 20:54:06 +0200
parents 50bed746aa16
children 59657e03c25c
line wrap: on
line diff
--- a/mod_lastlog/mod_lastlog.lua	Mon Jun 03 19:35:13 2013 +0200
+++ b/mod_lastlog/mod_lastlog.lua	Mon Jun 03 20:54:06 2013 +0200
@@ -1,4 +1,5 @@
 local datamanager = require "util.datamanager";	
+local jid = require "util.jid";
 local time = os.time;
 local log_ip = module:get_option_boolean("lastlog_ip_address", false);
 local host = module.host;
@@ -25,8 +26,29 @@
 	end
 end);
 
+if module:get_option_boolean("lastlog_stamp_offline") then
+	local function offline_stamp(event)
+		local stanza = event.stanza;
+		local node, to_host = jid.split(stanza.attr.from);
+		if to_host == host and event.origin == hosts[host] and stanza.attr.type == "unavailable" then
+			local data = datamanager.load(node, host, "lastlog");
+			local timestamp = data and data.timestamp;
+			if timestamp then
+				stanza:tag("delay", {
+					xmlns = "urn:xmpp:delay",
+					from = host,
+					stamp = datetime.datetime(timestamp),
+				}):up();
+			end
+		end
+	end
+
+	module:hook("pre-presence/bare", offline_stamp);
+	module:hook("pre-presence/full", offline_stamp);
+end
+
 function module.command(arg)
-	local user, host = require "util.jid".prepped_split(table.remove(arg, 1));
+	local user, host = jid.prepped_split(table.remove(arg, 1));
 	require"core.storagemanager".initialize_host(host);
 	local lastlog = assert(datamanager.load(user, host, "lastlog"));
 	if lastlog then