Source code for slixmpp.plugins.xep_0352.csi

# 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 import ClientXMPP
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__)

[docs]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) if isinstance(self.xmpp, ClientXMPP): self.xmpp.register_feature('csi', self._handle_csi_feature, restart=False, order=self.order) def plugin_end(self): if self.xmpp.is_component: return if isinstance(self.xmpp, ClientXMPP): self.xmpp.unregister_feature('csi', self.order) self.xmpp.remove_stanza(stanza.Active) self.xmpp.remove_stanza(stanza.Inactive)
[docs] def send_active(self): """Send an 'active' state""" if self.enabled: self.xmpp.send_raw(str(stanza.Active(self.xmpp)))
[docs] 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