Mercurial > libervia-backend
annotate src/plugins/plugin_xep_0085.py @ 1390:337be5318177
primitivus (Chat): fixes updating the occupant list when someone leaves, changes his nick or is added in last position
author | souliane <souliane@mailoo.org> |
---|---|
date | Wed, 25 Mar 2015 10:09:59 +0100 |
parents | 8aa32bcc3a9c |
children | 069ad98b360d |
rev | line source |
---|---|
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT plugin for Chat State Notifications Protocol (xep-0085) |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Adrien Cossa (souliane@mailoo.org) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
908
diff
changeset
|
21 from sat.core.constants import Const as C |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 from sat.core import exceptions |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
23 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
24 log = getLogger(__name__) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 from wokkel import disco, iwokkel |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 from zope.interface import implements |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 from twisted.words.protocols.jabber.jid import JID |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 try: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 from twisted.words.protocols.xmlstream import XMPPHandler |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 except ImportError: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 from wokkel.subprotocols import XMPPHandler |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 from threading import Timer |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
659
diff
changeset
|
33 from twisted.words.xish import domish |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 NS_XMPP_CLIENT = "jabber:client" |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
36 NS_CHAT_STATES = "http://jabber.org/protocol/chatstates" |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
37 CHAT_STATES = ["active", "inactive", "gone", "composing", "paused"] |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 MESSAGE_TYPES = ["chat", "groupchat"] |
643
262d9d9ad27a
plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
39 PARAM_KEY = "Notifications" |
262d9d9ad27a
plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
40 PARAM_NAME = "Enable chat state notifications" |
262d9d9ad27a
plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
41 ENTITY_KEY = PARAM_KEY + "_" + PARAM_NAME |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
42 DELETE_VALUE = "DELETE" |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 PLUGIN_INFO = { |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
45 "name": "Chat State Notifications Protocol Plugin", |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 "import_name": "XEP-0085", |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 "type": "XEP", |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 "protocols": ["XEP-0085"], |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
49 "dependencies": [], |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 "main": "XEP_0085", |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 "handler": "yes", |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 "description": _("""Implementation of Chat State Notifications Protocol""") |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 } |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
55 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
56 # Describe the internal transitions that are triggered |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 # by a timer. Beside that, external transitions can be |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
58 # runned to target the states "active" or "composing". |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
59 # Delay is specified here in seconds. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 TRANSITIONS = { |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 "active": {"next_state": "inactive", "delay": 120}, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
62 "inactive": {"next_state": "gone", "delay": 480}, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
63 "gone": {"next_state": "", "delay": 0}, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
64 "composing": {"next_state": "paused", "delay": 30}, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
65 "paused": {"next_state": "inactive", "delay": 450} |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 } |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
67 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 class UnknownChatStateException(Exception): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
70 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
71 This error is raised when an unknown chat state is used. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
72 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
73 pass |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
74 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
75 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
76 class XEP_0085(object): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
78 Implementation for XEP 0085 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 params = """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
81 <params> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 <individual> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 <category name="%(category_name)s" label="%(category_label)s"> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 <param name="%(param_name)s" label="%(param_label)s" value="true" type="bool" security="0"/> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 </category> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 </individual> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
87 </params> |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
88 """ % { |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
89 'category_name': PARAM_KEY, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 'category_label': _(PARAM_KEY), |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 'param_name': PARAM_NAME, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
92 'param_label': _('Enable chat state notifications') |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
93 } |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
94 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
95 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
922
diff
changeset
|
96 log.info(_("Chat State Notifications plugin initialization")) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
97 self.host = host |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
98 self.map = {} |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
99 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
100 # parameter value is retrieved before each use |
662
4f747d7fde8c
core: importParams renamed to updateParams: it now updates the parameter instead of appending children if it find an existing one.
Goffi <goffi@goffi.org>
parents:
660
diff
changeset
|
101 host.memory.updateParams(self.params) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
102 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
103 # triggers from core |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
104 host.trigger.add("MessageReceived", self.messageReceivedTrigger) |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
105 host.trigger.add("sendMessage", self.sendMessageTrigger) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
106 host.trigger.add("paramUpdateTrigger", self.paramUpdateTrigger) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
108 # args: to_s (jid as string), profile |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 host.bridge.addMethod("chatStateComposing", ".plugin", in_sign='ss', |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
110 out_sign='', method=self.chatStateComposing) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
111 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
112 # args: from (jid as string), state in CHAT_STATES, profile |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 host.bridge.addSignal("chatStateReceived", ".plugin", signature='sss') |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 def getHandler(self, profile): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
116 return XEP_0085_handler(self, profile) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
118 def profileDisconnected(self, profile): |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
119 """Eventually send a 'gone' state to all one2one contacts.""" |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
120 if profile not in self.map: |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
121 return |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
122 for to_jid in self.map[profile]: |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
123 # FIXME: the "unavailable" presence stanza is received by to_jid |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
124 # before the chat state, so it will be ignored... find a way to |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
125 # actually defer the disconnection |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
126 self.map[profile][to_jid]._onEvent('gone') |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
127 del self.map[profile] |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
128 |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
129 def updateCache(self, entity_jid, value, profile): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
130 """Update the entity data of the given profile for one or all contacts. |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
131 Reset the chat state(s) display if the notification has been disabled. |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
132 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
133 @param entity_jid: contact's JID, or C.ENTITY_ALL to update all contacts. |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
134 @param value: True, False or DELETE_VALUE to delete the entity data |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
135 @param profile: current profile |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
136 """ |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
137 if value == DELETE_VALUE: |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
138 self.host.memory.delEntityDatum(entity_jid, ENTITY_KEY, profile) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
139 else: |
1315
be3a301540c0
core (memory): updateEntityData now accept a "silent" argument to avoid sending signal to frontends when updating an attribute with "signalOnUpdate" flag.
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
140 self.host.memory.updateEntityData(entity_jid, ENTITY_KEY, value, profile_key=profile) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
141 if not value or value == DELETE_VALUE: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
142 # reinit chat state UI for this or these contact(s) |
1380
8aa32bcc3a9c
plugin XEP-0085, quick_frontend: fixes chat states
souliane <souliane@mailoo.org>
parents:
1337
diff
changeset
|
143 self.host.bridge.chatStateReceived(unicode(entity_jid), "", profile) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
144 |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
145 def paramUpdateTrigger(self, name, value, category, type_, profile): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
146 """Reset all the existing chat state entity data associated with this profile after a parameter modification. |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
147 |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
148 @param name: parameter name |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
149 @param value: "true" to activate the notifications, or any other value to delete it |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
150 @param category: parameter category |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
151 @param type_: parameter type |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
152 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
153 if (category, name) == (PARAM_KEY, PARAM_NAME): |
1380
8aa32bcc3a9c
plugin XEP-0085, quick_frontend: fixes chat states
souliane <souliane@mailoo.org>
parents:
1337
diff
changeset
|
154 self.updateCache(C.ENTITY_ALL, True if C.bool(value) else DELETE_VALUE, profile=profile) |
868
967b94ef821e
plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
155 return False |
967b94ef821e
plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
156 return True |
967b94ef821e
plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
157 |
663 | 158 def messageReceivedTrigger(self, message, post_treat, profile): |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
160 Update the entity cache when we receive a message with body. |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
161 Check for a chat state in the message and signal frontends. |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
163 if not self.host.memory.getParamA(PARAM_NAME, PARAM_KEY, profile_key=profile): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 return True |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
165 |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
166 from_jid = JID(message.getAttribute("from")) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
167 if self._isMUC(from_jid, profile): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
168 from_jid = from_jid.userhostJID() |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
169 else: # update entity data for one2one chat |
1264
60dfa2f5d61f
plugin XEP-0085: disabled a problematic assert (see FIXME)
Goffi <goffi@goffi.org>
parents:
1253
diff
changeset
|
170 # assert from_jid.resource # FIXME: assert doesn't work on normal message from server (e.g. server announce), because there is no resource |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 try: |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
172 domish.generateElementsNamed(message.elements(), name="body").next() |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
173 try: |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
174 domish.generateElementsNamed(message.elements(), name="active").next() |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
175 # contact enabled Chat State Notifications |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
176 self.updateCache(from_jid, True, profile=profile) |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
177 except StopIteration: |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
178 if message.getAttribute('type') == 'chat': |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
179 # contact didn't enable Chat State Notifications |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
180 self.updateCache(from_jid, False, profile=profile) |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
181 return True |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
182 except StopIteration: |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
183 pass |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
184 |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
185 # send our next "composing" states to any MUC and to the contacts who enabled the feature |
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
186 self.__chatStateInit(from_jid, message.getAttribute("type"), profile) |
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
187 |
660
69a8bfd266a5
core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents:
659
diff
changeset
|
188 state_list = [child.name for child in message.elements() if |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
189 message.getAttribute("type") in MESSAGE_TYPES |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
190 and child.name in CHAT_STATES |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 and child.defaultUri == NS_CHAT_STATES] |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 for state in state_list: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 # there must be only one state according to the XEP |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
194 if state != 'gone' or message.getAttribute('type') != 'groupchat': |
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
195 self.host.bridge.chatStateReceived(message.getAttribute("from"), state, profile) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
196 break |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
197 return True |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
198 |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
199 def sendMessageTrigger(self, mess_data, pre_xml_treatments, post_xml_treatments, profile): |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
200 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
201 Eventually add the chat state to the message and initiate |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
202 the state machine when sending an "active" state. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 """ |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
204 def treatment(mess_data): |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
205 message = mess_data['xml'] |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
206 to_jid = JID(message.getAttribute("to")) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
207 if not self._checkActivation(to_jid, forceEntityData=True, profile=profile): |
724
6edd9bda4e3f
plugin XEP-0085: fixed bad return value for sendMessage trigger's post treatment
Goffi <goffi@goffi.org>
parents:
698
diff
changeset
|
208 return mess_data |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
209 try: |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
210 # message with a body always mean active state |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
211 domish.generateElementsNamed(message.elements(), name="body").next() |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
212 message.addElement('active', NS_CHAT_STATES) |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
213 # launch the chat state machine (init the timer) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
214 if self._isMUC(to_jid, profile): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
215 to_jid = to_jid.userhostJID() |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
216 self.__chatStateActive(to_jid, mess_data["type"], profile) |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
217 except StopIteration: |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
218 if "chat_state" in mess_data["extra"]: |
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
219 state = mess_data["extra"].pop("chat_state") |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
220 assert state in CHAT_STATES |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
221 message.addElement(state, NS_CHAT_STATES) |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
222 return mess_data |
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
223 |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
224 post_xml_treatments.addCallback(treatment) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
225 return True |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
226 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
227 def _isMUC(self, to_jid, profile): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
228 """Tell if that JID is a MUC or not |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
229 |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
230 @param to_jid (JID): full or bare JID to check |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
231 @param profile (str): %(doc_profile)s |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
232 @return: bool |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
233 """ |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
234 try: |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
235 type_ = self.host.memory.getEntityDatum(to_jid.userhostJID(), 'type', profile) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
236 if type_ == 'chatroom': # FIXME: should not use disco instead ? |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
237 return True |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
238 except (exceptions.UnknownEntityError, KeyError): |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
239 pass |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
240 return False |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
241 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
242 def _checkActivation(self, to_jid, forceEntityData, profile): |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
243 """ |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
244 @param to_jid: the contact's full JID (or bare if you know it's a MUC) |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
245 @param forceEntityData: if set to True, a non-existing |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
246 entity data will be considered to be True (and initialized) |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
247 @param: current profile |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
248 @return: True if the notifications should be sent to this JID. |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
249 """ |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
250 # check if the parameter is active |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
251 if not self.host.memory.getParamA(PARAM_NAME, PARAM_KEY, profile_key=profile): |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
252 return False |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
253 # check if notifications should be sent to this contact |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
254 if self._isMUC(to_jid, profile): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
255 return True |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
256 # FIXME: this assertion crash when we want to send a message to an online bare jid |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
257 # assert to_jid.resource or not self.host.memory.isEntityAvailable(to_jid, profile) # must either have a resource, or talk to an offline contact |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
258 try: |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
259 return self.host.memory.getEntityDatum(to_jid, ENTITY_KEY, profile) |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
260 except (exceptions.UnknownEntityError, KeyError): |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
261 if forceEntityData: |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
262 # enable it for the first time |
1330
22fce2e51c70
plugin XEP-0085: fixes the calls to memory.deleteEntityDatum and self.updateCache (was self.updateEntityData, has been renamed to avoid confusion with the memory method)
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
263 self.updateCache(to_jid, True, profile=profile) |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
264 return True |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
265 # wait for the first message before sending states |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
266 return False |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
267 |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
268 def __chatStateInit(self, to_jid, mess_type, profile): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 Data initialization for the chat state machine. |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
271 |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
272 @param to_jid (JID): full JID for one2one, bare JID for MUC |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
273 @param mess_type (str): "one2one" or "groupchat" |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
274 @param profile (str): %(doc_profile)s |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
275 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
276 if mess_type is None: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
277 return |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 profile_map = self.map.setdefault(profile, {}) |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
279 if to_jid not in profile_map: |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
280 machine = ChatStateMachine(self.host, to_jid, |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
281 mess_type, profile) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
282 self.map[profile][to_jid] = machine |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
284 def __chatStateActive(self, to_jid, mess_type, profile_key): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
285 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 Launch the chat state machine on "active" state. |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
287 |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
288 @param to_jid (JID): full JID for one2one, bare JID for MUC |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
289 @param mess_type (str): "one2one" or "groupchat" |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
290 @param profile (str): %(doc_profile)s |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 profile = self.host.memory.getProfileName(profile_key) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 if profile is None: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 raise exceptions.ProfileUnknownError |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
295 self.__chatStateInit(to_jid, mess_type, profile) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
296 self.map[profile][to_jid]._onEvent("active") |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
297 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 def chatStateComposing(self, to_jid_s, profile_key): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
299 """Move to the "composing" state when required. |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
300 |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
301 Since this method is called from the front-end, it needs to check the |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
302 values of the parameter "Send chat state notifications" and the entity |
654
5c5cf5bca240
plugin XEP-0085: improvement for sending "composing" state
souliane <souliane@mailoo.org>
parents:
643
diff
changeset
|
303 data associated to the target JID. |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
304 |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
305 @param to_jid_s (str): contact full JID as a string |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
306 @param profile_key (str): %(doc_profile_key)s |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 """ |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
308 # TODO: try to optimize this method which is called often |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
309 profile = self.host.memory.getProfileName(profile_key) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
310 if profile is None: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
311 raise exceptions.ProfileUnknownError |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
312 to_jid = JID(to_jid_s) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
313 if self._isMUC(to_jid, profile): |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
314 to_jid = to_jid.userhostJID() |
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
315 elif not to_jid.resource: |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
316 to_jid.resource = self.host.memory.getMainResource(to_jid, profile) |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
317 if not self._checkActivation(to_jid, forceEntityData=False, profile=profile): |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
318 return |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
319 try: |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
320 self.map[profile][to_jid]._onEvent("composing") |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
321 except (KeyError, AttributeError): |
659
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
322 # no message has been sent/received since the notifications |
b6c22d9f593a
plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
323 # have been enabled, it's better to wait for a first one |
654
5c5cf5bca240
plugin XEP-0085: improvement for sending "composing" state
souliane <souliane@mailoo.org>
parents:
643
diff
changeset
|
324 pass |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
325 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
326 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
327 class ChatStateMachine: |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
329 This class represents a chat state, between one profile and |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
330 one target contact. A timer is used to move from one state |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
331 to the other. The initialization is done through the "active" |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 state which is internally set when a message is sent. The state |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 "composing" can be set externally (through the bridge by a |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 frontend). Other states are automatically set with the timer. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
337 def __init__(self, host, to_jid, mess_type, profile): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
338 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 Initialization need to store the target, message type |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 and a profile for sending later messages. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
341 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
342 self.host = host |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 self.to_jid = to_jid |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 self.mess_type = mess_type |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 self.profile = profile |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
346 self.state = None |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
347 self.timer = None |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
348 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
349 def _onEvent(self, state): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
350 """ |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 Move to the specified state, eventually send the |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 notification to the contact (the "active" state is |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 automatically sent with each message) and set the timer. |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
354 """ |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
355 assert state in TRANSITIONS |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
356 transition = TRANSITIONS[state] |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1264
diff
changeset
|
357 assert "next_state" in transition and "delay" in transition |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
358 |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
359 if state != self.state and state != "active": |
908
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
360 if state != 'gone' or self.mess_type != 'groupchat': |
2ef523f0b5c3
plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents:
868
diff
changeset
|
361 # send a new message without body |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
362 log.debug(u"sending state '{state}' to {jid}".format(state=state, jid=self.to_jid.full())) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
363 client = self.host.getClient(self.profile) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
364 mess_data = {'message': None, |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
365 'type': self.mess_type, |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
366 'from': client.jid, |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
367 'to': self.to_jid, |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
368 'subject': None |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
369 } |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
370 self.host.generateMessageXML(mess_data) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
371 mess_data['xml'].addElement(state, NS_CHAT_STATES) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
372 client.xmlstream.send(mess_data['xml']) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
373 |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
374 self.state = state |
1252
5ff9f9af9d1f
plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
375 if self.timer is not None: |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
376 self.timer.cancel() |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
377 |
1253
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
378 if transition["next_state"] and transition["delay"] > 0: |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
379 self.timer = Timer(transition["delay"], self._onEvent, [transition["next_state"]]) |
c13a46207410
plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents:
1252
diff
changeset
|
380 self.timer.start() |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
381 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
382 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
383 class XEP_0085_handler(XMPPHandler): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
384 implements(iwokkel.IDisco) |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
385 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
386 def __init__(self, plugin_parent, profile): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
387 self.plugin_parent = plugin_parent |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
388 self.host = plugin_parent.host |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
389 self.profile = profile |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
390 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
391 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
392 return [disco.DiscoFeature(NS_CHAT_STATES)] |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
393 |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
394 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
395 return [] |