annotate sat_frontends/quick_frontend/quick_chat.py @ 4007:1d5a81e3c9e8

plugin XEP-0384: skip MessageReceived trigger when in a component: OMEMO is not used in components so far, but the trigger is trying to request OMEMO PEP nodes, which causes an error with virtual pubsub service of AP component.
author Goffi <goffi@goffi.org>
date Thu, 16 Mar 2023 12:31:24 +0100
parents be6d91572633
children 78b5f356900c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1 #!/usr/bin/env python3
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
3 # helper class for making a SàT frontend
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
9 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
14 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
18
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 736
diff changeset
19 from sat.core.i18n import _
1009
d1084f7e56a5 quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents: 907
diff changeset
20 from sat.core.log import getLogger
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
21 from sat.tools.common import data_format
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
22 from sat.core import exceptions
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
23 from sat_frontends.quick_frontend import quick_widgets
1222
e6e0ea4dc835 memory: add Parameter "Chat history limit"
souliane <souliane@mailoo.org>
parents: 1139
diff changeset
24 from sat_frontends.quick_frontend.constants import Const as C
1378
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
25 from collections import OrderedDict
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
26 from sat_frontends.tools import jid
2029
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
27 import time
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
28
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
29
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
30 log = getLogger(__name__)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
31
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
32
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
33 ROOM_USER_JOINED = "ROOM_USER_JOINED"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
34 ROOM_USER_LEFT = "ROOM_USER_LEFT"
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
35 ROOM_USER_MOVED = (ROOM_USER_JOINED, ROOM_USER_LEFT)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
36
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
37 # from datetime import datetime
0
goffi@necton2
parents:
diff changeset
38
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
39 # FIXME: day_format need to be settable (i18n)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
40
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
41
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
42 class Message:
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
43 """Message metadata"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
44
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
45 def __init__(
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
46 self, parent, uid, timestamp, from_jid, to_jid, msg, subject, type_, extra,
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
47 profile):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
48 self.parent = parent
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
49 self.profile = profile
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
50 self.uid = uid
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
51 self.timestamp = timestamp
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
52 self.from_jid = from_jid
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
53 self.to_jid = to_jid
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
54 self.message = msg
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
55 self.subject = subject
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
56 self.type = type_
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
57 self.extra = extra
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
58 self.nick = self.getNick(from_jid)
2024
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
59 self._status = None
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
60 # own_mess is True if message was sent by profile's jid
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
61 self.own_mess = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
62 (from_jid.resource == self.parent.nick)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
63 if self.parent.type == C.CHAT_GROUP
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
64 else (from_jid.bare == self.host.profiles[profile].whoami.bare)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
65 )
1973
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
66 # is user mentioned here ?
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
67 if self.parent.type == C.CHAT_GROUP and not self.own_mess:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
68 for m in msg.values():
1973
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
69 if self.parent.nick.lower() in m.lower():
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
70 self._mention = True
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
71 break
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
72 self.handleMe()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
73 self.widgets = set() # widgets linked to this message
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
74
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
75 def __str__(self):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
76 return "Message<{mess_type}> [{time}]{nick}> {message}".format(
2847
c055a3a4ecb0 quick frontend(chat): display a useful message with __unicode__ and __str__
Goffi <goffi@goffi.org>
parents: 2839
diff changeset
77 mess_type=self.type,
c055a3a4ecb0 quick frontend(chat): display a useful message with __unicode__ and __str__
Goffi <goffi@goffi.org>
parents: 2839
diff changeset
78 time=self.time_text,
c055a3a4ecb0 quick frontend(chat): display a useful message with __unicode__ and __str__
Goffi <goffi@goffi.org>
parents: 2839
diff changeset
79 nick=self.nick,
c055a3a4ecb0 quick frontend(chat): display a useful message with __unicode__ and __str__
Goffi <goffi@goffi.org>
parents: 2839
diff changeset
80 message=self.main_message)
c055a3a4ecb0 quick frontend(chat): display a useful message with __unicode__ and __str__
Goffi <goffi@goffi.org>
parents: 2839
diff changeset
81
3176
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
82 def __contains__(self, item):
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
83 return hasattr(self, item) or item in self.extra
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
84
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
85 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
86 def host(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
87 return self.parent.host
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
88
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
89 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
90 def info_type(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
91 return self.extra.get("info_type")
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
92
1973
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
93 @property
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
94 def mention(self):
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
95 try:
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
96 return self._mention
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
97 except AttributeError:
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
98 return False
a9908e751c42 quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
99
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
100 @property
2580
5e54afd17321 quick frontend (chat): added a property to Message which is True when message comes from history
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
101 def history(self):
5e54afd17321 quick frontend (chat): added a property to Message which is True when message comes from history
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
102 """True if message come from history"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
103 return self.extra.get("history", False)
2580
5e54afd17321 quick frontend (chat): added a property to Message which is True when message comes from history
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
104
5e54afd17321 quick frontend (chat): added a property to Message which is True when message comes from history
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
105 @property
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
106 def main_message(self):
2078
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
107 """currently displayed message"""
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
108 if self.parent.lang in self.message:
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
109 self.selected_lang = self.parent.lang
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
110 return self.message[self.parent.lang]
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
111 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
112 self.selected_lang = ""
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
113 return self.message[""]
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
114 except KeyError:
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
115 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
116 lang, mess = next(iter(self.message.items()))
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
117 self.selected_lang = lang
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
118 return mess
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
119 except StopIteration:
3176
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
120 if not self.attachments:
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
121 # we may have empty messages if we have attachments
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
122 log.error("Can't find message for uid {}".format(self.uid))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
123 return ""
1993
981e2abbb56c quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents: 1973
diff changeset
124
2029
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
125 @property
2078
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
126 def main_message_xhtml(self):
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
127 """rich message"""
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
128 xhtml = {k: v for k, v in self.extra.items() if "html" in k}
2078
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
129 if xhtml:
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
130 # FIXME: we only return first found value for now
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
131 return next(iter(xhtml.values()))
2078
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
132
3a0a7e5cef49 quick frontend (chat): added Message.main_message_xhtml property to get XHTML content
Goffi <goffi@goffi.org>
parents: 2076
diff changeset
133 @property
2029
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
134 def time_text(self):
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
135 """Return timestamp in a nicely formatted way"""
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
136 # if the message was sent before today, we print the full date
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
137 timestamp = time.localtime(self.timestamp)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
138 time_format = "%c" if timestamp < self.parent.day_change else "%H:%M"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
139 return time.strftime(time_format, timestamp)
2029
62a99c214b57 primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents: 2026
diff changeset
140
2057
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
141 @property
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
142 def avatar(self):
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
143 """avatar data or None if no avatar is found"""
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
144 entity = self.from_jid
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
145 contact_list = self.host.contact_lists[self.profile]
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
146 try:
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
147 return contact_list.getCache(entity, "avatar")
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
148 except (exceptions.NotFound, KeyError):
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
149 # we don't check the result as the avatar listener will be called
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
150 self.host.bridge.avatarGet(entity, True, self.profile)
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
151 return None
2057
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
152
3229
2556eb576aed quick frontend (chat): added `encrypted` property
Goffi <goffi@goffi.org>
parents: 3176
diff changeset
153 @property
2556eb576aed quick frontend (chat): added `encrypted` property
Goffi <goffi@goffi.org>
parents: 3176
diff changeset
154 def encrypted(self):
2556eb576aed quick frontend (chat): added `encrypted` property
Goffi <goffi@goffi.org>
parents: 3176
diff changeset
155 return self.extra.get("encrypted", False)
2556eb576aed quick frontend (chat): added `encrypted` property
Goffi <goffi@goffi.org>
parents: 3176
diff changeset
156
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
157 def getNick(self, entity):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
158 """Return nick of an entity when possible"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
159 contact_list = self.host.contact_lists[self.profile]
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
160 if self.type == C.MESS_TYPE_INFO and self.info_type in ROOM_USER_MOVED:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
161 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
162 return self.extra["user_nick"]
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
163 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
164 log.error("extra data is missing user nick for uid {}".format(self.uid))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
165 return ""
2167
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
166 # FIXME: converted getSpecials to list for pyjamas
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
167 if self.parent.type == C.CHAT_GROUP or entity in list(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
168 contact_list.getSpecials(C.CONTACT_SPECIAL_GROUP)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
169 ):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
170 return entity.resource or ""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
171 if entity.bare in contact_list:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
172
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
173 try:
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
174 nicknames = contact_list.getCache(entity, "nicknames")
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
175 except (exceptions.NotFound, KeyError):
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
176 # we check result as listener will be called
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
177 self.host.bridge.identityGet(
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
178 entity.bare, ["nicknames"], True, self.profile)
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
179 return entity.node or entity
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
180
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
181 if nicknames:
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
182 return nicknames[0]
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
183 else:
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
184 return (
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
185 contact_list.getCache(entity, "name", default=None)
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
186 or entity.node
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
187 or entity
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
188 )
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
189
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
190 return entity.node or entity
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
191
2024
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
192 @property
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
193 def status(self):
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
194 return self._status
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
195
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
196 @status.setter
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
197 def status(self, status):
2115
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
198 if status != self._status:
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
199 self._status = status
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
200 for w in self.widgets:
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
201 w.update({"status": status})
2024
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
202
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
203 def handleMe(self):
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
204 """Check if messages starts with "/me " and change them if it is the case
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
205
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
206 if several messages (different languages) are presents, they all need to start with "/me "
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
207 """
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
208 # TODO: XHTML-IM /me are not handled
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
209 me = False
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
210 # we need to check /me for every message
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
211 for m in self.message.values():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
212 if m.startswith("/me "):
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
213 me = True
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
214 else:
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
215 me = False
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
216 break
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
217 if me:
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
218 self.type = C.MESS_TYPE_INFO
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
219 self.extra["info_type"] = "me"
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
220 nick = self.nick
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
221 for lang, mess in self.message.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
222 self.message[lang] = "* " + nick + mess[3:]
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
223
3176
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
224 @property
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
225 def attachments(self):
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
226 return self.extra.get(C.MESS_KEY_ATTACHMENTS)
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
227
2055
ed33cd382bf9 plugin XEP-0245: removed plugin XEP-0245:
Goffi <goffi@goffi.org>
parents: 2051
diff changeset
228
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
229 class MessageWidget:
2880
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
230 """Base classe for widgets"""
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
231 # This class does nothing and is only used to have a common ancestor
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
232
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
233 pass
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
234
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
235
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
236 class Occupant:
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
237 """Occupant metadata"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
238
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
239 def __init__(self, parent, data, profile):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
240 self.parent = parent
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
241 self.profile = profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
242 self.nick = data["nick"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
243 self._entity = data.get("entity")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
244 self.affiliation = data["affiliation"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
245 self.role = data["role"]
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
246 self.widgets = set() # widgets linked to this occupant
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
247 self._state = None
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
248
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
249 @property
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
250 def data(self):
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
251 """reconstruct data dict from attributes"""
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
252 data = {}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
253 data["nick"] = self.nick
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
254 if self._entity is not None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
255 data["entity"] = self._entity
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
256 data["affiliation"] = self.affiliation
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
257 data["role"] = self.role
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
258 return data
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
259
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
260 @property
2020
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
261 def jid(self):
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
262 """jid in the room"""
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
263 return jid.JID("{}/{}".format(self.parent.target.bare, self.nick))
2020
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
264
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
265 @property
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
266 def real_jid(self):
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
267 """real jid if known else None"""
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
268 return self._entity
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
269
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
270 @property
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
271 def host(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
272 return self.parent.host
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
273
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
274 @property
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
275 def state(self):
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
276 return self._state
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
277
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
278 @state.setter
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
279 def state(self, new_state):
2115
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
280 if new_state != self._state:
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
281 self._state = new_state
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
282 for w in self.widgets:
3435e8d2e8e4 quick frontends (chat): send actual value instead of None on status and state updates
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
283 w.update({"state": new_state})
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
284
2075
4f3ebf786fbc quick_frontend, primitivus (chat): renamed updated to update, using a dict as argument + fixed Primitivus group chat
Goffi <goffi@goffi.org>
parents: 2067
diff changeset
285 def update(self, update_dict=None):
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
286 for w in self.widgets:
2075
4f3ebf786fbc quick_frontend, primitivus (chat): renamed updated to update, using a dict as argument + fixed Primitivus group chat
Goffi <goffi@goffi.org>
parents: 2067
diff changeset
287 w.update(update_dict)
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
288
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
289
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
290 class QuickChat(quick_widgets.QuickWidget):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
291 visible_states = ["chat_state"] # FIXME: to be removed, used only in quick_games
1378
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
292
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
293 def __init__(self, host, target, type_=C.CHAT_ONE2ONE, nick=None, occupants=None,
3101
ab7e8ade848a plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents: 3078
diff changeset
294 subject=None, statuses=None, profiles=None):
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
295 """
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
296 @param type_: can be C.CHAT_ONE2ONE for single conversation or C.CHAT_GROUP for
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
297 chat à la IRC
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
298 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
299 self.lang = "" # default language to use for messages
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
300 quick_widgets.QuickWidget.__init__(self, host, target, profiles=profiles)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
301 assert type_ in (C.CHAT_ONE2ONE, C.CHAT_GROUP)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
302 self.current_target = target
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
303 self.type = type_
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
304 self.encrypted = False # True if this session is currently encrypted
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
305 self._locked = False
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
306 # True when resync is in progress, avoid resynchronising twice when resync is called
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
307 # and history is still being updated. For internal use only
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
308 self._resync_lock = False
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
309 self.setLocked()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
310 if type_ == C.CHAT_GROUP:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
311 if target.resource:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
312 raise exceptions.InternalError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
313 "a group chat entity can't have a resource"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
314 )
2066
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
315 if nick is None:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
316 raise exceptions.InternalError("nick must not be None for group chat")
2066
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
317
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
318 self.nick = nick
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
319 self.occupants = {}
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
320 self.setOccupants(occupants)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
321 else:
2066
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
322 if occupants is not None or nick is not None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
323 raise exceptions.InternalError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
324 "only group chat can have occupants or nick"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
325 )
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
326 self.messages = OrderedDict() # key: uid, value: Message instance
1379
da2ea16fabc6 quick_frontend: display MUC games symbols
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
327 self.games = {} # key=game name (unicode), value=instance of quick_games.RoomGame
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
328 self.subject = subject
3101
ab7e8ade848a plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents: 3078
diff changeset
329 self.statuses = set(statuses or [])
2033
e3f1bd9dd009 quick frontend (chat): added a getlocale method and changed self.day_change calculation for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2029
diff changeset
330 lt = time.localtime()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
331 self.day_change = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
332 lt.tm_year,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
333 lt.tm_mon,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
334 lt.tm_mday,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
335 0,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
336 0,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
337 0,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
338 lt.tm_wday,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
339 lt.tm_yday,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
340 lt.tm_isdst,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
341 ) # struct_time of day changing time
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
342 if self.host.AVATARS_HANDLER:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
343 self.host.addListener("avatar", self.onAvatar, profiles)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
344
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
345 def setLocked(self):
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
346 """Set locked flag
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
347
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
348 To be set when we are waiting for history/search
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
349 """
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
350 # FIXME: we don't use getter/setter here because of pyjamas
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
351 # TODO: use proper getter/setter once we get rid of pyjamas
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
352 if self._locked:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
353 log.warning("{wid} is already locked!".format(wid=self))
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
354 return
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
355 self._locked = True
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
356 # messageNew signals are cached when locked
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
357 self._cache = OrderedDict()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
358 log.debug("{wid} is now locked".format(wid=self))
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
359
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
360 def setUnlocked(self):
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
361 if not self._locked:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
362 log.debug("{wid} was already unlocked".format(wid=self))
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
363 return
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
364 self._locked = False
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
365 for uid, data in self._cache.items():
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
366 if uid not in self.messages:
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
367 self.messageNew(*data)
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
368 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
369 log.debug("discarding message already in history: {data}, ".format(data=data))
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
370 del self._cache
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
371 log.debug("{wid} is now unlocked".format(wid=self))
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
372
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
373 def postInit(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
374 """Method to be called by frontend after widget is initialised
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
375
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
376 handle the display of history and subject
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
377 """
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
378 self.historyPrint(profile=self.profile)
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
379 if self.subject is not None:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
380 self.setSubject(self.subject)
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
381 if self.host.ENCRYPTION_HANDLERS:
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
382 self.getEncryptionState()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
383
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
384 def onDelete(self):
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
385 if self.host.AVATARS_HANDLER:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
386 self.host.removeListener("avatar", self.onAvatar)
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
387
2057
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
388 @property
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
389 def contact_list(self):
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
390 return self.host.contact_lists[self.profile]
a52a6ed7d48f quick frontend (chat): added helping properties avatar and contact_list
Goffi <goffi@goffi.org>
parents: 2055
diff changeset
391
2880
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
392 @property
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
393 def message_widgets_rev(self):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
394 """Return the history of MessageWidget in reverse chronological order
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
395
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
396 Must be implemented by frontend
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
397 """
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
398 raise NotImplementedError
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
399
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
400 ## synchornisation handling ##
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
401
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
402 @quick_widgets.QuickWidget.sync.setter
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
403 def sync(self, state):
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
404 quick_widgets.QuickWidget.sync.fset(self, state)
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
405 if not state:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
406 self.setLocked()
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
407
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
408 def _resyncComplete(self):
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
409 self.sync = True
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
410 self._resync_lock = False
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
411
2988
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
412 def occupantsClear(self):
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
413 """Remove all occupants
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
414
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
415 Must be overridden by frontends to clear their own representations of occupants
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
416 """
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
417 self.occupants.clear()
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
418
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
419 def resync(self):
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
420 if self._resync_lock:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
421 return
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
422 self._resync_lock = True
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
423 log.debug("resynchronising {self}".format(self=self))
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
424 for mess in reversed(list(self.messages.values())):
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
425 if mess.type == C.MESS_TYPE_INFO:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
426 continue
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
427 last_message = mess
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
428 break
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
429 else:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
430 # we have no message yet, we can get normal history
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
431 self.historyPrint(callback=self._resyncComplete, profile=self.profile)
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
432 return
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
433 if self.type == C.CHAT_GROUP:
2988
b5f8cb26ef6f quick frontend (chat), primitivus(chat): properly clear occupants on resync:
Goffi <goffi@goffi.org>
parents: 2976
diff changeset
434 self.occupantsClear()
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
435 self.host.bridge.mucOccupantsGet(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
436 str(self.target), self.profile, callback=self.updateOccupants,
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
437 errback=log.error)
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
438 self.historyPrint(
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
439 size=C.HISTORY_LIMIT_NONE,
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
440 filters={'timestamp_start': last_message.timestamp},
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
441 callback=self._resyncComplete,
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
442 profile=self.profile)
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
443
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
444 ## Widget management ##
1764
33c815c17fe6 quick_frontend (chat): temporary fix for bug 12:
souliane <souliane@mailoo.org>
parents: 1763
diff changeset
445
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
446 def __str__(self):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
447 return "Chat Widget [target: {}, type: {}, profile: {}]".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
448 self.target, self.type, self.profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
449 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
450
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
451 @staticmethod
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
452 def getWidgetHash(target, profiles):
2048
aff318d4a786 quick frontend (chat): fixed getWidgetHash
Goffi <goffi@goffi.org>
parents: 2040
diff changeset
453 profile = list(profiles)[0]
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
454 return profile + "\n" + str(target.bare)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
455
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
456 @staticmethod
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
457 def getPrivateHash(target, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
458 """Get unique hash for private conversations
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
459
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
460 This method should be used with force_hash to get unique widget for private MUC conversations
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
461 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
462 return (str(profile), target)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
463
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
464 def addTarget(self, target):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
465 super(QuickChat, self).addTarget(target)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
466 if target.resource:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
467 self.current_target = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
468 target
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
469 ) # FIXME: tmp, must use resource priority throught contactList instead
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
470
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
471 def recreateArgs(self, args, kwargs):
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
472 """copy important attribute for a new widget"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
473 kwargs["type_"] = self.type
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
474 if self.type == C.CHAT_GROUP:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
475 kwargs["occupants"] = {o.nick: o.data for o in self.occupants.values()}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
476 kwargs["subject"] = self.subject
2066
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
477 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
478 kwargs["nick"] = self.nick
2066
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
479 except AttributeError:
09c18fcd8225 plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents: 2063
diff changeset
480 pass
2063
8fa0d95c2142 quick frontend (chat): recreateArgs implementation
Goffi <goffi@goffi.org>
parents: 2057
diff changeset
481
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
482 def onPrivateCreated(self, widget):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
483 """Method called when a new widget for private conversation (MUC) is created"""
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
484 raise NotImplementedError
0
goffi@necton2
parents:
diff changeset
485
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
486 def getOrCreatePrivateWidget(self, entity):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
487 """Create a widget for private conversation, or get it if it already exists
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
488
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
489 @param entity: full jid of the target
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
490 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
491 return self.host.widgets.getOrCreateWidget(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
492 QuickChat,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
493 entity,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
494 type_=C.CHAT_ONE2ONE,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
495 force_hash=self.getPrivateHash(self.profile, entity),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
496 on_new_widget=self.onPrivateCreated,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
497 profile=self.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
498 ) # we force hash to have a new widget, not this one again
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
499
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
500 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
501 def target(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
502 if self.type == C.CHAT_GROUP:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
503 return self.current_target.bare
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
504 return self.current_target
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
505
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
506 ## occupants ##
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
507
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
508 def setOccupants(self, occupants):
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
509 """Set the whole list of occupants"""
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
510 assert len(self.occupants) == 0
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
511 for nick, data in occupants.items():
2976
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2896
diff changeset
512 # XXX: this log is disabled because it's really too verbose
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2896
diff changeset
513 # but kept commented as it may be useful for debugging
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2896
diff changeset
514 # log.debug(u"adding occupant {nick} to {room}".format(
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2896
diff changeset
515 # nick=nick, room=self.target))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
516 self.occupants[nick] = Occupant(self, data, self.profile)
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
517
2850
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
518 def updateOccupants(self, occupants):
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
519 """Update occupants list
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
520
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
521 In opposition to setOccupants, this only add missing occupants and remove
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
522 occupants who have left
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
523 """
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
524 # FIXME: occupants with modified status are not handled
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
525 local_occupants = set(self.occupants)
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
526 updated_occupants = set(occupants)
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
527 left_occupants = local_occupants - updated_occupants
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
528 joined_occupants = updated_occupants - local_occupants
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
529 log.debug("updating occupants for {room}:\n"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
530 "left: {left_occupants}\n"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
531 "joined: {joined_occupants}"
2850
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
532 .format(room=self.target,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
533 left_occupants=", ".join(left_occupants),
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
534 joined_occupants=", ".join(joined_occupants)))
2850
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
535 for nick in left_occupants:
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
536 self.removeUser(occupants[nick])
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
537 for nick in joined_occupants:
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
538 self.addUser(occupants[nick])
272dc905ff20 quick frontend (chat): new updateOccupants methods which add/remove occupants to be in sync with new list
Goffi <goffi@goffi.org>
parents: 2849
diff changeset
539
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
540 def addUser(self, occupant_data):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
541 """Add user if it is not in the group list"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
542 occupant = Occupant(self, occupant_data, self.profile)
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
543 self.occupants[occupant.nick] = occupant
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
544 return occupant
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
545
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
546 def removeUser(self, occupant_data):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
547 """Remove a user from the group list"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
548 nick = occupant_data["nick"]
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
549 try:
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
550 occupant = self.occupants.pop(nick)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
551 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
552 log.warning("Trying to remove an unknown occupant: {}".format(nick))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
553 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
554 return occupant
1764
33c815c17fe6 quick_frontend (chat): temporary fix for bug 12:
souliane <souliane@mailoo.org>
parents: 1763
diff changeset
555
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
556 def setUserNick(self, nick):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
557 """Set the nick of the user, usefull for e.g. change the color of the user"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
558 self.nick = nick
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
559
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
560 def changeUserNick(self, old_nick, new_nick):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
561 """Change nick of a user in group list"""
2788
4a05e67a8025 quick frontend (chat): fixed use of old method printInfo
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
562 log.info("{old} is now known as {new} in room {room_jid}".format(
4a05e67a8025 quick frontend (chat): fixed use of old method printInfo
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
563 old = old_nick,
4a05e67a8025 quick frontend (chat): fixed use of old method printInfo
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
564 new = new_nick,
4a05e67a8025 quick frontend (chat): fixed use of old method printInfo
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
565 room_jid = self.target))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
566
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
567 ## Messages ##
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
568
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
569 def manageMessage(self, entity, mess_type):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
570 """Tell if this chat widget manage an entity and message type couple
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
571
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
572 @param entity (jid.JID): (full) jid of the sending entity
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
573 @param mess_type (str): message type as given by messageNew
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
574 @return (bool): True if this Chat Widget manage this couple
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
575 """
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
576 if self.type == C.CHAT_GROUP:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
577 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
578 mess_type in (C.MESS_TYPE_GROUPCHAT, C.MESS_TYPE_INFO)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
579 and self.target == entity.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
580 ):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
581 return True
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
582 else:
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
583 if mess_type != C.MESS_TYPE_GROUPCHAT and entity in self.targets:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
584 return True
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
585 return False
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
586
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
587 def updateHistory(self, size=C.HISTORY_LIMIT_DEFAULT, filters=None, profile="@NONE@"):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
588 """Called when history need to be recreated
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
589
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
590 Remove all message from history then call historyPrint
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
591 Must probably be overriden by frontend to clear widget
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
592 @param size (int): number of messages
2013
b536dd121da1 backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents: 2007
diff changeset
593 @param filters (str): patterns to filter the history results
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
594 @param profile (str): %(doc_profile)s
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
595 """
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
596 self.setLocked()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
597 self.messages.clear()
2864
33a69ee7fbb7 quick frontend(chat): fixed updateHistory bad call to historyPrint
Goffi <goffi@goffi.org>
parents: 2851
diff changeset
598 self.historyPrint(size, filters, profile=profile)
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
599
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
600 def _onHistoryPrinted(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
601 """Method called when history is printed (or failed)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
602
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
603 unlock the widget, and can be used to refresh or scroll down
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
604 the focus after the history is printed
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
605 """
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
606 self.setUnlocked()
1748
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1462
diff changeset
607
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
608 def historyPrint(self, size=C.HISTORY_LIMIT_DEFAULT, filters=None, callback=None,
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
609 profile="@NONE@"):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
610 """Print the current history
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
611
2849
c2858e63cd82 quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents: 2847
diff changeset
612 Note: self.setUnlocked will be called once history is printed
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
613 @param size (int): number of messages
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
614 @param search (str): pattern to filter the history results
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
615 @param callback(callable, None): method to call when history has been printed
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
616 @param profile (str): %(doc_profile)s
1748
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1462
diff changeset
617 """
2013
b536dd121da1 backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents: 2007
diff changeset
618 if filters is None:
b536dd121da1 backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents: 2007
diff changeset
619 filters = {}
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
620 if size == 0:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
621 log.debug("Empty history requested, skipping")
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
622 self._onHistoryPrinted()
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
623 return
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
624 log_msg = _("now we print the history")
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
625 if size != C.HISTORY_LIMIT_DEFAULT:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
626 log_msg += _(" ({} messages)".format(size))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
627 log.debug(log_msg)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
628
2020
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
629 if self.type == C.CHAT_ONE2ONE:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
630 special = self.host.contact_lists[self.profile].getCache(
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
631 self.target, C.CONTACT_SPECIAL, create_if_not_found=True, default=None
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
632 )
2020
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
633 if special == C.CONTACT_SPECIAL_GROUP:
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
634 # we have a private conversation
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
635 # so we need full jid for the history
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
636 # (else we would get history from group itself)
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
637 # and to filter out groupchat message
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
638 target = self.target
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
639 filters["not_types"] = C.MESS_TYPE_GROUPCHAT
2020
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
640 else:
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
641 target = self.target.bare
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
642 else:
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
643 # groupchat
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
644 target = self.target.bare
f67da1cab6d3 quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents: 2019
diff changeset
645 # FIXME: info not handled correctly
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
646 filters["types"] = C.MESS_TYPE_GROUPCHAT
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
647
3078
95c94d94872d quick frontend(chat): store filters used with initial historyGet
Goffi <goffi@goffi.org>
parents: 3070
diff changeset
648 self.history_filters = filters
95c94d94872d quick frontend(chat): store filters used with initial historyGet
Goffi <goffi@goffi.org>
parents: 3070
diff changeset
649
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
650 def _historyGetCb(history):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
651 # day_format = "%A, %d %b %Y" # to display the day change
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
652 # previous_day = datetime.now().strftime(day_format)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
653 # message_day = datetime.fromtimestamp(timestamp).strftime(self.day_format)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
654 # if previous_day != message_day:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
655 # self.printDayChange(message_day)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
656 # previous_day = message_day
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
657 for data in history:
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
658 uid, timestamp, from_jid, to_jid, message, subject, type_, extra_s = data
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
659 from_jid = jid.JID(from_jid)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
660 to_jid = jid.JID(to_jid)
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
661 extra = data_format.deserialise(extra_s)
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
662 # if ((self.type == C.CHAT_GROUP and type_ != C.MESS_TYPE_GROUPCHAT) or
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
663 # (self.type == C.CHAT_ONE2ONE and type_ == C.MESS_TYPE_GROUPCHAT)):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
664 # continue
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
665 extra["history"] = True
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
666 self.messages[uid] = Message(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
667 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
668 uid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
669 timestamp,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
670 from_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
671 to_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
672 message,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
673 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
674 type_,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
675 extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
676 profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
677 )
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
678 self._onHistoryPrinted()
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
679 if callback is not None:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
680 callback()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
681
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
682 def _historyGetEb(err):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
683 log.error(_("Can't get history: {}").format(err))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
684 self._onHistoryPrinted()
2851
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
685 if callback is not None:
7764383a968c quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents: 2850
diff changeset
686 callback()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
687
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
688 self.host.bridge.historyGet(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
689 str(self.host.profiles[profile].whoami.bare),
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
690 str(target),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
691 size,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
692 True,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
693 {k: str(v) for k,v in filters.items()},
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
694 profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
695 callback=_historyGetCb,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
696 errback=_historyGetEb,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
697 )
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 144
diff changeset
698
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
699 def messageEncryptionGetCb(self, session_data):
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
700 if session_data:
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
701 session_data = data_format.deserialise(session_data)
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
702 self.messageEncryptionStarted(session_data)
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
703
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
704 def messageEncryptionGetEb(self, failure_):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
705 log.error(_("Can't get encryption state: {reason}").format(reason=failure_))
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
706
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
707 def getEncryptionState(self):
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
708 """Retrieve encryption state with current target.
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
709
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
710 Once state is retrieved, default messageEncryptionStarted will be called if
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
711 suitable
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
712 """
2839
76f714b12d21 quick frontend(chat): use bare jid for getEncryptionState, and skip if for group chat
Goffi <goffi@goffi.org>
parents: 2788
diff changeset
713 if self.type == C.CHAT_GROUP:
76f714b12d21 quick frontend(chat): use bare jid for getEncryptionState, and skip if for group chat
Goffi <goffi@goffi.org>
parents: 2788
diff changeset
714 return
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
715 self.host.bridge.messageEncryptionGet(str(self.target.bare), self.profile,
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
716 callback=self.messageEncryptionGetCb,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
717 errback=self.messageEncryptionGetEb)
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
718
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
719
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
720 def messageNew(self, uid, timestamp, from_jid, to_jid, msg, subject, type_, extra,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
721 profile):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
722 if self._locked:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
723 self._cache[uid] = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
724 uid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
725 timestamp,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
726 from_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
727 to_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
728 msg,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
729 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
730 type_,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
731 extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
732 profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
733 )
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
734 return
2736
df2bc2e704bc core (xmpp): don't send message without message or subject to bridge (and log a warning in frontends if such a message is received)
Goffi <goffi@goffi.org>
parents: 2730
diff changeset
735
3176
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
736 if ((not msg and not subject and not extra[C.MESS_KEY_ATTACHMENTS]
4b5c77673015 quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
737 and type_ != C.MESS_TYPE_INFO)):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
738 log.warning("Received an empty message for uid {}".format(uid))
2736
df2bc2e704bc core (xmpp): don't send message without message or subject to bridge (and log a warning in frontends if such a message is received)
Goffi <goffi@goffi.org>
parents: 2730
diff changeset
739 return
df2bc2e704bc core (xmpp): don't send message without message or subject to bridge (and log a warning in frontends if such a message is received)
Goffi <goffi@goffi.org>
parents: 2730
diff changeset
740
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
741 if self.type == C.CHAT_GROUP:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
742 if to_jid.resource and type_ != C.MESS_TYPE_GROUPCHAT:
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
743 # we have a private message, we forward it to a private conversation
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
744 # widget
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
745 chat_widget = self.getOrCreatePrivateWidget(to_jid)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
746 chat_widget.messageNew(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
747 uid, timestamp, from_jid, to_jid, msg, subject, type_, extra, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
748 )
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
749 return
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
750 if type_ == C.MESS_TYPE_INFO:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
751 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
752 info_type = extra["info_type"]
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
753 except KeyError:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
754 pass
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
755 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
756 user_data = {
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
757 k[5:]: v for k, v in extra.items() if k.startswith("user_")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
758 }
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
759 if info_type == ROOM_USER_JOINED:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
760 self.addUser(user_data)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
761 elif info_type == ROOM_USER_LEFT:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
762 self.removeUser(user_data)
1748
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1462
diff changeset
763
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
764 message = Message(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
765 self, uid, timestamp, from_jid, to_jid, msg, subject, type_, extra, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
766 )
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
767 self.messages[uid] = message
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
768
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
769 if "received_timestamp" in extra:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
770 log.warning("Delayed message received after history, this should not happen")
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
771 self.createMessage(message)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
772
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
773 def messageEncryptionStarted(self, session_data):
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
774 self.encrypted = True
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
775 log.debug(_("message encryption started with {target} using {encryption}").format(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
776 target=self.target, encryption=session_data['name']))
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
777
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
778 def messageEncryptionStopped(self, session_data):
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
779 self.encrypted = False
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
780 log.debug(_("message encryption stopped with {target} (was using {encryption})")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
781 .format(target=self.target, encryption=session_data['name']))
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2632
diff changeset
782
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
783 def createMessage(self, message, append=False):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
784 """Must be implemented by frontend to create and show a new message widget
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
785
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
786 This is only called on messageNew, not on history.
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
787 You need to override historyPrint to handle the later
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
788 @param message(Message): message data
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 144
diff changeset
789 """
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
790 raise NotImplementedError
1786
104874018ab0 quick_frontend, primitivus (chat): move notification command to quick_frontend
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
791
2880
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
792 def isUserMoved(self, message):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
793 """Return True if message is a user left/joined message
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
794
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
795 @param message(Message): message to check
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
796 @return (bool): True is message is user moved info message
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
797 """
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
798 if message.type != C.MESS_TYPE_INFO:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
799 return False
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
800 try:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
801 info_type = message.extra["info_type"]
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
802 except KeyError:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
803 return False
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
804 else:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
805 return info_type in ROOM_USER_MOVED
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
806
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
807 def handleUserMoved(self, message):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
808 """Check if this message is a UserMoved one, and merge it when possible
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
809
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
810 "merge it" means that info message indicating a user joined/left will be
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
811 grouped if no other non-info messages has been sent since
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
812 @param message(Message): message to check
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
813 @return (bool): True if this message has been merged
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
814 if True, a new MessageWidget must not be created and appended to history
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
815 """
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
816 if self.isUserMoved(message):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
817 for wid in self.message_widgets_rev:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
818 # we merge in/out messages if no message was sent meanwhile
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
819 if not isinstance(wid, MessageWidget):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
820 continue
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
821 elif wid.mess_data.type != C.MESS_TYPE_INFO:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
822 return False
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
823 elif (
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
824 wid.info_type in ROOM_USER_MOVED
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
825 and wid.mess_data.nick == message.nick
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
826 ):
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
827 try:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
828 count = wid.reentered_count
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
829 except AttributeError:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
830 count = wid.reentered_count = 1
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
831 nick = wid.mess_data.nick
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
832 if message.info_type == ROOM_USER_LEFT:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
833 wid.message = _("<= {nick} has left the room ({count})").format(
2880
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
834 nick=nick, count=count
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
835 )
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
836 else:
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
837 wid.message = _(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
838 "<=> {nick} re-entered the room ({count})"
2880
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
839 ).format(nick=nick, count=count)
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
840 wid.reentered_count += 1
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
841 return True
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
842 return False
dd650f3e070f quick frontend(chat): prepared factorisation of merging of user moved info messages:
Goffi <goffi@goffi.org>
parents: 2864
diff changeset
843
1749
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
844 def printDayChange(self, day):
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
845 """Display the day on a new line.
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
846
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
847 @param day(unicode): day to display (or not if this method is not overwritten)
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
848 """
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
849 # FIXME: not called anymore after refactoring
1749
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
850 pass
d047535e3ed5 quick_frontend: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 1748
diff changeset
851
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
852 ## Room ##
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
853
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
854 def setSubject(self, subject):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
855 """Set title for a group chat"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
856 if self.type != C.CHAT_GROUP:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
857 raise exceptions.InternalError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
858 "trying to set subject for a non group chat window"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
859 )
2022
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
860 self.subject = subject
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
861
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
862 def changeSubject(self, new_subject):
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
863 """Change the subject of the room
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
864
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
865 This change the subject on the room itself (i.e. via XMPP),
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
866 while setSubject change the subject of this widget
88c41a195728 primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)
Goffi <goffi@goffi.org>
parents: 2020
diff changeset
867 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
868 self.host.bridge.mucSubject(str(self.target), new_subject, self.profile)
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
869
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
870 def addGamePanel(self, widget):
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
871 """Insert a game panel to this Chat dialog.
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
872
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
873 @param widget (Widget): the game panel
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
874 """
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
875 raise NotImplementedError
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
876
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
877 def removeGamePanel(self, widget):
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
878 """Remove the game panel from this Chat dialog.
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
879
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
880 @param widget (Widget): the game panel
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
881 """
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
882 raise NotImplementedError
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
883
1388
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
884 def update(self, entity=None):
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
885 """Update one or all entities.
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
886
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
887 @param entity (jid.JID): entity to update
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
888 """
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
889 # FIXME: to remove ?
1388
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
890 raise NotImplementedError
a025242bebe7 quick_frontend, primitivus: remove QuickChat.updateEntityState and QuickChat.setContactStates, use more general QuickChat.update (also called when joining the room to initialise the occupants list)
souliane <souliane@mailoo.org>
parents: 1386
diff changeset
891
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
892 ## events ##
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
893
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
894 def onChatState(self, from_jid, state, profile):
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
895 """A chat state has been received"""
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
896 if self.type == C.CHAT_GROUP:
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
897 nick = from_jid.resource
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
898 try:
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
899 self.occupants[nick].state = state
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
900 except KeyError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
901 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
902 "{nick} not found in {room}, ignoring new chat state".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
903 nick=nick, room=self.target.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
904 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
905 )
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1993
diff changeset
906
2024
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
907 def onMessageState(self, uid, status, profile):
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
908 try:
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
909 mess_data = self.messages[uid]
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
910 except KeyError:
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
911 pass
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
912 else:
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
913 mess_data.status = status
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2022
diff changeset
914
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
915 def onAvatar(self, entity, avatar_data, profile):
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
916 if self.type == C.CHAT_GROUP:
2123
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
917 if entity.bare == self.target:
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
918 try:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
919 self.occupants[entity.resource].update({"avatar": avatar_data})
2123
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
920 except KeyError:
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
921 # can happen for a message in history where the
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
922 # entity is not here anymore
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
923 pass
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
924
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
925 for m in list(self.messages.values()):
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
926 if m.nick == entity.resource:
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
927 for w in m.widgets:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
928 w.update({"avatar": avatar_data})
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
929 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
930 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
931 entity.bare == self.target.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
932 or entity.bare == self.host.profiles[profile].whoami.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2580
diff changeset
933 ):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
934 log.info("avatar updated for {}".format(entity))
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2988
diff changeset
935 for m in list(self.messages.values()):
2123
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
936 if m.from_jid.bare == entity.bare:
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2115
diff changeset
937 for w in m.widgets:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3229
diff changeset
938 w.update({"avatar": avatar_data})
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
939
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1296
diff changeset
940
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1224
diff changeset
941 quick_widgets.register(QuickChat)