annotate sat/plugins/plugin_xep_0085.py @ 3254:6cf4bd6972c2

core, frontends: avatar refactoring: /!\ huge commit Avatar logic has been reworked around the IDENTITY plugin: plugins able to handle avatar or other identity related metadata (like nicknames) register to IDENTITY plugin in the same way as for other features like download/upload. Once registered, IDENTITY plugin will call them when suitable in order of priority, and handle caching. Methods to manage those metadata from frontend now use serialised data. For now `avatar` and `nicknames` are handled: - `avatar` is now a dict with `path` + metadata like `media_type`, instead of just a string path - `nicknames` is now a list of nicknames in order of priority. This list is never empty, and `nicknames[0]` should be the preferred nickname to use by frontends in most cases. In addition to contact specified nicknames, user set nickname (the one set in roster) is used in priority when available. Among the side changes done with this commit, there are: - a new `contactGet` bridge method to get roster metadata for a single contact - SatPresenceProtocol.send returns a Deferred to check when it has actually been sent - memory's methods to handle entities data now use `client` as first argument - metadata filter can be specified with `getIdentity` - `getAvatar` and `setAvatar` are now part of the IDENTITY plugin instead of XEP-0054 (and there signature has changed) - `isRoom` and `getBareOrFull` are now part of XEP-0045 plugin - jp avatar/get command uses `xdg-open` first when available for `--show` flag - `--no-cache` has been added to jp avatar/get and identity/get - jp identity/set has been simplified, explicit options (`--nickname` only for now) are used instead of `--field`. `--field` may come back in the future if necessary for extra data. - QuickContactList `SetContact` now handle None as a value, and doesn't use it to delete the metadata anymore - improved cache handling for `metadata` and `nicknames` in quick frontend - new `default` argument in QuickContactList `getCache`
author Goffi <goffi@goffi.org>
date Tue, 14 Apr 2020 21:00:33 +0200
parents dcebc585c29f
children 524856bd7b19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
2
636
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)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1565
diff changeset
5 # Copyright (C) 2009-2016 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
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 724
diff changeset
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
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
24
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
25 log = getLogger(__name__)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from wokkel import disco, iwokkel
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
27 from zope.interface import implementer
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
28 from twisted.words.protocols.jabber.jid import JID
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
29
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
30 try:
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
31 from twisted.words.protocols.xmlstream import XMPPHandler
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
32 except ImportError:
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
33 from wokkel.subprotocols import XMPPHandler
660
69a8bfd266a5 core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents: 659
diff changeset
34 from twisted.words.xish import domish
1547
0632d96f08ad plugin XEP-0085: fixed bad use of threads resulting in delay and crash when stopping the backend.
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
35 from twisted.internet import reactor
1563
075a63180eab plugin XEP-0085: fixed chatstate blinking following 0632d96f08ad change
Goffi <goffi@goffi.org>
parents: 1547
diff changeset
36 from twisted.internet import error as internet_error
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
37
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
38 NS_XMPP_CLIENT = "jabber:client"
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
39 NS_CHAT_STATES = "http://jabber.org/protocol/chatstates"
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
40 CHAT_STATES = ["active", "inactive", "gone", "composing", "paused"]
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
41 MESSAGE_TYPES = ["chat", "groupchat"]
643
262d9d9ad27a plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents: 636
diff changeset
42 PARAM_KEY = "Notifications"
262d9d9ad27a plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents: 636
diff changeset
43 PARAM_NAME = "Enable chat state notifications"
262d9d9ad27a plugin XEP-0085: renamed category and parameter
souliane <souliane@mailoo.org>
parents: 636
diff changeset
44 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
45 DELETE_VALUE = "DELETE"
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
46
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
47 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
48 C.PI_NAME: "Chat State Notifications Protocol Plugin",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
49 C.PI_IMPORT_NAME: "XEP-0085",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
50 C.PI_TYPE: "XEP",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
51 C.PI_PROTOCOLS: ["XEP-0085"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
52 C.PI_DEPENDENCIES: [],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
53 C.PI_MAIN: "XEP_0085",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
54 C.PI_HANDLER: "yes",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
55 C.PI_DESCRIPTION: _("""Implementation of Chat State Notifications Protocol"""),
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
56 }
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
57
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
58
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
59 # Describe the internal transitions that are triggered
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
60 # by a timer. Beside that, external transitions can be
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
61 # runned to target the states "active" or "composing".
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
62 # Delay is specified here in seconds.
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
63 TRANSITIONS = {
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
64 "active": {"next_state": "inactive", "delay": 120},
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
65 "inactive": {"next_state": "gone", "delay": 480},
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
66 "gone": {"next_state": "", "delay": 0},
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
67 "composing": {"next_state": "paused", "delay": 30},
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
68 "paused": {"next_state": "inactive", "delay": 450},
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
69 }
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
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
72 class UnknownChatStateException(Exception):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
73 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
74 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
75 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
76
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
77 pass
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
78
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 class XEP_0085(object):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
81 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
82 Implementation for XEP 0085
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
83 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
84
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
85 params = """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
86 <params>
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
87 <individual>
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
88 <category name="%(category_name)s" label="%(category_label)s">
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
89 <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
90 </category>
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
91 </individual>
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
92 </params>
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
93 """ % {
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
94 "category_name": PARAM_KEY,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
95 "category_label": _(PARAM_KEY),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
96 "param_name": PARAM_NAME,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
97 "param_label": _("Enable chat state notifications"),
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
98 }
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 def __init__(self, host):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
101 log.info(_("Chat State Notifications plugin initialization"))
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
102 self.host = host
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
103 self.map = {} # FIXME: would be better to use client instead of mapping profile to data
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
104
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
105 # 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
106 host.memory.updateParams(self.params)
636
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 # triggers from core
3172
dcebc585c29f core: renamed "MessageReceived" trigger to "messageReceived" for consistency.
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
109 host.trigger.add("messageReceived", self.messageReceivedTrigger)
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
110 host.trigger.add("sendMessage", self.sendMessageTrigger)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
111 host.trigger.add("paramUpdateTrigger", self.paramUpdateTrigger)
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
112
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
113 # args: to_s (jid as string), profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
114 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
115 "chatStateComposing",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
116 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
117 in_sign="ss",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
118 out_sign="",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
119 method=self.chatStateComposing,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
120 )
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
121
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
122 # args: from (jid as string), state in CHAT_STATES, profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
123 host.bridge.addSignal("chatStateReceived", ".plugin", signature="sss")
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
124
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
125 def getHandler(self, client):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
126 return XEP_0085_handler(self, client.profile)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
127
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
128 def profileDisconnected(self, client):
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
129 """Eventually send a 'gone' state to all one2one contacts."""
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
130 profile = client.profile
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
131 if profile not in self.map:
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
132 return
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
133 for to_jid in self.map[profile]:
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
134 # 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
135 # 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
136 # actually defer the disconnection
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
137 self.map[profile][to_jid]._onEvent("gone")
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
138 del self.map[profile]
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
139
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
140 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
141 """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
142 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
143
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
144 @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
145 @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
146 @param profile: current profile
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
147 """
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
148 client = self.host.getClient(profile)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
149 if value == DELETE_VALUE:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
150 self.host.memory.delEntityDatum(client, entity_jid, ENTITY_KEY)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
151 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
152 self.host.memory.updateEntityData(
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
153 client, entity_jid, ENTITY_KEY, value
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
154 )
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
155 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
156 # reinit chat state UI for this or these contact(s)
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
157 self.host.bridge.chatStateReceived(entity_jid.full(), "", profile)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
158
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
159 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
160 """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
161
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
162 @param name: parameter name
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
163 @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
164 @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
165 @param type_: parameter type
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
166 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
167 if (category, name) == (PARAM_KEY, PARAM_NAME):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
168 self.updateCache(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
169 C.ENTITY_ALL, True if C.bool(value) else DELETE_VALUE, profile=profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
170 )
868
967b94ef821e plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents: 811
diff changeset
171 return False
967b94ef821e plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents: 811
diff changeset
172 return True
967b94ef821e plugin XEP-0085: fixed bad trigger return value
Goffi <goffi@goffi.org>
parents: 811
diff changeset
173
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
174 def messageReceivedTrigger(self, client, message, post_treat):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
175 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
176 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
177 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
178 """
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
179 profile = client.profile
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
180 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
181 return True
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
182
908
2ef523f0b5c3 plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents: 868
diff changeset
183 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
184 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
185 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
186 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
187 # 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
188 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
189 next(domish.generateElementsNamed(message.elements(), name="body"))
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
190 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
191 next(domish.generateElementsNamed(message.elements(), name="active"))
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
192 # 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
193 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
194 except StopIteration:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
195 if message.getAttribute("type") == "chat":
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
196 # 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
197 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
198 return True
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
199 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
200 pass
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
201
908
2ef523f0b5c3 plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents: 868
diff changeset
202 # send our next "composing" states to any MUC and to the contacts who enabled the feature
1565
d86685c0c019 plugin XEP-0085: renamed "__xxx" methods to "_xxx"
Goffi <goffi@goffi.org>
parents: 1563
diff changeset
203 self._chatStateInit(from_jid, message.getAttribute("type"), profile)
908
2ef523f0b5c3 plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents: 868
diff changeset
204
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
205 state_list = [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
206 child.name
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
207 for child in message.elements()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
208 if message.getAttribute("type") in MESSAGE_TYPES
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
209 and child.name in CHAT_STATES
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
210 and child.defaultUri == NS_CHAT_STATES
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
211 ]
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
212 for state in state_list:
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
213 # there must be only one state according to the XEP
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
214 if state != "gone" or message.getAttribute("type") != "groupchat":
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
215 self.host.bridge.chatStateReceived(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
216 message.getAttribute("from"), state, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
217 )
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
218 break
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
219 return True
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
220
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
221 def sendMessageTrigger(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
222 self, client, mess_data, pre_xml_treatments, post_xml_treatments
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
223 ):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
224 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
225 Eventually add the chat state to the message and initiate
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
226 the state machine when sending an "active" state.
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
227 """
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
228 profile = client.profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
229
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
230 def treatment(mess_data):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
231 message = mess_data["xml"]
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
232 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
233 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
234 return mess_data
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
235 try:
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
236 # message with a body always mean active state
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
237 next(domish.generateElementsNamed(message.elements(), name="body"))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
238 message.addElement("active", NS_CHAT_STATES)
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
239 # 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
240 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
241 to_jid = to_jid.userhostJID()
1565
d86685c0c019 plugin XEP-0085: renamed "__xxx" methods to "_xxx"
Goffi <goffi@goffi.org>
parents: 1563
diff changeset
242 self._chatStateActive(to_jid, mess_data["type"], profile)
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
243 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
244 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
245 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
246 assert state in CHAT_STATES
697
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
247 message.addElement(state, NS_CHAT_STATES)
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
248 return mess_data
0c84fb112d70 core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents: 663
diff changeset
249
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
250 post_xml_treatments.addCallback(treatment)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
251 return True
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
252
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
253 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
254 """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
255
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
256 @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
257 @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
258 @return: bool
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
259 """
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
260 client = self.host.getClient(profile)
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
261 try:
2994
94708a7d3ecf core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
262 type_ = self.host.memory.getEntityDatum(
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
263 client, to_jid.userhostJID(), C.ENTITY_TYPE)
2994
94708a7d3ecf core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
264 if type_ == C.ENTITY_TYPE_MUC:
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
265 return True
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
266 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
267 pass
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
268 return False
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
269
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
270 def _checkActivation(self, to_jid, forceEntityData, profile):
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
271 """
1252
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: 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
273 @param forceEntityData: if set to True, a non-existing
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
274 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
275 @param: current profile
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
276 @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
277 """
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
278 client = self.host.getClient(profile)
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
279 # check if the parameter is active
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
280 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
281 return False
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
282 # 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
283 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
284 return True
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
285 # 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
286 # 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
287 try:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
288 return self.host.memory.getEntityDatum(client, to_jid, ENTITY_KEY)
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
289 except (exceptions.UnknownEntityError, KeyError):
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
290 if forceEntityData:
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
291 # 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
292 self.updateCache(to_jid, True, profile=profile)
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
293 return True
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
294 # wait for the first message before sending states
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
295 return False
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
296
1565
d86685c0c019 plugin XEP-0085: renamed "__xxx" methods to "_xxx"
Goffi <goffi@goffi.org>
parents: 1563
diff changeset
297 def _chatStateInit(self, to_jid, mess_type, profile):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
298 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
299 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
300
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
301 @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
302 @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
303 @param profile (str): %(doc_profile)s
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
304 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
305 if mess_type is None:
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
306 return
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
307 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
308 if to_jid not in profile_map:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
309 machine = ChatStateMachine(self.host, to_jid, mess_type, profile)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
310 self.map[profile][to_jid] = machine
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
311
1565
d86685c0c019 plugin XEP-0085: renamed "__xxx" methods to "_xxx"
Goffi <goffi@goffi.org>
parents: 1563
diff changeset
312 def _chatStateActive(self, to_jid, mess_type, profile_key):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
313 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
314 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
315
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
316 @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
317 @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
318 @param profile (str): %(doc_profile)s
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
319 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
320 profile = self.host.memory.getProfileName(profile_key)
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
321 if profile is None:
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
322 raise exceptions.ProfileUnknownError
1565
d86685c0c019 plugin XEP-0085: renamed "__xxx" methods to "_xxx"
Goffi <goffi@goffi.org>
parents: 1563
diff changeset
323 self._chatStateInit(to_jid, mess_type, profile)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
324 self.map[profile][to_jid]._onEvent("active")
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 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
327 """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
328
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
329 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
330 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
331 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
332
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
333 @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
334 @param profile_key (str): %(doc_profile_key)s
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
335 """
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
336 # TODO: try to optimize this method which is called often
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
337 client = self.host.getClient(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
338 to_jid = JID(to_jid_s)
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
339 if self._isMUC(to_jid, client.profile):
1252
5ff9f9af9d1f plugin XEP-0085: use the full JID + fixes bad entity data "type" value
souliane <souliane@mailoo.org>
parents: 993
diff changeset
340 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
341 elif not to_jid.resource:
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
342 to_jid.resource = self.host.memory.getMainResource(client, to_jid)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
343 if not self._checkActivation(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
344 to_jid, forceEntityData=False, profile=client.profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
345 ):
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
346 return
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
347 try:
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
348 self.map[client.profile][to_jid]._onEvent("composing")
908
2ef523f0b5c3 plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents: 868
diff changeset
349 except (KeyError, AttributeError):
659
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
350 # no message has been sent/received since the notifications
b6c22d9f593a plugin xep-0085: bug fix + improvement
souliane <souliane@mailoo.org>
parents: 654
diff changeset
351 # 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
352 pass
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
353
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
354
1547
0632d96f08ad plugin XEP-0085: fixed bad use of threads resulting in delay and crash when stopping the backend.
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
355 class ChatStateMachine(object):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
356 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
357 This class represents a chat state, between one profile and
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
358 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
359 to the other. The initialization is done through the "active"
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
360 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
361 "composing" can be set externally (through the bridge by a
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
362 frontend). Other states are automatically set with the timer.
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
363 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
364
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
365 def __init__(self, host, to_jid, mess_type, profile):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
366 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
367 Initialization need to store the target, message type
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
368 and a profile for sending later messages.
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
369 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
370 self.host = host
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
371 self.to_jid = to_jid
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
372 self.mess_type = mess_type
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
373 self.profile = profile
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
374 self.state = None
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
375 self.timer = None
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
376
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
377 def _onEvent(self, state):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
378 """
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
379 Move to the specified state, eventually send the
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
380 notification to the contact (the "active" state is
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
381 automatically sent with each message) and set the timer.
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
382 """
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
383 assert state in TRANSITIONS
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
384 transition = TRANSITIONS[state]
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1264
diff changeset
385 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
386
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
387 if state != self.state and state != "active":
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
388 if state != "gone" or self.mess_type != "groupchat":
908
2ef523f0b5c3 plugin XEP-0085: bug fixes, especially for groupchat messages
souliane <souliane@mailoo.org>
parents: 868
diff changeset
389 # send a new message without body
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
390 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
391 "sending state '{state}' to {jid}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
392 state=state, jid=self.to_jid.full()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
393 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
394 )
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
395 client = self.host.getClient(self.profile)
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
396 mess_data = {
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
397 "from": client.jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
398 "to": self.to_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
399 "uid": "",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
400 "message": {},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
401 "type": self.mess_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
402 "subject": {},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
403 "extra": {},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
404 }
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
405 client.generateMessageXML(mess_data)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
406 mess_data["xml"].addElement(state, NS_CHAT_STATES)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
407 client.send(mess_data["xml"])
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
408
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
409 self.state = state
1563
075a63180eab plugin XEP-0085: fixed chatstate blinking following 0632d96f08ad change
Goffi <goffi@goffi.org>
parents: 1547
diff changeset
410 try:
075a63180eab plugin XEP-0085: fixed chatstate blinking following 0632d96f08ad change
Goffi <goffi@goffi.org>
parents: 1547
diff changeset
411 self.timer.cancel()
075a63180eab plugin XEP-0085: fixed chatstate blinking following 0632d96f08ad change
Goffi <goffi@goffi.org>
parents: 1547
diff changeset
412 except (internet_error.AlreadyCalled, AttributeError):
075a63180eab plugin XEP-0085: fixed chatstate blinking following 0632d96f08ad change
Goffi <goffi@goffi.org>
parents: 1547
diff changeset
413 pass
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
414
1253
c13a46207410 plugin XEP-0085: send 'gone' state before disconnection
souliane <souliane@mailoo.org>
parents: 1252
diff changeset
415 if transition["next_state"] and transition["delay"] > 0:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
416 self.timer = reactor.callLater(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
417 transition["delay"], self._onEvent, transition["next_state"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
418 )
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
419
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
420
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2994
diff changeset
421 @implementer(iwokkel.IDisco)
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
422 class XEP_0085_handler(XMPPHandler):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
423
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
424 def __init__(self, plugin_parent, profile):
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
425 self.plugin_parent = plugin_parent
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
426 self.host = plugin_parent.host
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
427 self.profile = profile
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
428
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
429 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
430 return [disco.DiscoFeature(NS_CHAT_STATES)]
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
431
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
432 def getDiscoItems(self, requestor, target, nodeIdentifier=""):
636
7ea6d5a86e58 plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
diff changeset
433 return []