Mercurial > libervia-backend
annotate frontends/src/primitivus/chat.py @ 1005:b4af31a8a4f2
core (logs): added formatting, name filter and outputs management:
- formatting is inspired from, and use when possible, standard logging. "message", "levelname", and "name" are the only format managed, depending on backend more can be managed (standard backend formats are specified in official python logging doc)
- name filter use regular expressions. It's possible to log only plugins with SAT_LOG_LOGGER="^sat.plugins". To log only XEPs 96 & 65, we can use SAT_LOG_LOGGER='(xep_0095|xep_0065)'
- output management use a particular syntax:
- output handler are name with "//", so far there are "//default" (most of time stderr), "//memory" and "//file"
- options can be specified in parenthesis, e.g. "//memory(50)" mean a 50 lines memory buffer (50 is the current default, so that's equivalent to "//memory")
- several handlers can be specified: "//file(/tmp/sat.log)//default" will use the default logging + a the /tmp/sat.log file
- if there is only one handler, it use the file handler: "/tmp/sat.log" is the same as "//file(/tmp/sat.log)"
- not finished, need more work for twisted and basic backends
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 05 May 2014 18:58:34 +0200 |
parents | b12706d164d7 |
children | 0a9986452bba |
rev | line source |
---|---|
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
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 |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 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 _ |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 import urwid |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
22 from urwid_satext import sat_widgets |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
23 from urwid_satext.files_management import FileDialog |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
24 from sat_frontends.quick_frontend.quick_chat import QuickChat |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
25 from sat_frontends.primitivus.card_game import CardGame |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
26 from sat_frontends.quick_frontend.quick_utils import escapePrivate, unescapePrivate |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
27 from sat_frontends.primitivus.xmlui import XMLUI |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
28 from sat_frontends.primitivus.constants import Const |
124 | 29 import time |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
30 from sat.tools.jid import JID |
124 | 31 |
32 | |
33 class ChatText(urwid.FlowWidget): | |
34 """Manage the printing of chat message""" | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
35 |
531
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
36 def __init__(self, parent, timestamp, nick, my_mess, message, align='left', is_info=False): |
124 | 37 self.parent = parent |
38 self.timestamp = time.localtime(timestamp) | |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
39 self.nick = nick |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
40 self.my_mess = my_mess |
124 | 41 self.message = unicode(message) |
42 self.align = align | |
531
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
43 self.is_info = is_info |
124 | 44 |
45 def selectable(self): | |
46 return True | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
124 | 48 def keypress(self, size, key): |
49 return key | |
50 | |
51 def rows(self,size,focus=False): | |
52 return self.display_widget(size, focus).rows(size, focus) | |
53 | |
54 def render(self, size, focus=False): | |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
55 canvas = urwid.CompositeCanvas(self.display_widget(size, focus).render(size, focus)) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
56 if focus: |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
57 canvas.set_cursor(self.get_cursor_coords(size)) |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
58 return canvas |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
59 |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
60 def get_cursor_coords(self, size): |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
61 #(maxcol,) = size |
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
62 return 0, 0 |
124 | 63 |
64 def display_widget(self, size, focus): | |
65 render_txt = [] | |
531
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
66 if not self.is_info: |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
67 if self.parent.show_timestamp: |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
68 time_format = "%c" if self.timestamp < self.parent.day_change else "%H:%M" #if the message was sent before today, we print the full date |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
69 render_txt.append(('date',"[%s]" % time.strftime(time_format, self.timestamp).decode('utf-8'))) |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
70 if self.parent.show_short_nick: |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
71 render_txt.append(('my_nick' if self.my_mess else 'other_nick',"**" if self.my_mess else "*")) |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
72 else: |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
73 render_txt.append(('my_nick' if self.my_mess else 'other_nick',"[%s] " % self.nick)) |
124 | 74 render_txt.append(self.message) |
75 return urwid.Text(render_txt, align=self.align) | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 |
638
6821fc06a324
misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
637
diff
changeset
|
77 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 class Chat(urwid.WidgetWrap, QuickChat): |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
80 def __init__(self, target, host, type_='one2one'): |
124 | 81 self.target = target |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
82 QuickChat.__init__(self, target, host, type_) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 self.content = urwid.SimpleListWalker([]) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 self.text_list = urwid.ListBox(self.content) |
124 | 85 self.chat_widget = urwid.Frame(self.text_list) |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
86 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)]) |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
87 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)]) |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
88 self.pile = urwid.Pile([self.chat_colums]) |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
89 urwid.WidgetWrap.__init__(self, self.__getDecoration(self.pile)) |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
90 self.setType(type_) |
124 | 91 self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) #struct_time of day changing time |
92 self.show_timestamp = True | |
93 self.show_short_nick = False | |
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
|
94 self.show_title = 1 #0: clip title; 1: full title; 2: no title |
124 | 95 self.subject = None |
96 | |
97 def keypress(self, size, key): | |
98 if key == "meta p": #user wants to (un)hide the presents panel | |
99 if self.type == 'group': | |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
100 widgets = [widget for (widget, options) in self.chat_colums.contents] |
124 | 101 if self.present_panel in widgets: |
102 self.__removePresentPanel() | |
103 else: | |
104 self.__appendPresentPanel() | |
105 elif key == "meta t": #user wants to (un)hide timestamp | |
106 self.show_timestamp = not self.show_timestamp | |
107 for wid in self.content: | |
108 wid._invalidate() | |
109 elif key == "meta n": #user wants to (not) use short nick | |
110 self.show_short_nick = not self.show_short_nick | |
111 for wid in self.content: | |
112 wid._invalidate() | |
113 elif key == "meta l": #user wants to (un)hide widget decoration | |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
114 show = not isinstance(self._w, sat_widgets.LabelLine) |
124 | 115 self.showDecoration(show) |
116 self._invalidate() | |
181 | 117 elif key == "meta s": #user wants to (un)hide group's subject or change its apperance |
124 | 118 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
|
119 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
|
120 if self.show_title == 0: |
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
|
121 self.setSubject(self.subject,'clip') |
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
|
122 elif self.show_title == 1: |
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
|
123 self.setSubject(self.subject,'space') |
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
|
124 elif self.show_title == 2: |
124 | 125 self.chat_widget.header = None |
126 self._invalidate() | |
127 | |
128 | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
129 return super(Chat, self).keypress(size, key) |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
130 |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
131 def getMenu(self): |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
132 """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
|
133 menu = sat_widgets.Menu(self.host.loop) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
134 if self.type == 'group': |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
135 game = _("Game") |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
136 muc = _("MUC") |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
137 menu.addMenu(game, "Tarot", self.onTarotRequest) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
138 menu.addMenu(muc, _("Configure room"), self.onConfigureRoom) |
176 | 139 elif self.type == 'one2one': |
140 menu.addMenu(_("Action"), _("Send file"), self.onSendFileRequest) | |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
141 return menu |
124 | 142 |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
143 def setType(self, type_): |
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
144 QuickChat.setType(self, type_) |
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
145 if type_ == 'one2one': |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 self.historyPrint(profile=self.host.profile) |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
147 elif type_ == 'group': |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
148 if len(self.chat_colums.contents) == 1: |
124 | 149 present_widget = self.__buildPresentList() |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
150 self.present_panel = sat_widgets.VerticalSeparator(present_widget) |
124 | 151 self.__appendPresentPanel() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
152 |
124 | 153 def __getDecoration(self, widget): |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
154 return sat_widgets.LabelLine(widget, self.__getSurrendedText()) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
155 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
156 def __getSurrendedText(self): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
157 """Get the text to be displayed as the dialog title.""" |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
158 if not hasattr(self, "surrended_text"): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
159 self.__setSurrendedText() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
160 return self.surrended_text |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
161 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
162 def __setSurrendedText(self, state=None): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
163 """Set the text to be displayed as the dialog title |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
164 @param stat: chat state of the contact |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
165 """ |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
166 text = unicode(unescapePrivate(self.target)) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
167 if state: |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
168 text += " (" + state + ")" |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
169 self.surrended_text = sat_widgets.SurroundedText(text) |
124 | 170 |
171 def showDecoration(self, show=True): | |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
172 """Show/Hide the decoration around the chat window""" |
124 | 173 if show: |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
174 main_widget = self.__getDecoration(self.pile) |
124 | 175 else: |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
176 main_widget = self.pile |
124 | 177 self._w = main_widget |
178 | |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
179 def updateChatState(self, state, nick=None): |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
180 """Set the chat state (XEP-0085) of the contact. Leave nick to None |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
181 to set the state for a one2one conversation, or give a nickname or |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
182 Const.ALL_OCCUPANTS to set the state of a participant within a MUC. |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
183 @param state: the new chat state |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
184 @param nick: None for one2one, the MUC user nick or Const.ALL_OCCUPANTS |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
185 """ |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
186 if nick: |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
187 assert(self.type == 'group') |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
188 occupants = self.occupants if nick == Const.ALL_OCCUPANTS else [nick] |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
189 options = self.present_wid.getAllValues() |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
190 for index in xrange(0, len(options)): |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
191 nick = options[index].value |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
192 if nick in occupants: |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
193 options[index] = (nick, '%s %s' % (Const.MUC_USER_STATES[state], nick)) |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
194 self.present_wid.changeValues(options) |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
195 self.host.redraw() |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
196 else: |
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
197 assert(self.type == 'one2one') |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
198 self.__setSurrendedText(state) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
199 self.showDecoration() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
200 self.host.redraw() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
610
diff
changeset
|
201 |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
202 def _presentClicked(self, list_wid, clicked_wid): |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
203 assert(self.type == 'group') |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
204 nick = clicked_wid.getValue().value |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
205 if nick == self.getUserNick(): |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
206 #We ignore click on our own nick |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
207 return |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
208 #we have a click on a nick, we add the private conversation to the contact_list |
688
f7878ad3c846
tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents:
678
diff
changeset
|
209 full_jid = JID("%s/%s" % (self.target.bare, nick)) |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
210 new_jid = escapePrivate(full_jid) |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
211 if new_jid not in self.host.contact_list: |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
212 self.host.contact_list.add(new_jid) |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
213 |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
214 #now we select the new window |
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
215 self.host.contact_list.setFocus(full_jid, True) |
124 | 216 |
217 def __buildPresentList(self): | |
511
62f7f2403093
Primitivus: present contacts in groups chat can now be clicked
Goffi <goffi@goffi.org>
parents:
510
diff
changeset
|
218 self.present_wid = sat_widgets.GenericList([],option_type = sat_widgets.ClickableText, on_click=self._presentClicked) |
124 | 219 return self.present_wid |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
220 |
124 | 221 def __appendPresentPanel(self): |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
222 self.chat_colums.contents.append((self.present_panel,('weight', 2, False))) |
124 | 223 |
224 def __removePresentPanel(self): | |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
225 for widget, options in self.chat_colums.contents: |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
226 if widget is self.present_panel: |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
227 self.chat_colums.contents.remove((widget, options)) |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
228 break |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
229 |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
230 def __appendGamePanel(self, widget): |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
231 assert (len(self.pile.contents) == 1) |
610
c8c07c920e30
Primitivus: fixed xmlui/chat bad contents change
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
232 self.pile.contents.insert(0,(widget,('weight', 1))) |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
233 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
|
234 self.host.redraw() |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
235 |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
236 def __removeGamePanel(self): |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
237 assert (len(self.pile.contents) == 3) |
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
238 del self.pile.contents[0] |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
239 self.host.redraw() |
124 | 240 |
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
|
241 def setSubject(self, subject, wrap='space'): |
120 | 242 """Set title for a group chat""" |
243 QuickChat.setSubject(self, subject) | |
124 | 244 self.subject = 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.subj_wid = urwid.Text(unicode(subject.replace('\n','|') if wrap == 'clip' else subject ), |
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 align='left' if wrap=='clip' else 'center',wrap=wrap) |
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
|
247 self.chat_widget.header = urwid.AttrMap(self.subj_wid,'title') |
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 self.host.redraw() |
124 | 249 |
250 def setPresents(self, param_nicks): | |
251 """Set the users presents in the contact list for a group chat | |
252 @param nicks: list of nicknames | |
253 """ | |
254 nicks = [unicode(nick) for nick in param_nicks] #FIXME: should be done in DBus bridge | |
255 nicks.sort() | |
256 QuickChat.setPresents(self, nicks) | |
257 self.present_wid.changeValues(nicks) | |
258 self.host.redraw() | |
120 | 259 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
260 def replaceUser(self, param_nick, show_info=True): |
124 | 261 """Add user if it is not in the group list""" |
262 nick = unicode(param_nick) #FIXME: should be done in DBus bridge | |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
263 QuickChat.replaceUser(self, nick, show_info) |
124 | 264 presents = self.present_wid.getAllValues() |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
265 if nick not in [present.value for present in presents]: |
124 | 266 presents.append(nick) |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
844
diff
changeset
|
267 presents.sort(cmp=lambda a, b: cmp(a.value if hasattr(a, 'value') else a, b.value if hasattr(b, 'value') else b)) |
124 | 268 self.present_wid.changeValues(presents) |
269 self.host.redraw() | |
270 | |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
271 def removeUser(self, param_nick, show_info=True): |
124 | 272 """Remove a user from the group list""" |
273 nick = unicode(param_nick) #FIXME: should be done in DBus bridge | |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
274 QuickChat.removeUser(self, nick, show_info) |
124 | 275 self.present_wid.deleteValue(nick) |
276 self.host.redraw() | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 def printMessage(self, from_jid, msg, profile, timestamp=""): |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
279 assert isinstance(from_jid, JID) |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
280 try: |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
281 jid, nick, mymess = QuickChat.printMessage(self, from_jid, msg, profile, timestamp) |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
282 except TypeError: |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
283 return |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
284 |
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
285 new_text = ChatText(self, timestamp or None, nick, mymess, msg) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
286 |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
287 if timestamp and self.content: |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
288 for idx in range(len(self.content) - 1, -1, -1): |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
289 current_text = self.content[idx] |
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
290 if new_text.timestamp < current_text.timestamp and idx > 0: |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
291 continue # the new message is older, we need to insert it upper |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
292 |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
293 #we discard double messages, to avoid backlog / history conflict |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
294 if ((idx and self.content[idx - 1].message == msg) or |
521
3f8c2a0f20e5
primitivus: fixed double messages discarding
Goffi <goffi@goffi.org>
parents:
520
diff
changeset
|
295 (self.content[idx].message == msg) or |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
296 (idx < len(self.content) - 2 and self.content[idx + 1].message)): |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
297 return |
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
298 |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
299 self.content.insert(idx + 1, new_text) |
520
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
300 break |
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
301 else: |
4d7248f4c577
primitivus: better chat text insertion in chat window
Goffi <goffi@goffi.org>
parents:
518
diff
changeset
|
302 self.content.append(new_text) |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
303 self._notify(from_jid, msg) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
304 |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
305 def printInfo(self, msg, type_='normal', timestamp=""): |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
306 """Print general info |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
307 @param msg: message to print |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
308 @type_: one of: |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
309 normal: general info like "toto has joined the room" |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
310 me: "/me" information like "/me clenches his fist" ==> "toto clenches his fist" |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
311 """ |
531
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
312 _widget = ChatText(self, timestamp or None, None, False, msg, is_info=True) |
3bd8f84f920d
primitivus: fixed info messages timestamp
Goffi <goffi@goffi.org>
parents:
521
diff
changeset
|
313 self.content.append(_widget) |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
314 self._notify(msg=msg) |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
315 |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
316 def _notify(self, from_jid="somebody", msg=""): |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
317 """Notify the user of a new message if primitivus doesn't have the focus. |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
318 @param from_jid: contact who wrote to the users |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
319 @param msg: the message that has been received |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
320 """ |
739
7b72d5c30ebc
primivitus: do not notify when an empty message is received
souliane <souliane@mailoo.org>
parents:
688
diff
changeset
|
321 if msg == "": |
7b72d5c30ebc
primivitus: do not notify when an empty message is received
souliane <souliane@mailoo.org>
parents:
688
diff
changeset
|
322 return |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
323 if self.text_list.get_focus()[1] == len(self.content) - 2: |
430
7c7ec2347b56
primitivus: chat window is not scrolled anymore when user is watching history and a new message is received
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
324 #we don't change focus if user is not at the bottom |
7c7ec2347b56
primitivus: chat window is not scrolled anymore when user is watching history and a new message is received
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
325 #as that mean that he is probably watching discussion history |
911
b12706d164d7
primitivus: removed deprecated use of set_focus
Goffi <goffi@goffi.org>
parents:
907
diff
changeset
|
326 self.text_list.focus_position = len(self.content) - 1 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
327 self.host.redraw() |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
328 if not self.host.x_notify.hasFocus(): |
678
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
329 if self.type == "one2one": |
a630b94280d5
primitivus: code factorization for user notification
souliane <souliane@mailoo.org>
parents:
638
diff
changeset
|
330 self.host.x_notify.sendNotification(_("Primitivus: %s is talking to you") % from_jid) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
331 elif self.getUserNick().lower() in msg.lower(): |
844
f3513c8cc2e6
misc: fix unnamed arguments in format strings
souliane <souliane@mailoo.org>
parents:
812
diff
changeset
|
332 self.host.x_notify.sendNotification(_("Primitivus: %(user)s mentioned you in room '%(room)s'") % {'user': from_jid, 'room': self.target}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
333 |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
334 def startGame(self, game_type, referee, players): |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
335 """Configure the chat window to start a game""" |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
336 if game_type=="Tarot": |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
337 self.tarot_wid = CardGame(self, referee, players, self.nick) |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
338 self.__appendGamePanel(self.tarot_wid) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
339 |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
340 def getGame(self, game_type): |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
341 """Return class managing the game type""" |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
342 #TODO: check that the game is launched, and manage errors |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
343 if game_type=="Tarot": |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
344 return self.tarot_wid |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
345 |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
346 #MENU EVENTS# |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
347 def onTarotRequest(self, menu): |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
348 if len(self.occupants) != 4: |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
349 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
|
350 else: |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
351 self.host.bridge.tarotGameCreate(self.id, list(self.occupants), self.host.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
352 |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
353 def onConfigureRoom(self, menu): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
354 def gotUI(xmlui): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
355 self.host.addWindow(XMLUI(self.host, xmlui)) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
356 def configureError(failure): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
357 self.host.showPopUp(sat_widgets.Alert(_("Error"), unicode(failure), ok_cb=self.host.removePopUp)) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
358 self.host.bridge.configureRoom(self.id, self.host.profile, callback=gotUI, errback=configureError) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
359 |
176 | 360 def onSendFileRequest(self, menu): |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
361 dialog = FileDialog(ok_cb=self.onFileSelected, cancel_cb=self.host.removePopUp) |
176 | 362 self.host.showPopUp(dialog, 80, 80) |
363 | |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
364 #MISC EVENTS# |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
365 def onFileSelected(self, filepath): |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
366 self.host.removePopUp() |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
367 #FIXME: check last_resource: what if self.target.resource exists ? |
688
f7878ad3c846
tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents:
678
diff
changeset
|
368 last_resource = self.host.bridge.getLastResource(unicode(self.target.bare), self.host.profile) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
369 if last_resource: |
688
f7878ad3c846
tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents:
678
diff
changeset
|
370 full_jid = JID("%s/%s" % (self.target.bare, last_resource)) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
371 else: |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
372 full_jid = self.target |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
531
diff
changeset
|
373 progress_id = self.host.bridge.sendFile(full_jid, filepath, {}, self.host.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
374 self.host.addProgress(progress_id,filepath) |