Mercurial > libervia-backend
annotate frontends/src/primitivus/chat.py @ 2528:65e278997715
component file sharing: comments metadata:
new <comments> element is added to file metadata, it contains the URL to the comments virtual node and the count of comments (this way client knows if it make sense to request comments or not).
Fixed triggers in plugin XEP-0264 (return value was missing).
New trigger in plugin XEP-0329 to allow component to add metadata (used here for comments url).
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 16 Mar 2018 18:43:11 +0100 |
parents | 0046283a285d |
children |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1788
diff
changeset
|
1 #!/usr/bin/env python2 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
4 # Primitivus: a SAT frontend |
2483 | 5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
7 # 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:
607
diff
changeset
|
8 # 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:
607
diff
changeset
|
9 # 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:
607
diff
changeset
|
10 # (at your option) any later version. |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
12 # 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:
607
diff
changeset
|
13 # 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:
607
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
15 # GNU Affero General Public License for more details. |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
17 # 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:
607
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
1180
69aace10b46d
Primitivus (file transfer): an error popup is shown when bad unicode is used in path, and an info popup is show to indicate that the file request has been sent
Goffi <goffi@goffi.org>
parents:
1173
diff
changeset
|
21 from sat.core import log as logging |
69aace10b46d
Primitivus (file transfer): an error popup is shown when bad unicode is used in path, and an info popup is show to indicate that the file request has been sent
Goffi <goffi@goffi.org>
parents:
1173
diff
changeset
|
22 log = logging.getLogger(__name__) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 import urwid |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
24 from urwid_satext import sat_widgets |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
25 from sat_frontends.quick_frontend import quick_widgets |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
26 from sat_frontends.quick_frontend import quick_chat |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
27 from sat_frontends.quick_frontend import quick_games |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
28 from sat_frontends.primitivus import game_tarot |
1058
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
911
diff
changeset
|
29 from sat_frontends.primitivus.constants import Const as C |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
30 from sat_frontends.primitivus.keys import action_key_map as a_key |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
31 from sat_frontends.primitivus.widget import PrimitivusWidget |
2020
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
32 from sat_frontends.primitivus.contact_list import ContactList |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
33 from functools import total_ordering |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
34 import bisect |
124 | 35 |
36 | |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
37 OCCUPANTS_FOOTER = _(u"{} occupants") |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
38 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
39 class MessageWidget(urwid.WidgetWrap): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
40 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
41 def __init__(self, mess_data): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
42 """ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
43 @param mess_data(quick_chat.Message, None): message data |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
44 None: used only for non text widgets (e.g.: focus separator) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
45 """ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
46 self.mess_data = mess_data |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
47 mess_data.widgets.add(self) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
48 super(MessageWidget, self).__init__(urwid.Text(self.markup)) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
49 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
50 @property |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
51 def markup(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
52 return self._generateInfoMarkup() if self.mess_data.type == C.MESS_TYPE_INFO else self._generateMarkup() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
53 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
54 @property |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
55 def info_type(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
56 return self.mess_data.info_type |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
57 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
58 @property |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
59 def parent(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
60 return self.mess_data.parent |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
61 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
62 @property |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
63 def message(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
64 """Return currently displayed message""" |
1993
981e2abbb56c
quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents:
1988
diff
changeset
|
65 return self.mess_data.main_message |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
66 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
67 @message.setter |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
68 def message(self, value): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
69 self.mess_data.message = {'':value} |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
70 self.redraw() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
71 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
72 @property |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
73 def type(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
74 try: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
75 return self.mess_data.type |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
76 except AttributeError: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
77 return C.MESS_TYPE_INFO |
124 | 78 |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
79 def redraw(self): |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
80 self._w.set_text(self.markup) |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
81 self.mess_data.parent.host.redraw() # FIXME: should not be necessary |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
82 |
124 | 83 def selectable(self): |
84 return True | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 |
124 | 86 def keypress(self, size, key): |
87 return key | |
88 | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
89 def get_cursor_coords(self, size): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
90 return 0, 0 |
124 | 91 |
92 def render(self, size, focus=False): | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
93 # Text widget doesn't render cursor, but we want one |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
94 # so we add it here |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
95 canvas = urwid.CompositeCanvas(self._w.render(size, focus)) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
96 if focus: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
97 canvas.set_cursor(self.get_cursor_coords(size)) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
98 return canvas |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
99 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
100 def _generateInfoMarkup(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
101 return ('info_msg', self.message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
102 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
103 def _generateMarkup(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
104 """Generate text markup according to message data and Widget options""" |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
105 markup = [] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
106 d = self.mess_data |
1980
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
107 mention = d.mention |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
108 |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
109 # message status |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
110 if d.status is None: |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
111 markup.append(u' ') |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
112 elif d.status == "delivered": |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
113 markup.append(('msg_status_received', u'✔')) |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
114 else: |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
115 log.warning(u"Unknown status: {}".format(d.status)) |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
116 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
117 # timestamp |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
118 if self.parent.show_timestamp: |
1980
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
119 attr = 'msg_mention' if mention else 'date' |
2029
62a99c214b57
primitivus, quick frontend (chat): moved time text generation to QuickChat
Goffi <goffi@goffi.org>
parents:
2024
diff
changeset
|
120 markup.append((attr, u"[{}]".format(d.time_text))) |
1980
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
121 else: |
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
122 if mention: |
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
123 markup.append(('msg_mention', '[*]')) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
124 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
125 # nickname |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
126 if self.parent.show_short_nick: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
127 markup.append(('my_nick' if d.own_mess else 'other_nick', "**" if d.own_mess else "*")) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
128 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
129 markup.append(('my_nick' if d.own_mess else 'other_nick', u"[{}] ".format(d.nick or ''))) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
130 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
131 msg = self.message # needed to generate self.selected_lang |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
132 |
1993
981e2abbb56c
quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents:
1988
diff
changeset
|
133 if d.selected_lang: |
981e2abbb56c
quick_frontend, primitivus: moved main_message property to quick_frontend
Goffi <goffi@goffi.org>
parents:
1988
diff
changeset
|
134 markup.append(("msg_lang", u"[{}] ".format(d.selected_lang))) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
135 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
136 # message body |
1980
2a85c818751a
primitivus (chat): mention is now visible by date in red instead of body (or a "[*]" if date is hidden)
Goffi <goffi@goffi.org>
parents:
1979
diff
changeset
|
137 markup.append(msg) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
138 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
139 return markup |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
140 |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
141 # events |
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
|
142 def update(self, update_dict=None): |
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
|
143 """update all the linked message widgets |
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
|
144 |
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
|
145 @param update_dict(dict, None): key=attribute updated value=new_value |
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
|
146 """ |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
147 self.redraw() |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2022
diff
changeset
|
148 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
149 @total_ordering |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
150 class OccupantWidget(urwid.WidgetWrap): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
151 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
152 def __init__(self, occupant_data): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
153 self.occupant_data = occupant_data |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
154 occupant_data.widgets.add(self) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
155 markup = self._generateMarkup() |
2020
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
156 text = sat_widgets.ClickableText(markup) |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
157 urwid.connect_signal(text, |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
158 'click', |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
159 self.occupant_data.parent._occupantsClicked, |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
160 user_args=[self.occupant_data]) |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
161 super(OccupantWidget, self).__init__(text) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
162 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
163 def __eq__(self, other): |
1988
3f0d22565684
primitivus (chat): fixed a crash when page-up was pressed on room contacts list
Goffi <goffi@goffi.org>
parents:
1987
diff
changeset
|
164 if other is None: |
3f0d22565684
primitivus (chat): fixed a crash when page-up was pressed on room contacts list
Goffi <goffi@goffi.org>
parents:
1987
diff
changeset
|
165 return False |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
166 return self.occupant_data.nick == other.occupant_data.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
167 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
168 def __lt__(self, other): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
169 return self.occupant_data.nick.lower() < other.occupant_data.nick.lower() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
170 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
171 @property |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
172 def markup(self): |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
173 return self._generateMarkup() |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
174 |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
175 @property |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
176 def parent(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
177 return self.mess_data.parent |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
178 |
1971
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
179 @property |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
180 def nick(self): |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
181 return self.occupant_data.nick |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
182 |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
183 def redraw(self): |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
184 self._w.set_text(self.markup) |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
185 self.occupant_data.parent.host.redraw() # FIXME: should not be necessary |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
186 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
187 def selectable(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
188 return True |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
189 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
190 def keypress(self, size, key): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
191 return key |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
192 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
193 def get_cursor_coords(self, size): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
194 return 0, 0 |
124 | 195 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
196 def render(self, size, focus=False): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
197 # Text widget doesn't render cursor, but we want one |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
198 # so we add it here |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
199 canvas = urwid.CompositeCanvas(self._w.render(size, focus)) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
200 if focus: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
201 canvas.set_cursor(self.get_cursor_coords(size)) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
202 return canvas |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
203 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
204 def _generateMarkup(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
205 # TODO: role and affiliation are shown in a Q&D way |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
206 # should be more intuitive and themable |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
207 o = self.occupant_data |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
208 markup = [] |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
209 markup.append(('info_msg', u'{}{} '.format( |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
210 o.role[0].upper(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
211 o.affiliation[0].upper(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
212 ))) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
213 markup.append(o.nick) |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
214 if o.state is not None: |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
215 markup.append(u' {}'.format(C.CHAT_STATE_ICON[o.state])) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
216 return markup |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
218 # events |
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
|
219 def update(self, update_dict=None): |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
220 self.redraw() |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
221 |
638
6821fc06a324
misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
637
diff
changeset
|
222 |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
223 class OccupantsWidget(urwid.WidgetWrap): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
224 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
225 def __init__(self, parent): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
226 self.parent = parent |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
227 self.occupants_walker = urwid.SimpleListWalker([]) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
228 self.occupants_footer = urwid.Text('', align='center') |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
229 self.updateFooter() |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
230 occupants_widget = urwid.Frame(urwid.ListBox(self.occupants_walker), footer=self.occupants_footer) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
231 super(OccupantsWidget, self).__init__(occupants_widget) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
232 occupants_list = sorted(self.parent.occupants.keys(), key=lambda o:o.lower()) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
233 for occupant in occupants_list: |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
234 occupant_data = self.parent.occupants[occupant] |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
235 self.occupants_walker.append(OccupantWidget(occupant_data)) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
236 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
237 def updateFooter(self): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
238 """update footer widget""" |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
239 txt = OCCUPANTS_FOOTER.format(len(self.parent.occupants)) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
240 self.occupants_footer.set_text(txt) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
241 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
242 def getNicks(self, start=u''): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
243 """Return nicks of all occupants |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
244 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
245 @param start(unicode): only return nicknames which start with this text |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
246 """ |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
247 return [w.nick for w in self.occupants_walker if isinstance(w, OccupantWidget) and w.nick.startswith(start)] |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
248 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
249 def addUser(self, occupant_data): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
250 """add a user to the list""" |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
251 bisect.insort(self.occupants_walker, OccupantWidget(occupant_data)) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
252 self.updateFooter() |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
253 self.parent.host.redraw() # FIXME: should not be necessary |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
254 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
255 def removeUser(self, occupant_data): |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
256 """remove a user from the list""" |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
257 for widget in occupant_data.widgets: |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
258 self.occupants_walker.remove(widget) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
259 self.updateFooter() |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
260 self.parent.host.redraw() # FIXME: should not be necessary |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
261 |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
262 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
263 class Chat(PrimitivusWidget, quick_chat.QuickChat): |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 |
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
|
265 def __init__(self, host, target, type_=C.CHAT_ONE2ONE, nick=None, occupants=None, subject=None, profiles=None): |
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
|
266 quick_chat.QuickChat.__init__(self, host, target, type_, nick, occupants, subject, profiles=profiles) |
1966
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
267 self.filters = [] # list of filter callbacks to apply |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
268 self.mess_walker = urwid.SimpleListWalker([]) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
269 self.mess_widgets = urwid.ListBox(self.mess_walker) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
270 self.chat_widget = urwid.Frame(self.mess_widgets) |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
271 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)]) |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
272 self.pile = urwid.Pile([self.chat_colums]) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
273 PrimitivusWidget.__init__(self, self.pile, self.target) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
274 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
275 # we must adapt the behaviour with the type |
1762
2e2fb462729a
quick_frontend, primitivus (chat): printing the history is left to quick_frontend
souliane <souliane@mailoo.org>
parents:
1751
diff
changeset
|
276 if type_ == C.CHAT_GROUP: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
277 if len(self.chat_colums.contents) == 1: |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
278 self.occupants_widget = OccupantsWidget(self) |
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
279 self.occupants_panel = sat_widgets.VerticalSeparator(self.occupants_widget) |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
280 self._appendOccupantsPanel() |
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
|
281 self.host.addListener('presence', self.presenceListener, [profiles]) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
282 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
283 # focus marker is a separator indicated last visible message before focus was lost |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
284 self.focus_marker = None # link to current marker |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
285 self.focus_marker_set = None # True if a new marker has been inserted |
124 | 286 self.show_timestamp = True |
287 self.show_short_nick = False | |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
288 self.show_title = 1 # 0: clip title; 1: full title; 2: no title |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
289 self.postInit() |
124 | 290 |
291 def keypress(self, size, key): | |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
292 if key == a_key['OCCUPANTS_HIDE']: # user wants to (un)hide the occupants panel |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
293 if self.type == C.CHAT_GROUP: |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
294 widgets = [widget for (widget, options) in self.chat_colums.contents] |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
295 if self.occupants_panel in widgets: |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
296 self._removeOccupantsPanel() |
124 | 297 else: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
298 self._appendOccupantsPanel() |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
299 elif key == a_key['TIMESTAMP_HIDE']: # user wants to (un)hide timestamp |
124 | 300 self.show_timestamp = not self.show_timestamp |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
301 self.redraw() |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
302 elif key == a_key['SHORT_NICKNAME']: # user wants to (not) use short nick |
124 | 303 self.show_short_nick = not self.show_short_nick |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
304 self.redraw() |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
305 elif key == a_key['SUBJECT_SWITCH']: # user wants to (un)hide group's subject or change its apperance |
124 | 306 if self.subject: |
130
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
307 self.show_title = (self.show_title + 1) % 3 |
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
308 if self.show_title == 0: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
309 self.setSubject(self.subject, 'clip') |
130
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
310 elif self.show_title == 1: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
311 self.setSubject(self.subject, 'space') |
130
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
312 elif self.show_title == 2: |
124 | 313 self.chat_widget.header = None |
314 self._invalidate() | |
2333
a21b3b31086d
primitivus (chat): added "GOTO_BOTTOM" ("G") shortcut to scroll down to last message in history
Goffi <goffi@goffi.org>
parents:
2332
diff
changeset
|
315 elif key == a_key['GOTO_BOTTOM']: # user wants to focus last message |
a21b3b31086d
primitivus (chat): added "GOTO_BOTTOM" ("G") shortcut to scroll down to last message in history
Goffi <goffi@goffi.org>
parents:
2332
diff
changeset
|
316 self.mess_widgets.focus_position = len(self.mess_walker) - 1 |
124 | 317 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
318 return super(Chat, self).keypress(size, key) |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
319 |
1971
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
320 def completion(self, text, completion_data): |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
321 """Completion method which complete nicknames in group chat |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
322 |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
323 for params, see [sat_widgets.AdvancedEdit] |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
324 """ |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
325 if self.type != C.CHAT_GROUP: |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
326 return text |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
327 |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
328 space = text.rfind(" ") |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
329 start = text[space + 1:] |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
330 words = self.occupants_widget.getNicks(start) |
1971
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
331 if not words: |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
332 return text |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
333 try: |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
334 word_idx = words.index(completion_data['last_word']) + 1 |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
335 except (KeyError, ValueError): |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
336 word_idx = 0 |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
337 else: |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
338 if word_idx == len(words): |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
339 word_idx = 0 |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
340 word = completion_data['last_word'] = words[word_idx] |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
341 return u"{}{}{}".format(text[:space + 1], word, ': ' if space < 0 else '') |
9421e721d5e2
primitivus (chat): fixed nick completion. Completion is now managed per widget, if completion method exists
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
342 |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
343 def getMenu(self): |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
344 """Return Menu bar""" |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
345 menu = sat_widgets.Menu(self.host.loop) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
346 if self.type == C.CHAT_GROUP: |
1093
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
347 self.host.addMenus(menu, C.MENU_ROOM, {'room_jid': self.target.bare}) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
348 game = _("Game") |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
349 menu.addMenu(game, "Tarot", self.onTarotRequest) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
350 elif self.type == C.CHAT_ONE2ONE: |
1634
95ea323e7d04
primitivus: removed all file menu + temporary workaround to send full jid on C.MENU_SINGLE menu action.
Goffi <goffi@goffi.org>
parents:
1580
diff
changeset
|
351 # FIXME: self.target is a bare jid, we need to check that |
95ea323e7d04
primitivus: removed all file menu + temporary workaround to send full jid on C.MENU_SINGLE menu action.
Goffi <goffi@goffi.org>
parents:
1580
diff
changeset
|
352 contact_list = self.host.contact_lists[self.profile] |
1637
7751b5a51586
primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents:
1634
diff
changeset
|
353 if not self.target.resource: |
7751b5a51586
primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents:
1634
diff
changeset
|
354 full_jid = contact_list.getFullJid(self.target) |
7751b5a51586
primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents:
1634
diff
changeset
|
355 else: |
7751b5a51586
primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents:
1634
diff
changeset
|
356 full_jid = self.target |
1634
95ea323e7d04
primitivus: removed all file menu + temporary workaround to send full jid on C.MENU_SINGLE menu action.
Goffi <goffi@goffi.org>
parents:
1580
diff
changeset
|
357 self.host.addMenus(menu, C.MENU_SINGLE, {'jid': full_jid}) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
358 return menu |
124 | 359 |
1966
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
360 def setFilter(self, args): |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
361 """set filtering of messages |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
362 |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
363 @param args(list[unicode]): filters following syntax "[filter]=[value]" |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
364 empty list to clear all filters |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
365 only lang=XX is handled for now |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
366 """ |
1967
de6faf9be715
primitivus (chat): fixed filters clearing when changing filter while one already exists
Goffi <goffi@goffi.org>
parents:
1966
diff
changeset
|
367 del self.filters[:] |
1966
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
368 if args: |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
369 if args[0].startswith("lang="): |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
370 lang = args[0][5:].strip() |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
371 self.filters.append(lambda mess_data: lang in mess_data.message) |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
372 |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
373 self.printMessages() |
1966
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
374 |
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
|
375 def presenceListener(self, entity, show, priority, statuses, profile): |
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
|
376 """Update entity's presence status |
1378
3dae6964c071
quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
377 |
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
|
378 @param entity (jid.JID): entity updated |
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
|
379 @param show: availability |
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
|
380 @param priority: resource's priority |
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
|
381 @param statuses: dict of statuses |
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
|
382 @param profile: %(doc_profile)s |
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
|
383 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
384 # FIXME: disable for refactoring, need to be checked and re-enabled |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
385 return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
386 # assert self.type == C.CHAT_GROUP |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
387 # if entity.bare != self.target: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
388 # return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
389 # self.update(entity) |
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
|
390 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
391 def createMessage(self, message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
392 self.appendMessage(message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
393 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
394 def _user_moved(self, message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
395 """return true if message is a user left/joined message |
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
|
396 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
397 @param message(quick_chat.Message): message to add |
1378
3dae6964c071
quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
398 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
399 if message.type != C.MESS_TYPE_INFO: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
400 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
401 try: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
402 info_type = message.extra['info_type'] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
403 except KeyError: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
404 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
405 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
406 return info_type in quick_chat.ROOM_USER_MOVED |
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
|
407 |
2335
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
408 def _scrollDown(self): |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
409 """scroll down message only if we are already at the bottom (minus 1)""" |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
410 current_focus = self.mess_widgets.focus_position |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
411 bottom = len(self.mess_walker) - 1 |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
412 if current_focus == bottom - 1: |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
413 self.mess_widgets.focus_position = bottom # scroll down |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
414 self.host.redraw() # FIXME: should not be necessary |
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
415 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
416 def appendMessage(self, message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
417 """Create a MessageWidget and append it |
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
|
418 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
419 Can merge messages together is desirable (e.g.: multiple joined/leave) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
420 @param message(quick_chat.Message): message to add |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
421 """ |
1966
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
422 if self.filters: |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
423 if not all([f(message) for f in self.filters]): |
d727aab9a80e
primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
424 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
425 if self._user_moved(message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
426 for wid in reversed(self.mess_walker): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
427 # we merge in/out messages if no message was sent meanwhile |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
428 if not isinstance(wid, MessageWidget): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
429 continue |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
430 if wid.mess_data.type != C.MESS_TYPE_INFO: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
431 break |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
432 if wid.info_type in quick_chat.ROOM_USER_MOVED and wid.mess_data.nick == message.nick: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
433 try: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
434 count = wid.reentered_count |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
435 except AttributeError: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
436 count = wid.reentered_count = 1 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
437 nick = wid.mess_data.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
438 if message.info_type == quick_chat.ROOM_USER_LEFT: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
439 wid.message = _(u"<= {nick} has left the room ({count})").format(nick=nick, count=count) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
440 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
441 wid.message = _(u"<=> {nick} re-entered the room ({count})") .format(nick=nick, count=count) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
442 wid.reentered_count+=1 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
443 return |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
444 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
445 if ((self.host.selected_widget != self or not self.host.x_notify.hasFocus()) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
446 and self.focus_marker_set is not None): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
447 if not self.focus_marker_set and not self._locked and self.mess_walker: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
448 if self.focus_marker is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
449 self.mess_walker.remove(self.focus_marker) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
450 self.focus_marker = urwid.Divider('—') |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
451 self.mess_walker.append(self.focus_marker) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
452 self.focus_marker_set = True |
2335
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
453 self._scrollDown() |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
454 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
455 if self.focus_marker_set: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
456 self.focus_marker_set = False |
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
|
457 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
458 if not message.message: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
459 log.error(u"Received an empty message for uid {}".format(message.uid)) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
460 else: |
1973
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
461 wid = MessageWidget(message) |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
462 self.mess_walker.append(wid) |
2335
b226f545f67e
primitivus(chat): fixed scroll down (was broken when Primitivus had not the focus and was receiving messages)
Goffi <goffi@goffi.org>
parents:
2333
diff
changeset
|
463 self._scrollDown() |
2010
d2144d04065e
primitivus (chat): don't send notification for move messages
Goffi <goffi@goffi.org>
parents:
2008
diff
changeset
|
464 if self._user_moved(message): |
d2144d04065e
primitivus (chat): don't send notification for move messages
Goffi <goffi@goffi.org>
parents:
2008
diff
changeset
|
465 return # no notification for moved messages |
d2144d04065e
primitivus (chat): don't send notification for move messages
Goffi <goffi@goffi.org>
parents:
2008
diff
changeset
|
466 |
d2144d04065e
primitivus (chat): don't send notification for move messages
Goffi <goffi@goffi.org>
parents:
2008
diff
changeset
|
467 # notifications |
d2144d04065e
primitivus (chat): don't send notification for move messages
Goffi <goffi@goffi.org>
parents:
2008
diff
changeset
|
468 |
2018
7199e6bdb94e
quick_frontend, primitivus (chat): fixed widget bad locking + don't send notification when locked
Goffi <goffi@goffi.org>
parents:
2015
diff
changeset
|
469 if self._locked: |
7199e6bdb94e
quick_frontend, primitivus (chat): fixed widget bad locking + don't send notification when locked
Goffi <goffi@goffi.org>
parents:
2015
diff
changeset
|
470 # we don't want notifications when locked |
7199e6bdb94e
quick_frontend, primitivus (chat): fixed widget bad locking + don't send notification when locked
Goffi <goffi@goffi.org>
parents:
2015
diff
changeset
|
471 # because that's history messages |
7199e6bdb94e
quick_frontend, primitivus (chat): fixed widget bad locking + don't send notification when locked
Goffi <goffi@goffi.org>
parents:
2015
diff
changeset
|
472 return |
7199e6bdb94e
quick_frontend, primitivus (chat): fixed widget bad locking + don't send notification when locked
Goffi <goffi@goffi.org>
parents:
2015
diff
changeset
|
473 |
1973
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
474 if wid.mess_data.mention: |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
475 from_jid = wid.mess_data.from_jid |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
476 msg = _(u'You have been mentioned by {nick} in {room}'.format( |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
477 nick=wid.mess_data.nick, |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
478 room=self.target, |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
479 )) |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
480 self.host.notify(C.NOTIFY_MENTION, from_jid, msg, widget=self, profile=self.profile) |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
481 elif self.type == C.CHAT_ONE2ONE: |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
482 from_jid = wid.mess_data.from_jid |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
483 msg = _(u'{entity} is talking to you'.format( |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
484 entity=from_jid, |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
485 )) |
a9908e751c42
quick_frontend, primitivus (chat): mention detection in group chat + notification (mention and messages)
Goffi <goffi@goffi.org>
parents:
1971
diff
changeset
|
486 self.host.notify(C.NOTIFY_MESSAGE, from_jid, msg, widget=self, profile=self.profile) |
2008
8a749ec21c50
primitivus: fixed notifications counter for simple messages in MUC rooms
Goffi <goffi@goffi.org>
parents:
2007
diff
changeset
|
487 else: |
8a749ec21c50
primitivus: fixed notifications counter for simple messages in MUC rooms
Goffi <goffi@goffi.org>
parents:
2007
diff
changeset
|
488 self.host.notify(C.NOTIFY_MESSAGE, self.target, widget=self, profile=self.profile) |
8a749ec21c50
primitivus: fixed notifications counter for simple messages in MUC rooms
Goffi <goffi@goffi.org>
parents:
2007
diff
changeset
|
489 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
490 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
491 def addUser(self, nick): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
492 occupant = super(Chat, self).addUser(nick) |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
493 self.occupants_widget.addUser(occupant) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
494 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
495 def removeUser(self, occupant_data): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
496 occupant = super(Chat, self).removeUser(occupant_data) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
497 if occupant is not None: |
1987
ab439ffe4113
primitivus (chat): moved occupants widget to a dedicated class + display occupants count in footer
Goffi <goffi@goffi.org>
parents:
1980
diff
changeset
|
498 self.occupants_widget.removeUser(occupant) |
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
|
499 |
2020
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
500 def _occupantsClicked(self, occupant, clicked_wid): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
501 assert self.type == C.CHAT_GROUP |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
502 contact_list = self.host.contact_lists[self.profile] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
503 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
504 # we have a click on a nick, we need to create the widget if it doesn't exists |
2020
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
505 self.getOrCreatePrivateWidget(occupant.jid) |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
506 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
507 # now we select the new window |
2020
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
508 for contact_list in self.host.widgets.getWidgets(ContactList, profiles=(self.profile,)): |
f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
Goffi <goffi@goffi.org>
parents:
2018
diff
changeset
|
509 contact_list.setFocus(occupant.jid, True) |
124 | 510 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
511 def _appendOccupantsPanel(self): |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
512 self.chat_colums.contents.append((self.occupants_panel, ('weight', 2, False))) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
513 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
514 def _removeOccupantsPanel(self): |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
515 for widget, options in self.chat_colums.contents: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
516 if widget is self.occupants_panel: |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
517 self.chat_colums.contents.remove((widget, options)) |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
518 break |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
519 |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
520 def addGamePanel(self, widget): |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
521 """Insert a game panel to this Chat dialog. |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
522 |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
523 @param widget (Widget): the game panel |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
524 """ |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
525 assert (len(self.pile.contents) == 1) |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
526 self.pile.contents.insert(0, (widget, ('weight', 1))) |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
527 self.pile.contents.insert(1, (urwid.Filler(urwid.Divider('-'), ('fixed', 1)))) |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
528 self.host.redraw() |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
529 |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
530 def removeGamePanel(self, widget): |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
531 """Remove the game panel from this Chat dialog. |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
532 |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
533 @param widget (Widget): the game panel |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
534 """ |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
535 assert (len(self.pile.contents) == 3) |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
536 del self.pile.contents[0] |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
537 self.host.redraw() |
124 | 538 |
130
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
539 def setSubject(self, subject, wrap='space'): |
120 | 540 """Set title for a group chat""" |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
541 quick_chat.QuickChat.setSubject(self, subject) |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
542 self.subj_wid = urwid.Text(unicode(subject.replace('\n', '|') if wrap == 'clip' else subject), |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
543 align='left' if wrap == 'clip' else 'center', wrap=wrap) |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
544 self.chat_widget.header = urwid.AttrMap(self.subj_wid, 'title') |
130
5a88ad24ccc0
Primitivus: subject in group chat can now be shown in 3 ways: clip, full, or hidden
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
545 self.host.redraw() |
124 | 546 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
547 ## Messages |
1125
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1120
diff
changeset
|
548 |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
549 def printMessages(self, clear=True): |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
550 """generate message widgets |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
551 |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
552 @param clear(bool): clear message before printing if true |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
553 """ |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
554 if clear: |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
555 del self.mess_walker[:] |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
556 for message in self.messages.itervalues(): |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
557 self.appendMessage(message) |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
558 |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
559 def redraw(self): |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
560 """redraw all messages""" |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
561 for w in self.mess_walker: |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
562 try: |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
563 w.redraw() |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
564 except AttributeError: |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
565 pass |
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
566 |
2013
b536dd121da1
backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents:
2010
diff
changeset
|
567 def updateHistory(self, size=C.HISTORY_LIMIT_DEFAULT, filters=None, profile='@NONE@'): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
568 del self.mess_walker[:] |
2013
b536dd121da1
backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents:
2010
diff
changeset
|
569 if filters and 'search' in filters: |
b536dd121da1
backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents:
2010
diff
changeset
|
570 self.mess_walker.append(urwid.Text(_(u"Results for searching the globbing pattern: {}").format(filters['search']))) |
b536dd121da1
backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents:
2010
diff
changeset
|
571 self.mess_walker.append(urwid.Text(_(u"Type ':history <lines>' to reset the chat history"))) |
b536dd121da1
backend (memory), frontends: improved history filtering:
Goffi <goffi@goffi.org>
parents:
2010
diff
changeset
|
572 super(Chat, self).updateHistory(size, filters, profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
573 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
574 def _onHistoryPrinted(self): |
1125
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1120
diff
changeset
|
575 """Refresh or scroll down the focus after the history is printed""" |
1979
70e83ca721c8
primitivus (chat): fixed timestamp/nick (un)hiding + new redraw and printMessages methods
Goffi <goffi@goffi.org>
parents:
1973
diff
changeset
|
576 self.printMessages(clear=False) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
577 super(Chat, self)._onHistoryPrinted() |
1125
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1120
diff
changeset
|
578 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
579 def onPrivateCreated(self, widget): |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
2013
diff
changeset
|
580 self.host.contact_lists[widget.profile].setSpecial(widget.target, C.CONTACT_SPECIAL_GROUP) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
581 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
582 def onSelected(self): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
583 self.focus_marker_set = False |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
584 |
1786
104874018ab0
quick_frontend, primitivus (chat): move notification command to quick_frontend
souliane <souliane@mailoo.org>
parents:
1766
diff
changeset
|
585 def notify(self, contact="somebody", msg=""): |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
586 """Notify the user of a new message if primitivus doesn't have the focus. |
1748
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1637
diff
changeset
|
587 |
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1637
diff
changeset
|
588 @param contact (unicode): contact who wrote to the users |
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1637
diff
changeset
|
589 @param msg (unicode): the message that has been received |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
590 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
591 # FIXME: not called anymore after refactoring |
739
7b72d5c30ebc
primivitus: do not notify when an empty message is received
souliane <souliane@mailoo.org>
parents:
688
diff
changeset
|
592 if msg == "": |
7b72d5c30ebc
primivitus: do not notify when an empty message is received
souliane <souliane@mailoo.org>
parents:
688
diff
changeset
|
593 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
594 if self.mess_widgets.get_focus()[1] == len(self.mess_walker) - 2: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
595 # we don't change focus if user is not at the bottom |
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
596 # as that mean that he is probably watching discussion history |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
597 self.mess_widgets.focus_position = len(self.mess_walker) - 1 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
598 self.host.redraw() |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
599 if not self.host.x_notify.hasFocus(): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
600 if self.type == C.CHAT_ONE2ONE: |
1748
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1637
diff
changeset
|
601 self.host.x_notify.sendNotification(_("Primitivus: %s is talking to you") % contact) |
1410
e2e75c3c7c7b
quick_frontend, primitivus: fixes a couple of issues:
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
602 elif self.nick is not None and self.nick.lower() in msg.lower(): |
1748
3a6cd1c14974
frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents:
1637
diff
changeset
|
603 self.host.x_notify.sendNotification(_("Primitivus: %(user)s mentioned you in room '%(room)s'") % {'user': contact, 'room': self.target}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
604 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
605 # MENU EVENTS # |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
606 def onTarotRequest(self, menu): |
1093
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
607 # TODO: move this to plugin_misc_tarot with dynamic menu |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
608 if len(self.occupants) != 4: |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
609 self.host.showPopUp(sat_widgets.Alert(_("Can't start game"), _("You need to be exactly 4 peoples in the room to start a Tarot game"), ok_cb=self.host.removePopUp)) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
610 else: |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
611 self.host.bridge.tarotGameCreate(self.target, list(self.occupants), self.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
612 |
1382
b01efa1c0f5e
quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents:
1378
diff
changeset
|
613 # MISC EVENTS # |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
614 |
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
|
615 def onDelete(self): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
616 # FIXME: to be checked after refactoring |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2029
diff
changeset
|
617 super(Chat, self).onDelete() |
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
|
618 if self.type == C.CHAT_GROUP: |
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
|
619 self.host.removeListener('presence', self.presenceListener) |
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
|
620 |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
621 def onChatState(self, from_jid, state, profile): |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
622 super(Chat, self).onChatState(from_jid, state, profile) |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
623 if self.type == C.CHAT_ONE2ONE: |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
624 self.title_dynamic = C.CHAT_STATE_ICON[state] |
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1993
diff
changeset
|
625 self.host.redraw() # FIXME: should not be necessary |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1223
diff
changeset
|
626 |
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
|
627 def _onSubjectDialogCb(self, button, dialog): |
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
|
628 self.changeSubject(dialog.text) |
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
|
629 self.host.removePopUp(dialog) |
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
|
630 |
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
|
631 def onSubjectDialog(self, new_subject=None): |
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
|
632 dialog = sat_widgets.InputDialog( |
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
|
633 _(u'Change title'), |
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
|
634 _(u'Enter the new title'), |
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
|
635 default_txt=new_subject if new_subject is not None else self.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
|
636 dialog.setCallback('ok', self._onSubjectDialogCb, dialog) |
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
|
637 dialog.setCallback('cancel', lambda dummy: self.host.removePopUp(dialog)) |
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
|
638 self.host.showPopUp(dialog) |
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
|
639 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
640 quick_widgets.register(quick_chat.QuickChat, Chat) |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
641 quick_widgets.register(quick_games.Tarot, game_tarot.TarotGame) |