Skip to content
This repository has been archived by the owner on Feb 19, 2020. It is now read-only.

Commit

Permalink
Merge pull request #414 from mathieui/xep-0352
Browse files Browse the repository at this point in the history
Implement XEP-0352
  • Loading branch information
bear committed Jul 30, 2016
2 parents 4305edd + e5cdd1a commit fbc283b
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 0 deletions.
15 changes: 15 additions & 0 deletions sleekxmpp/plugins/xep_0352/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2016 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""

from sleekxmpp.plugins.base import register_plugin

from sleekxmpp.plugins.xep_0352.stanza import Active, Inactive, ClientStateIndication
from sleekxmpp.plugins.xep_0352.csi import XEP_0352


register_plugin(XEP_0352)
76 changes: 76 additions & 0 deletions sleekxmpp/plugins/xep_0352/csi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2016 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""

import logging

from sleekxmpp.stanza import StreamFeatures
from sleekxmpp.xmlstream import register_stanza_plugin
from sleekxmpp.plugins.base import BasePlugin
from sleekxmpp.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 changes: 33 additions & 0 deletions sleekxmpp/plugins/xep_0352/stanza.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2016 Nathanael C. Fritz, Lance J.T. Stout
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""

from sleekxmpp.stanza import Error
from sleekxmpp.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()

0 comments on commit fbc283b

Please sign in to comment.