Implement XEP-0352 (client state indication)

This commit is contained in:
mathieui 2016-06-04 22:59:23 +02:00
parent 8fc6814b6d
commit 90ea2a3411
3 changed files with 124 additions and 0 deletions

View File

@ -0,0 +1,15 @@
"""
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.
"""
from slixmpp.plugins.base import register_plugin
from slixmpp.plugins.xep_0352.stanza import Active, Inactive, ClientStateIndication
from slixmpp.plugins.xep_0352.csi import XEP_0352
register_plugin(XEP_0352)

View File

@ -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

View File

@ -0,0 +1,33 @@
"""
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.
"""
from slixmpp.stanza import Error
from slixmpp.xmlstream import ElementBase, StanzaBase
class ClientStateIndication(ElementBase):
name = 'csi'
namespace = 'urn:xmpp:csi:0'
plugin_attrib = name
class Active(StanzaBase):
name = 'active'
plugin_attrib = 'active'
namespace = 'urn:xmpp:csi:0'
def setup(self, xml):
StanzaBase.setup(self, xml)
self.xml.tag = self.tag_name()
class Inactive (StanzaBase):
name = 'inactive'
plugin_attrib = 'inactive'
namespace = 'urn:xmpp:csi:0'
def setup(self, xml):
StanzaBase.setup(self, xml)
self.xml.tag = self.tag_name()