blob: 93295b84d6c21a439b4ea1e050b3fceaddb0f301 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
|