diff options
author | mathieui <mathieui@mathieui.net> | 2016-06-04 22:59:23 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2016-06-04 22:59:23 +0200 |
commit | 90ea2a34117e5f44b3c76ee5afcec06ab51c1057 (patch) | |
tree | cac500b16920ab0d7f87b4d0b164117007957754 /slixmpp/plugins/xep_0352/csi.py | |
parent | 8fc6814b6d7c05621dd2ca1d914960c6dbdadb49 (diff) | |
download | slixmpp-90ea2a34117e5f44b3c76ee5afcec06ab51c1057.tar.gz slixmpp-90ea2a34117e5f44b3c76ee5afcec06ab51c1057.tar.bz2 slixmpp-90ea2a34117e5f44b3c76ee5afcec06ab51c1057.tar.xz slixmpp-90ea2a34117e5f44b3c76ee5afcec06ab51c1057.zip |
Implement XEP-0352 (client state indication)
Diffstat (limited to 'slixmpp/plugins/xep_0352/csi.py')
-rw-r--r-- | slixmpp/plugins/xep_0352/csi.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/slixmpp/plugins/xep_0352/csi.py b/slixmpp/plugins/xep_0352/csi.py new file mode 100644 index 00000000..93295b84 --- /dev/null +++ b/slixmpp/plugins/xep_0352/csi.py @@ -0,0 +1,76 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +import logging + +from slixmpp.stanza import StreamFeatures +from slixmpp.xmlstream import register_stanza_plugin +from slixmpp.plugins.base import BasePlugin +from slixmpp.plugins.xep_0352 import stanza, Active, Inactive, ClientStateIndication + + +log = logging.getLogger(__name__) + + +class XEP_0352(BasePlugin): + + """ + XEP-0352: Client State Indication + """ + + name = 'xep_0352' + description = 'XEP-0352: Client State Indication' + dependencies = set() + stanza = stanza + default_config = { + "order": 12000, + } + + def plugin_init(self): + """Start the XEP-0352 plugin.""" + + self.enabled = False + + register_stanza_plugin(StreamFeatures, ClientStateIndication) + self.xmpp.register_stanza(stanza.Active) + self.xmpp.register_stanza(stanza.Inactive) + + self.xmpp.register_feature('csi', + self._handle_csi_feature, + restart=False, + order=self.order) + + + def plugin_end(self): + if self.xmpp.is_component: + return + + self.xmpp.unregister_feature('csi', self.order) + self.xmpp.remove_stanza(stanza.Active) + self.xmpp.remove_stanza(stanza.Inactive) + + def send_active(self): + """Send an 'active' state""" + if self.enabled: + self.xmpp.send_raw(str(stanza.Active(self.xmpp))) + + def send_inactive(self): + """Send an 'active' state""" + if self.enabled: + self.xmpp.send_raw(str(stanza.Inactive(self.xmpp))) + + def _handle_csi_feature(self, features): + """ + Enable CSI + """ + if 'csi' in self.xmpp.features: + log.debug('CSI already enabled') + return False + self.enabled = True + self.xmpp.event('csi_enabled', features) + return False |