Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Daniel Brötzmann
python-nbxmpp
Commits
16305759
Commit
16305759
authored
Oct 14, 2019
by
Philipp Hörist
Browse files
Add Chat State Notifications (XEP-0085) support
parent
bae3cfd1
Changes
4
Hide whitespace changes
Inline
Side-by-side
nbxmpp/const.py
View file @
16305759
...
...
@@ -545,3 +545,12 @@ TUNE_DATA = [
'title'
,
'track'
,
'uri'
]
CHATSTATES
=
[
'active'
,
'inactive'
,
'gone'
,
'composing'
,
'paused'
]
\ No newline at end of file
nbxmpp/dispatcher.py
View file @
16305759
...
...
@@ -77,6 +77,7 @@ from nbxmpp.modules.oob import OOB
from
nbxmpp.modules.correction
import
Correction
from
nbxmpp.modules.attention
import
Attention
from
nbxmpp.modules.security_labels
import
SecurityLabels
from
nbxmpp.modules.chatstates
import
Chatstates
from
nbxmpp.modules.misc
import
unwrap_carbon
from
nbxmpp.modules.misc
import
unwrap_mam
from
nbxmpp.util
import
get_properties_struct
...
...
@@ -221,6 +222,7 @@ class XMPPDispatcher(PlugIn):
self
.
_modules
[
'Correction'
]
=
Correction
(
self
.
_owner
)
self
.
_modules
[
'Attention'
]
=
Attention
(
self
.
_owner
)
self
.
_modules
[
'SecurityLabels'
]
=
SecurityLabels
(
self
.
_owner
)
self
.
_modules
[
'Chatstates'
]
=
Chatstates
(
self
.
_owner
)
for
instance
in
self
.
_modules
.
values
():
for
handler
in
instance
.
handlers
:
...
...
nbxmpp/modules/chatstates.py
0 → 100644
View file @
16305759
# Copyright (C) 2018 Philipp Hörist <philipp AT hoerist.com>
#
# This file is part of nbxmpp.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; If not, see <http://www.gnu.org/licenses/>.
import
logging
from
nbxmpp.protocol
import
NS_CHATSTATES
from
nbxmpp.protocol
import
NS_DELAY2
from
nbxmpp.structs
import
StanzaHandler
from
nbxmpp.const
import
CHATSTATES
log
=
logging
.
getLogger
(
'nbxmpp.m.chatstates'
)
class
Chatstates
:
def
__init__
(
self
,
client
):
self
.
_client
=
client
self
.
handlers
=
[
StanzaHandler
(
name
=
'message'
,
callback
=
self
.
_process_message_chatstate
,
ns
=
NS_CHATSTATES
,
priority
=
15
),
]
def
_process_message_chatstate
(
self
,
_con
,
stanza
,
properties
):
chatstate
=
parse_chatstate
(
stanza
)
if
chatstate
is
None
:
return
if
properties
.
is_mam_message
:
return
if
stanza
.
getTag
(
'delay'
,
namespace
=
NS_DELAY2
)
is
not
None
:
return
if
chatstate
not
in
CHATSTATES
:
log
.
warning
(
'Invalid chatstate: %s'
,
chatstate
)
log
.
warning
(
stanza
)
return
properties
.
chatstate
=
chatstate
def
parse_chatstate
(
stanza
):
children
=
stanza
.
getChildren
()
for
child
in
children
:
if
child
.
getNamespace
()
==
NS_CHATSTATES
:
return
child
.
getName
()
return
None
nbxmpp/structs.py
View file @
16305759
...
...
@@ -558,6 +558,7 @@ class MessageProperties:
self
.
forms
=
None
self
.
xhtml
=
None
self
.
security_label
=
None
self
.
chatstate
=
None
@
property
def
has_user_delay
(
self
):
...
...
@@ -662,6 +663,10 @@ class MessageProperties:
def
has_security_label
(
self
):
return
self
.
security_label
is
not
None
@
property
def
has_chatstate
(
self
):
return
self
.
chatstate
is
not
None
class
IqProperties
:
def
__init__
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment