This repository has been archived by the owner on Feb 19, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 298
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement XEP-0352 (client state indication)
- Loading branch information
Showing
3 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |