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

Implement XEP-0352 #414

Merged
merged 1 commit into from
Jul 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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()