Mercurial > libervia-backend
annotate libervia/frontends/quick_frontend/quick_chat.py @ 4169:e92c32014024
component AP gateway: log a warning instead of raising an exception in `onMessage`:
if something goes wrong, a warning is logged instead of raising a failing in `onMessage`'s
`get_ap_actor_id_from_account` and `sign_and_post` calls.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 01 Dec 2023 18:22:26 +0100 |
parents | 26b7ed2817da |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3137 | 1 #!/usr/bin/env python3 |
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 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
0 | 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 | 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 | 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 | 18 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
19 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
20 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
21 from libervia.backend.tools.common import data_format |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
22 from libervia.backend.core import exceptions |
4074
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
23 from libervia.frontends.quick_frontend import quick_widgets |
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
24 from libervia.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 |
4074
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
26 from libervia.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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
58 self.nick = self.get_nick(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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
72 self.handle_me() |
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 | 75 def __str__(self): |
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 | 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 | 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 | 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 | 138 time_format = "%c" if timestamp < self.parent.day_change else "%H:%M" |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
150 self.host.bridge.avatar_get(entity, True, self.profile) |
3254
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
157 def get_nick(self, entity): |
1963
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 | 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 "" |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
166 # FIXME: converted get_specials 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( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
168 contact_list.get_specials(C.CONTACT_SPECIAL_GROUP) |
2624
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
177 self.host.bridge.identity_get( |
3254
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
203 def handle_me(self): |
2055
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 | 211 for m in self.message.values(): |
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 | 221 for lang, mess in self.message.items(): |
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): |
4023
78b5f356900c
component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
226 return self.extra.get(C.KEY_ATTACHMENTS) |
3176
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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
309 self.set_locked() |
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 | 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 | 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 = {} |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
320 self.set_occupants(occupants) |
1963
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 | 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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
343 self.host.addListener("avatar", self.on_avatar, profiles) |
72 | 344 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
345 def set_locked(self): |
2849
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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
356 # message_new signals are cached when locked |
2849
c2858e63cd82
quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents:
2847
diff
changeset
|
357 self._cache = OrderedDict() |
3028 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
360 def set_unlocked(self): |
2849
c2858e63cd82
quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents:
2847
diff
changeset
|
361 if not self._locked: |
3028 | 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 | 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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
367 self.message_new(*data) |
2849
c2858e63cd82
quick frontend(chat): added setLocked/setUnlocked methods:
Goffi <goffi@goffi.org>
parents:
2847
diff
changeset
|
368 else: |
3028 | 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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
373 def post_init(self): |
1963
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 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
378 self.history_print(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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
380 self.set_subject(self.subject) |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2632
diff
changeset
|
381 if self.host.ENCRYPTION_HANDLERS: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
382 self.get_encryption_state() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
383 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
384 def on_delete(self): |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
385 if self.host.AVATARS_HANDLER: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
386 self.host.removeListener("avatar", self.on_avatar) |
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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
406 self.set_locked() |
2851
7764383a968c
quick_frontend (widget, chat): implementation of new sync mechanism, first draft:
Goffi <goffi@goffi.org>
parents:
2850
diff
changeset
|
407 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
408 def _resync_complete(self): |
2851
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
412 def occupants_clear(self): |
2988
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 | 423 log.debug("resynchronising {self}".format(self=self)) |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
431 self.history_print(callback=self._resync_complete, profile=self.profile) |
2851
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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
434 self.occupants_clear() |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
435 self.host.bridge.muc_occupants_get( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
436 str(self.target), self.profile, callback=self.update_occupants, |
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) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
438 self.history_print( |
2851
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}, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
441 callback=self._resync_complete, |
2851
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 | 446 def __str__(self): |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
452 def get_widget_hash(target, profiles): |
2048
aff318d4a786
quick frontend (chat): fixed getWidgetHash
Goffi <goffi@goffi.org>
parents:
2040
diff
changeset
|
453 profile = list(profiles)[0] |
3028 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
457 def get_private_hash(target, profile): |
1265
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 | 461 """ |
3028 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
464 def add_target(self, target): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
465 super(QuickChat, self).add_target(target) |
1265
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
471 def recreate_args(self, args, kwargs): |
2063
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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
482 def on_private_created(self, widget): |
1265
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 | 485 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
486 def get_or_create_private_widget(self, entity): |
1265
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 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
491 return self.host.widgets.get_or_create_widget( |
2624
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, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
495 force_hash=self.get_private_hash(self.profile, entity), |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
496 on_new_widget=self.on_private_created, |
2624
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
508 def set_occupants(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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
518 def update_occupants(self, 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
|
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
521 In opposition to set_occupants, this only add missing occupants and remove |
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
|
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 | 529 log.debug("updating occupants for {room}:\n" |
530 "left: {left_occupants}\n" | |
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 | 533 left_occupants=", ".join(left_occupants), |
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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
556 def set_user_nick(self, nick): |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
560 def change_user_nick(self, old_nick, new_nick): |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
569 def manage_message(self, entity, mess_type): |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
573 @param mess_type (str): message type as given by message_new |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
587 def update_history(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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
590 Remove all message from history then call history_print |
1963
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 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
596 self.set_locked() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
597 self.messages.clear() |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
598 self.history_print(size, filters, profile=profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
599 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
600 def _on_history_printed(self): |
1963
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 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
606 self.set_unlocked() |
1748
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1462
diff
changeset
|
607 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
608 def history_print(self, size=C.HISTORY_LIMIT_DEFAULT, filters=None, callback=None, |
2851
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
612 Note: self.set_unlocked 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 | 621 log.debug("Empty history requested, skipping") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
622 self._on_history_printed() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
623 return |
3028 | 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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
650 def _history_get_cb(history): |
1963
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: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
655 # self.print_day_change(message_day) |
1963
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 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
678 self._on_history_printed() |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
682 def _history_get_eb(err): |
3028 | 683 log.error(_("Can't get history: {}").format(err)) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
684 self._on_history_printed() |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
688 self.host.bridge.history_get( |
3028 | 689 str(self.host.profiles[profile].whoami.bare), |
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 | 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, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
695 callback=_history_get_cb, |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
696 errback=_history_get_eb, |
2624
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
699 def message_encryption_get_cb(self, session_data): |
2664
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) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
702 self.message_encryption_started(session_data) |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2632
diff
changeset
|
703 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
704 def message_encryption_get_eb(self, failure_): |
3028 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
707 def get_encryption_state(self): |
2664
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
710 Once state is retrieved, default message_encryption_started will be called if |
2664
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
715 self.host.bridge.message_encryption_get(str(self.target.bare), self.profile, |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
716 callback=self.message_encryption_get_cb, |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
717 errback=self.message_encryption_get_eb) |
2664
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
720 def message_new(self, uid, timestamp, from_jid, to_jid, msg, subject, type_, extra, |
2664
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 |
4023
78b5f356900c
component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
736 if ((not msg and not subject and not extra[C.KEY_ATTACHMENTS] |
3176
4b5c77673015
quick frontends (chat): handle attachments in Message
Goffi <goffi@goffi.org>
parents:
3170
diff
changeset
|
737 and type_ != C.MESS_TYPE_INFO)): |
3028 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
745 chat_widget = self.get_or_create_private_widget(to_jid) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
746 chat_widget.message_new( |
2624
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 | 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 | 770 log.warning("Delayed message received after history, this should not happen") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
771 self.create_message(message) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
772 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
773 def message_encryption_started(self, session_data): |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2632
diff
changeset
|
774 self.encrypted = True |
3028 | 775 log.debug(_("message encryption started with {target} using {encryption}").format( |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
778 def message_encryption_stopped(self, session_data): |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2632
diff
changeset
|
779 self.encrypted = False |
3028 | 780 log.debug(_("message encryption stopped with {target} (was using {encryption})") |
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
783 def create_message(self, message, append=False): |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
786 This is only called on message_new, not on history. |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
787 You need to override history_print to handle the later |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
792 def is_user_moved(self, message): |
2880
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
807 def handle_user_moved(self, message): |
2880
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 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
816 if self.is_user_moved(message): |
2880
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 | 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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
844 def print_day_change(self, day): |
1749
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
854 def set_subject(self, subject): |
1963
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
862 def change_subject(self, new_subject): |
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
|
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), |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
866 while set_subject change the subject of this widget |
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
|
867 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
868 self.host.bridge.muc_subject(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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
870 def add_game_panel(self, widget): |
1360
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
877 def remove_game_panel(self, widget): |
1360
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
894 def on_chat_state(self, from_jid, state, profile): |
2007
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 | 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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
907 def on_message_state(self, uid, status, profile): |
2024
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 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4023
diff
changeset
|
915 def on_avatar(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 | 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 | 934 log.info("avatar updated for {}".format(entity)) |
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) |