Merge 0.9->0.10
[prosody.git] / plugins / mod_lastactivity.lua
index 04f817cb0334d73beeb822b9993bedf3c3f7b5b7..2dd61699999dcf5a56fb44dd62a5f0b4514ffe22 100644 (file)
@@ -1,7 +1,7 @@
 -- Prosody IM
--- Copyright (C) 2008-2009 Matthew Wild
--- Copyright (C) 2008-2009 Waqas Hussain
--- 
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 Waqas Hussain
+--
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
@@ -19,17 +19,16 @@ module:hook("pre-presence/bare", function(event)
        local stanza = event.stanza;
        if not(stanza.attr.to) and stanza.attr.type == "unavailable" then
                local t = os.time();
-               local s = stanza:child_with_name("status");
-               s = s and #s.tags == 0 and s[1] or "";
+               local s = stanza:get_child_text("status");
                map[event.origin.username] = {s = s, t = t};
        end
-end);
+end, 10);
 
 module:hook("iq/bare/jabber:iq:last:query", function(event)
        local origin, stanza = event.origin, event.stanza;
        if stanza.attr.type == "get" then
                local username = jid_split(stanza.attr.to) or origin.username;
-               if is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
+               if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
                        local seconds, text = "0", "";
                        if map[username] then
                                seconds = tostring(os.difftime(os.time(), map[username].t));
@@ -42,3 +41,11 @@ module:hook("iq/bare/jabber:iq:last:query", function(event)
                return true;
        end
 end);
+
+module.save = function()
+       return {map = map};
+end
+module.restore = function(data)
+       map = data.map or {};
+end
+