Mercurial > libervia-backend
annotate libervia/frontends/quick_frontend/quick_chat.py @ 4242:8acf46ed7f36
frontends: remote control implementation:
This is the frontends common part of remote control implementation. It handle the creation
of WebRTC session, and management of inputs. For now the reception use freedesktop.org
Desktop portal, and works mostly with Wayland based Desktop Environments.
rel 436
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 11 May 2024 13:52:43 +0200 |
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) |