annotate frontends/src/primitivus/chat.py @ 1970:200cd707a46d

plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass): - bridge methods/signals now all start with "muc" to follow new convention - internal method use client instead of profile to follow new convention - removed excetpions from plugin XEP-0045 in favor of core.exceptions, NotReady added - cleaned/simplified several part of the code. checkClient removed as it is not needed anymore - self.clients map removed, muc data are now stored directly in client - getRoomEntityNick and getRoomNicksOfUsers are removed as they don't look sane. /!\ This break all room game plugins for the moment - use of uuid4 instead of uuid1 for getUniqueName, as host ID and current time are used for uuid1
author Goffi <goffi@goffi.org>
date Mon, 27 Jun 2016 21:45:11 +0200
parents de6faf9be715
children 9421e721d5e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1762
diff changeset
5 # Copyright (C) 2009-2016 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
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 739
diff changeset
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
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
32 import time
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1967
diff changeset
33 import locale
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
34 from sat_frontends.tools import jid
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
35 from functools import total_ordering
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
36 import bisect
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
37
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
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 self.timestamp = time.localtime(mess_data.timestamp)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
49 super(MessageWidget, self).__init__(urwid.Text(self.markup))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
50
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
51 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
52 def markup(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
53 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
54
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
55 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
56 def info_type(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
57 return self.mess_data.info_type
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
58
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
59 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
60 def parent(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
61 return self.mess_data.parent
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
62
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
63 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
64 def message(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
65 """Return currently displayed message"""
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
66 message = self.mess_data.message
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
67 if self.parent.lang in message:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
68 self.selected_lang = self.parent.lang
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
69 return message[self.parent.lang]
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
70 try:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
71 self.selected_lang = ''
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
72 return message['']
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
73 except KeyError:
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 lang, mess = message.iteritems().next()
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
76 self.selected_lang = lang
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
77 return mess
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
78 except StopIteration:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
79 log.error(u"Can't find message for uid {}".format(self.mess_data.uid))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
80
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
81 @message.setter
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
82 def message(self, value):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
83 self.mess_data.message = {'':value}
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
84 self._w.set_text(self.markup)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
85
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
86 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
87 def type(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
88 try:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
89 return self.mess_data.type
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
90 except AttributeError:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
91 return C.MESS_TYPE_INFO
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
92
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
93 def selectable(self):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
94 return True
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
95
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
96 def keypress(self, size, key):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
97 return key
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
98
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
99 def get_cursor_coords(self, size):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
100 return 0, 0
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
101
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
102 def render(self, size, focus=False):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
103 # 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
104 # so we add it here
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
105 canvas = urwid.CompositeCanvas(self._w.render(size, focus))
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
106 if focus:
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
107 canvas.set_cursor(self.get_cursor_coords(size))
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
108 return canvas
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
109
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
110 def _generateInfoMarkup(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
111 return ('info_msg', self.message)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
112
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
113 def _generateMarkup(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
114 """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
115 markup = []
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
116 d = self.mess_data
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
117
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
118 # timestamp
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
119 if self.parent.show_timestamp:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
120 # if the message was sent before today, we print the full date
1970
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1967
diff changeset
121 time_format = u"%c" if self.timestamp < self.parent.day_change else u"%H:%M"
200cd707a46d plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents: 1967
diff changeset
122 markup.append(('date', u"[{}]".format(time.strftime(time_format, self.timestamp).decode(locale.getlocale()[1]))))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
123
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
124 # nickname
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
125 if self.parent.show_short_nick:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
126 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
127 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
128 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
129
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
130 msg = self.message # needed to generate self.selected_lang
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
131
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
132 if self.selected_lang:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
133 markup.append(("msg_lang", u"[{}] ".format(self.selected_lang)))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
134
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
135 # message body
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
136 markup.append(msg)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
137
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
138 return markup
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
139
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
140 @total_ordering
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
141 class OccupantWidget(urwid.WidgetWrap):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
142
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
143 def __init__(self, occupant_data):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
144 self.occupant_data = occupant_data
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
145 occupant_data.widgets.add(self)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
146 markup = self._generateMarkup()
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
147 super(OccupantWidget, self).__init__(urwid.Text(markup))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
148
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
149 def __eq__(self, other):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
150 return self.occupant_data.nick == other.occupant_data.nick
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 __lt__(self, other):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
153 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
154
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
155 @property
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
156 def parent(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
157 return self.mess_data.parent
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
158
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
159 def selectable(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
160 return True
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
161
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
162 def keypress(self, size, key):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
163 return key
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
164
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
165 def get_cursor_coords(self, size):
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
166 return 0, 0
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
167
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
168 def render(self, size, focus=False):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
169 # 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
170 # so we add it here
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
171 canvas = urwid.CompositeCanvas(self._w.render(size, focus))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
172 if focus:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
173 canvas.set_cursor(self.get_cursor_coords(size))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
174 return canvas
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
175
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
176 def _generateMarkup(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
177 # 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
178 # should be more intuitive and themable
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
179 o = self.occupant_data
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
180 markup = []
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
181 markup.append(('info_msg', '{}{} '.format(
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
182 o.role[0].upper(),
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
183 o.affiliation[0].upper(),
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
184 )))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
185 markup.append(o.nick)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
186 return markup
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
187
638
6821fc06a324 misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 637
diff changeset
188
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
189 class Chat(PrimitivusWidget, quick_chat.QuickChat):
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
190
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
191 def __init__(self, host, target, type_=C.CHAT_ONE2ONE, occupants=None, subject=None, profiles=None):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
192 quick_chat.QuickChat.__init__(self, host, target, type_, 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
193 self.filters = [] # list of filter callbacks to apply
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
194 self.mess_walker = urwid.SimpleListWalker([])
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
195 self.mess_widgets = urwid.ListBox(self.mess_walker)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
196 self.chat_widget = urwid.Frame(self.mess_widgets)
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
197 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)])
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
198 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
199 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
200
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
201 # 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
202 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
203 if len(self.chat_colums.contents) == 1:
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
204 self.occupants_walker = urwid.SimpleListWalker([])
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
205 # TODO: put a real ContactPanel class here, based on FocusWidget ?
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
206 self.occupants_widgets = urwid.ListBox(self.occupants_walker)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
207 # FIXME
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
208 # , option_type=sat_widgets.ClickableText, on_click=self._occupantsClicked)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
209 self.occupants_panel = sat_widgets.VerticalSeparator(self.occupants_widgets)
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
210 self._appendOccupantsPanel()
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
211 occupants_list = sorted(self.occupants.keys(), key=lambda o:o.lower())
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
212 for occupant in occupants_list:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
213 occupant_data = self.occupants[occupant]
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
214 self.occupants_walker.append(OccupantWidget(occupant_data))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
215
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
216 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
217
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
218 # 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
219 self.focus_marker = None # link to current marker
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
220 self.focus_marker_set = None # True if a new marker has been inserted
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
221 self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) # struct_time of day changing time
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
222 self.show_timestamp = True
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
223 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
224 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
225 self.postInit()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
226
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
227 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
228 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
229 if self.type == C.CHAT_GROUP:
607
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
230 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
231 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
232 self._removeOccupantsPanel()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
233 else:
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
234 self._appendOccupantsPanel()
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
235 elif key == a_key['TIMESTAMP_HIDE']: # user wants to (un)hide timestamp
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
236 self.show_timestamp = not self.show_timestamp
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
237 for wid in self.mess_walker:
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
238 wid._invalidate()
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
239 elif key == a_key['SHORT_NICKNAME']: # user wants to (not) use short nick
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
240 self.show_short_nick = not self.show_short_nick
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
241 for wid in self.mess_walker:
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
242 wid._invalidate()
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
243 elif key == a_key['SUBJECT_SWITCH']: # user wants to (un)hide group's subject or change its apperance
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
244 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
245 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
246 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
247 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
248 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
249 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
250 elif self.show_title == 2:
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
251 self.chat_widget.header = None
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
252 self._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
253
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
254 return super(Chat, self).keypress(size, key)
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
255
137
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
256 def getMenu(self):
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
257 """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
258 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
259 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
260 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
261 game = _("Game")
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
262 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
263 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
264 # 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
265 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
266 if not self.target.resource:
7751b5a51586 primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents: 1634
diff changeset
267 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
268 else:
7751b5a51586 primivitus: fixed crash when self.target is a full jid
Goffi <goffi@goffi.org>
parents: 1634
diff changeset
269 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
270 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
271 return menu
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
272
1966
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
273 def setFilter(self, args):
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
274 """set filtering of messages
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
275
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
276 @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
277 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
278 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
279 """
1967
de6faf9be715 primitivus (chat): fixed filters clearing when changing filter while one already exists
Goffi <goffi@goffi.org>
parents: 1966
diff changeset
280 del self.filters[:]
1966
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
281 if args:
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
282 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
283 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
284 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
285
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
286 del self.mess_walker[:]
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
287 for message in self.messages.itervalues():
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
288 self.appendMessage(message)
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
289
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
290 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
291 """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
292
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
293 @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
294 @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
295 @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
296 @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
297 @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
298 """
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
299 # 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
300 return
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
301 # assert self.type == C.CHAT_GROUP
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
302 # if entity.bare != self.target:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
303 # return
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
304 # 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
305
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
306 def createMessage(self, message):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
307 self.appendMessage(message)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
308
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
309 def _user_moved(self, message):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
310 """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
311
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
312 @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
313 """
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
314 if message.type != C.MESS_TYPE_INFO:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
315 return False
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
316 try:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
317 info_type = message.extra['info_type']
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
318 except KeyError:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
319 return False
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
320 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
321 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
322
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
323 def appendMessage(self, message):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
324 """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
325
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
326 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
327 @param message(quick_chat.Message): message to add
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
328 """
1966
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
329 if self.filters:
d727aab9a80e primitivus: basic handling of filter, only language can filtered for now
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
330 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
331 return
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
332 if self._user_moved(message):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
333 for wid in reversed(self.mess_walker):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
334 # 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
335 if not isinstance(wid, MessageWidget):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
336 continue
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
337 if wid.mess_data.type != C.MESS_TYPE_INFO:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
338 break
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
339 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
340 try:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
341 count = wid.reentered_count
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
342 except AttributeError:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
343 count = wid.reentered_count = 1
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
344 nick = wid.mess_data.nick
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
345 if message.info_type == quick_chat.ROOM_USER_LEFT:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
346 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
347 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
348 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
349 wid.reentered_count+=1
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
350 return
637
3b02554d4c8b primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents: 610
diff changeset
351
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
352 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
353 and self.focus_marker_set is not None):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
354 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
355 if self.focus_marker is not None:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
356 self.mess_walker.remove(self.focus_marker)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
357 self.focus_marker = urwid.Divider('—')
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
358 self.mess_walker.append(self.focus_marker)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
359 self.focus_marker_set = True
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
360 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
361 if self.focus_marker_set:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
362 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
363
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
364 if not message.message:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
365 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
366 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
367 self.mess_walker.append(MessageWidget(message))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
368 self.mess_widgets.focus_position = len(self.mess_walker) - 1 # scroll down
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
369 self.host.redraw() # FIXME: should not be necessary
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
370
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
371 def addUser(self, nick):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
372 occupant = super(Chat, self).addUser(nick)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
373 bisect.insort(self.occupants_walker, OccupantWidget(occupant))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
374
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
375 def removeUser(self, occupant_data):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
376 occupant = super(Chat, self).removeUser(occupant_data)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
377 if occupant is not None:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
378 for widget in occupant.widgets:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
379 self.occupants_walker.remove(widget)
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
380
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
381 def _occupantsClicked(self, list_wid, clicked_wid):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
382 # FIXME: not called anymore after refactoring
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
383 assert self.type == C.CHAT_GROUP
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 844
diff changeset
384 nick = clicked_wid.getValue().value
1386
1f3513cfb246 quick_frontend, primivitus: remove QuickChat.getUserNick + primivitus ChatText gets the user nick directly from parent Chat instance
souliane <souliane@mailoo.org>
parents: 1383
diff changeset
385 if nick == self.nick:
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
386 # We ignore clicks on our own nick
511
62f7f2403093 Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents: 510
diff changeset
387 return
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
388 contact_list = self.host.contact_lists[self.profile]
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
389 full_jid = jid.JID("%s/%s" % (self.target.bare, nick))
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
390
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
391 # we have a click on a nick, we need to create the widget if it doesn't exists
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
392 self.getOrCreatePrivateWidget(full_jid)
511
62f7f2403093 Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents: 510
diff changeset
393
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
394 # now we select the new window
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
395 contact_list.setFocus(full_jid, True)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
396
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
397 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
398 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
399
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
400 def _removeOccupantsPanel(self):
607
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
401 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
402 if widget is self.occupants_panel:
607
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
403 self.chat_colums.contents.remove((widget, options))
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
404 break
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
405
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
406 def addGamePanel(self, widget):
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
407 """Insert a game panel to this Chat dialog.
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
408
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
409 @param widget (Widget): the game panel
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
410 """
607
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
411 assert (len(self.pile.contents) == 1)
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
412 self.pile.contents.insert(0, (widget, ('weight', 1)))
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
413 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
414 self.host.redraw()
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
415
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
416 def removeGamePanel(self, widget):
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
417 """Remove the game panel from this Chat dialog.
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
418
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
419 @param widget (Widget): the game panel
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
420 """
607
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
421 assert (len(self.pile.contents) == 3)
c123dddaea6b primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents: 587
diff changeset
422 del self.pile.contents[0]
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
423 self.host.redraw()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
424
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
425 def setSubject(self, subject, wrap='space'):
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
426 """Set title for a group chat"""
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
427 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
428 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
429 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
430 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
431 self.host.redraw()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
432
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
433 ## 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
434
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
435 def updateHistory(self, size=C.HISTORY_LIMIT_DEFAULT, search='', profile='@NONE@'):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
436 del self.mess_walker[:]
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
437 if search:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
438 self.mess_walker.append(urwid.Text(_(u"Results for searching the globbing pattern: {}").format(search)))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
439 self.mess_walker.append(urwid.Text(_(u"Type ':history <lines>' to reset the chat history").format(search)))
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
440 super(Chat, self).updateHistory(size, search, profile)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
441
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
442 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
443 """Refresh or scroll down the focus after the history is printed"""
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
444 for message in self.messages.itervalues():
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
445 self.appendMessage(message)
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
446 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
447
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
448 def onPrivateCreated(self, widget):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
449 self.host.contact_lists[widget.profile].specialResourceVisible(widget.target)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
450
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
451 def onSelected(self):
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
452 self.focus_marker_set = False
678
a630b94280d5 primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents: 638
diff changeset
453
1786
104874018ab0 quick_frontend, primitivus (chat): move notification command to quick_frontend
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
454 def notify(self, contact="somebody", msg=""):
678
a630b94280d5 primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents: 638
diff changeset
455 """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
456
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1637
diff changeset
457 @param contact (unicode): contact who wrote to the users
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1637
diff changeset
458 @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
459 """
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
460 # 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
461 if msg == "":
7b72d5c30ebc primivitus: do not notify when an empty message is received
souliane <souliane@mailoo.org>
parents: 688
diff changeset
462 return
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
463 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
464 # 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
465 # 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
466 self.mess_widgets.focus_position = len(self.mess_walker) - 1
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
467 self.host.redraw()
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 501
diff changeset
468 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
469 if self.type == C.CHAT_ONE2ONE:
1748
3a6cd1c14974 frontends: small message refactorisation:
souliane <souliane@mailoo.org>
parents: 1637
diff changeset
470 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
471 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
472 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
473
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
474 # MENU EVENTS #
137
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
475 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
476 # 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
477 if len(self.occupants) != 4:
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
478 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
479 else:
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
480 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
481
1382
b01efa1c0f5e quick_frontend, primitivus: better PEP-8 compliance + remove/rename some (Quick)Chat attributes:
souliane <souliane@mailoo.org>
parents: 1378
diff changeset
482 # MISC EVENTS #
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
483
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
484 def onDelete(self):
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
485 # FIXME: to be checked after refactoring
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
486 quick_chat.QuickChat.onDelete(self)
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
487 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
488 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
489
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1223
diff changeset
490
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
491 quick_widgets.register(quick_chat.QuickChat, Chat)
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1290
diff changeset
492 quick_widgets.register(quick_games.Tarot, game_tarot.TarotGame)