Implement XEP-0352 (client state indication)
This commit is contained in:
parent
8fc6814b6d
commit
90ea2a3411
15
slixmpp/plugins/xep_0352/__init__.py
Normal file
15
slixmpp/plugins/xep_0352/__init__.py
Normal 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)
|
76
slixmpp/plugins/xep_0352/csi.py
Normal file
76
slixmpp/plugins/xep_0352/csi.py
Normal 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
|
33
slixmpp/plugins/xep_0352/stanza.py
Normal file
33
slixmpp/plugins/xep_0352/stanza.py
Normal 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()
|
Loading…
Reference in New Issue
Block a user