mod_idlecompat/mod_idlecompat.lua
author Kim Alvefur <zash@zash.se>
Mon, 24 Aug 2015 23:17:36 +0200
changeset 1788 1656d4fd71d0
parent 1260 4e14ad802d58
child 2168 4b58e35a72e0
permissions -rw-r--r--
mod_cloud_notify: Fix syntax errors and name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1260
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     1
-- Last User Interaction in Presence via Last Activity compatibility module
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     2
-- http://xmpp.org/extensions/xep-0319.html
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     3
-- http://xmpp.org/extensions/xep-0012.html
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     4
-- Copyright (C) 2014 Tobias Markmann
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     5
--
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     6
-- This file is MIT/X11 licensed.
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     7
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     8
local st = require "util.stanza";
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
     9
local datetime = require "util.datetime";
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    10
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    11
local function on_presence(event)
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    12
	local stanza = event.stanza;
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    13
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    14
	local last_activity = stanza.name == "presence" and stanza:get_child("query", "jabber:iq:last") or false;
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    15
	local has_idle = stanza:get_child("idle", "urn:xmpp:idle:1");
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    16
	if last_activity and not has_idle then
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    17
		module:log("debug", "Adding XEP-0319 tag from Last Activity.");
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    18
		local seconds = last_activity.attr.seconds;
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    19
		local last_userinteraction = datetime.datetime(os.time() - seconds);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    20
		stanza:tag("idle", { xmlns = "urn:xmpp:idle:1", since = last_userinteraction }):up();
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    21
	end
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    22
end
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    23
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    24
-- incoming
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    25
module:hook("presence/full", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    26
module:hook("presence/bare", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    27
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    28
-- outgoing
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    29
module:hook("pre-presence/bare", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    30
module:hook("pre-presence/full", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
    31
module:hook("pre-presence/host", on_presence, 900);