Bump to 1.3.1
[slixmpp.git] / sleekxmpp / plugins / xep_0256.py
blob0db8ea3b61b7b22aa890996ebbc5dd6576a96435
1 """
2 SleekXMPP: The Sleek XMPP Library
3 Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
4 This file is part of SleekXMPP.
6 See the file LICENSE for copying permission.
7 """
9 import logging
11 from sleekxmpp import Presence
12 from sleekxmpp.exceptions import XMPPError
13 from sleekxmpp.plugins import BasePlugin, register_plugin
14 from sleekxmpp.xmlstream import register_stanza_plugin
16 from sleekxmpp.plugins.xep_0012 import stanza, LastActivity
19 log = logging.getLogger(__name__)
22 class XEP_0256(BasePlugin):
24 name = 'xep_0256'
25 description = 'XEP-0256: Last Activity in Presence'
26 dependencies = set(['xep_0012'])
27 stanza = stanza
28 default_config = {
29 'auto_last_activity': False
32 def plugin_init(self):
33 register_stanza_plugin(Presence, LastActivity)
35 self.xmpp.add_filter('out', self._initial_presence_activity)
36 self.xmpp.add_event_handler('connected', self._reset_presence_activity)
38 self._initial_presence = set()
40 def plugin_end(self):
41 self.xmpp.del_filter('out', self._initial_presence_activity)
42 self.xmpp.del_event_handler('connected', self._reset_presence_activity)
44 def _reset_presence_activity(self, e):
45 self._initial_presence = set()
47 def _initial_presence_activity(self, stanza):
48 if isinstance(stanza, Presence):
49 use_last_activity = False
51 if self.auto_last_activity and stanza['show'] in ('xa', 'away'):
52 use_last_activity = True
54 if stanza['from'] not in self._initial_presence:
55 self._initial_presence.add(stanza['from'])
56 use_last_activity = True
58 if use_last_activity:
59 plugin = self.xmpp['xep_0012']
60 try:
61 result = plugin.api['get_last_activity'](stanza['from'],
62 None,
63 stanza['to'])
64 seconds = result['last_activity']['seconds']
65 except XMPPError:
66 seconds = None
68 if seconds is not None:
69 stanza['last_activity']['seconds'] = seconds
70 return stanza
73 register_plugin(XEP_0256)