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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 801
diff changeset
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
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 739
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
31
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
32
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
33 class ChatText(urwid.FlowWidget):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
37 self.parent = parent
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
41 self.message = unicode(message)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
44
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
45 def selectable(self):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
46 return True
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
47
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
48 def keypress(self, size, key):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
49 return key
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
50
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
51 def rows(self,size,focus=False):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
52 return self.display_widget(size, focus).rows(size, focus)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
53
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
63
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
64 def display_widget(self, size, focus):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
74 render_txt.append(self.message)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
91 self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) #struct_time of day changing time
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
92 self.show_timestamp = True
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
95 self.subject = None
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
96
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
97 def keypress(self, size, key):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
98 if key == "meta p": #user wants to (un)hide the presents panel
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
101 if self.present_panel in widgets:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
102 self.__removePresentPanel()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
103 else:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
104 self.__appendPresentPanel()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
105 elif key == "meta t": #user wants to (un)hide timestamp
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
106 self.show_timestamp = not self.show_timestamp
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
107 for wid in self.content:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
108 wid._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
109 elif key == "meta n": #user wants to (not) use short nick
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
110 self.show_short_nick = not self.show_short_nick
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
111 for wid in self.content:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
112 wid._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
115 self.showDecoration(show)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
116 self._invalidate()
181
a566f654929e README update:
Goffi <goffi@goffi.org>
parents: 180
diff changeset
117 elif key == "meta s": #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
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
125 self.chat_widget.header = None
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
126 self._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
127
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
139 elif self.type == 'one2one':
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
151 self.__appendPresentPanel()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
152
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
170
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
175 else:
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
176 main_widget = self.pile
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
177 self._w = main_widget
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
216
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
219 return self.present_wid
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
220
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
223
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
242 """Set title for a group chat"""
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
243 QuickChat.setSubject(self, subject)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
249
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
250 def setPresents(self, param_nicks):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
251 """Set the users presents in the contact list for a group chat
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
252 @param nicks: list of nicknames
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
253 """
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
254 nicks = [unicode(nick) for nick in param_nicks] #FIXME: should be done in DBus bridge
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
255 nicks.sort()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
256 QuickChat.setPresents(self, nicks)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
257 self.present_wid.changeValues(nicks)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
258 self.host.redraw()
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
261 """Add user if it is not in the group list"""
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
268 self.present_wid.changeValues(presents)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
269 self.host.redraw()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
272 """Remove a user from the group list"""
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
275 self.present_wid.deleteValue(nick)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
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
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
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
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
362 self.host.showPopUp(dialog, 80, 80)
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
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)