changeset 883:bec0a995f5df

mod_last_offline: New module that stores last logut time and attaches this timestamp to unavailable presence.
author Kim Alvefur <zash@zash.se>
date Thu, 20 Dec 2012 12:12:36 +0100
parents 4939788a47ea
children 2ece37bf9cc6
files mod_last_offline/mod_last_offline.lua
diffstat 1 files changed, 33 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_last_offline/mod_last_offline.lua	Thu Dec 20 12:12:36 2012 +0100
@@ -0,0 +1,33 @@
+local datamanager = require "util.datamanager";	
+local jid_split = require "util.jid".split;
+local time = os.time;
+local NULL = {};
+local host = module.host;
+
+module:hook("resource-unbind", function(event)
+	local session = event.session;
+	if session.username then
+		datamanager.store(session.username, host, "last_online", {
+			timestamp = time(),
+		});
+	end
+end);
+
+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 timestamp = (datamanager.load(node, host, "last_online") or NULL).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);
+