annotate frontends/src/primitivus/chat.py @ 297:c5554e2939dd

plugin XEP 0277: author for in request + author, updated management for out request - a workaround is now used to parse "nick" tag (Jappix behaviour) - author and updated can now be used in data when sendind microblog. Is no author is given, user jid is used, if no updated is given, current timestamp is used
author Goffi <goffi@goffi.org>
date Fri, 18 Feb 2011 22:32:02 +0100
parents b1794cbb88e5
children d62eb9003375
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
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
4 """
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
5 Primitivus: a SAT frontend
228
b1794cbb88e5 2011 copyright upgrade
Goffi <goffi@goffi.org>
parents: 225
diff changeset
6 Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org)
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
7
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
8 This program is free software: you can redistribute it and/or modify
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
11 (at your option) any later version.
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
12
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
16 GNU General Public License for more details.
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
17
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
21
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
22 import urwid
222
3198bfd66daa primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents: 202
diff changeset
23 from urwid_satext import sat_widgets
225
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
24 from urwid_satext.files_management import FileDialog
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
25 from sat_frontends.quick_frontend.quick_contact_list import QuickContactList
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
26 from sat_frontends.quick_frontend.quick_chat import QuickChat
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
27 from sat_frontends.primitivus.card_game import CardGame
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
28 import time
225
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
29 from sat.tools.jid import JID
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
30
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 class ChatText(urwid.FlowWidget):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
33 """Manage the printing of chat message"""
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
34
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
35 def __init__(self, parent, timestamp, nick, my_mess, message, align='left'):
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
36 self.parent = parent
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
37 self.timestamp = time.localtime(timestamp)
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
38 self.nick = nick
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
39 self.my_mess = my_mess
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
40 self.message = unicode(message)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
41 self.align = align
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
42
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
43 def selectable(self):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
44 return True
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
45
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
46 def keypress(self, size, key):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
47 return key
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
48
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
49 def rows(self,size,focus=False):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
50 return self.display_widget(size, focus).rows(size, focus)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
51
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
52 def render(self, size, focus=False):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
53 canvas = urwid.CompositeCanvas(self.display_widget(size, focus).render(size, focus))
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
54 if focus:
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
55 canvas.set_cursor(self.get_cursor_coords(size))
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
56 return canvas
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
57
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
58 def get_cursor_coords(self, size):
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
59 #(maxcol,) = size
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
60 return 0, 0
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
61
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
62 def display_widget(self, size, focus):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
63 render_txt = []
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
64 if self.parent.show_timestamp:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
65 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
202
754e12eaea14 primitivus: fixed unicode issue on date in chat window
Goffi <goffi@goffi.org>
parents: 190
diff changeset
66 render_txt.append(('date',"[%s]" % time.strftime(time_format, self.timestamp).decode('utf-8')))
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
67 if self.parent.show_short_nick:
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
68 render_txt.append(('my_nick' if self.my_mess else 'other_nick',"**" if self.my_mess else "*"))
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
69 else:
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
70 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
71 render_txt.append(self.message)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
72 return urwid.Text(render_txt, align=self.align)
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
73
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
74 class Chat(urwid.WidgetWrap, QuickChat):
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
75
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
76 def __init__(self, target, host, type='one2one'):
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
77 self.target = target
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
78 QuickChat.__init__(self, target, host, type)
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
79 self.content = urwid.SimpleListWalker([])
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
80 self.text_list = urwid.ListBox(self.content)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
81 self.chat_widget = urwid.Frame(self.text_list)
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
82 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)])
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
83 self.chat_colums = urwid.Columns([('weight', 8, self.chat_widget)])
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
84 self.pile = urwid.Pile([self.chat_colums])
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
85 urwid.WidgetWrap.__init__(self, self.__getDecoration(self.pile))
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
86 self.setType(type)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
87 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
88 self.show_timestamp = True
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
89 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
90 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
91 self.subject = None
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
92
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
93 def keypress(self, size, key):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
94 if key == "meta p": #user wants to (un)hide the presents panel
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
95 if self.type == 'group':
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
96 widgets = self.chat_colums.widget_list
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
97 if self.present_panel in widgets:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
98 self.__removePresentPanel()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
99 else:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
100 self.__appendPresentPanel()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
101 elif key == "meta t": #user wants to (un)hide timestamp
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
102 self.show_timestamp = not self.show_timestamp
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
103 for wid in self.content:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
104 wid._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
105 elif key == "meta n": #user wants to (not) use short nick
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
106 self.show_short_nick = not self.show_short_nick
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 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
110 show = not isinstance(self._w, sat_widgets.LabelLine)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
111 self.showDecoration(show)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
112 self._invalidate()
181
a566f654929e README update:
Goffi <goffi@goffi.org>
parents: 180
diff changeset
113 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
114 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
115 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
116 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
117 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
118 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
119 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
120 elif self.show_title == 2:
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
121 self.chat_widget.header = None
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
122 self._invalidate()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
123
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
125 return super(Chat, self).keypress(size, key)
137
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
126
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
127 def getMenu(self):
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
128 """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
129 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
130 if self.type == 'group':
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
131 game = _("Game")
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
132 menu.addMenu(game, "Tarot", self.onTarotRequest)
176
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
133 elif self.type == 'one2one':
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
134 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
135 return menu
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
136
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
137 def setType(self, type):
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
138 QuickChat.setType(self, type)
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
139 if type == 'one2one':
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
140 self.historyPrint(profile=self.host.profile)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
141 elif type == 'group':
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
142 if len(self.chat_colums.widget_list) == 1:
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
143 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
144 self.present_panel = sat_widgets.VerticalSeparator(present_widget)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
145 self.__appendPresentPanel()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
146
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
147 def __getDecoration(self, widget):
222
3198bfd66daa primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents: 202
diff changeset
148 return sat_widgets.LabelLine(widget, sat_widgets.SurroundedText(unicode(self.target)))
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
149
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
150 def showDecoration(self, show=True):
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
151 """Show/Hide the decoration around the chat window"""
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
152 if show:
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
153 main_widget = self.__getDecoration(self.pile)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
154 else:
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
155 main_widget = self.pile
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
156 self._w = main_widget
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
157
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
158
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
159 def __buildPresentList(self):
222
3198bfd66daa primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents: 202
diff changeset
160 self.present_wid = sat_widgets.GenericList([],option_type = sat_widgets.ClickableText)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
161 return self.present_wid
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
162
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
163 def __appendPresentPanel(self):
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
164 self.chat_colums.widget_list.append(self.present_panel)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
165 self.chat_colums.column_types.append(('weight', 2))
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
166
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
167 def __removePresentPanel(self):
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
168 self.chat_colums.set_focus(0) #necessary as the focus change to the next object, we can go out of range if we are on the last object of self.chat_colums
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
169 self.chat_colums.widget_list.remove(self.present_panel)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
170 del self.chat_colums.column_types[-1]
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
171
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
172 def __appendGamePanel(self, widget):
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
173 assert (len(self.pile.widget_list) == 1)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
174 self.pile.widget_list.insert(0,widget)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
175 self.pile.item_types.insert(0,('weight', 1))
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
176 self.pile.widget_list.insert(1,urwid.Filler(urwid.Divider('-')))
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
177 self.pile.item_types.insert(1,('fixed', 1))
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
178 self.host.redraw()
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
179
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
180 def __removeGamePanel(self):
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
181 assert (len(self.pile.widget_list) == 3)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
182 self.pile.set_focus(0) #necessary as the focus change to the next object, we can go out of range if we are on the last object of self.chat_colums
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
183 del self.pile.widget_list[0]
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
184 del self.pile.item_types[0]
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
185 self.host.redraw()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
186
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
187 def setSubject(self, subject, wrap='space'):
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
188 """Set title for a group chat"""
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
189 QuickChat.setSubject(self, subject)
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
190 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
191 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
192 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
193 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
194 self.host.redraw()
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
195
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
196 def setPresents(self, param_nicks):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
197 """Set the users presents in the contact list for a group chat
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
198 @param nicks: list of nicknames
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
199 """
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
200 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
201 nicks.sort()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
202 QuickChat.setPresents(self, nicks)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
203 self.present_wid.changeValues(nicks)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
204 self.host.redraw()
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 119
diff changeset
205
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
206 def replaceUser(self, param_nick):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
207 """Add user if it is not in the group list"""
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
208 nick = unicode(param_nick) #FIXME: should be done in DBus bridge
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
209 if "facebook" in nick:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
210 self.host.debug()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
211 QuickChat.replaceUser(self, nick)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
212 presents = self.present_wid.getAllValues()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
213 if nick not in presents:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
214 presents.append(nick)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
215 presents.sort()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
216 self.present_wid.changeValues(presents)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
217 self.host.redraw()
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
218
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
219 def removeUser(self, param_nick):
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
220 """Remove a user from the group list"""
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
221 nick = unicode(param_nick) #FIXME: should be done in DBus bridge
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
222 QuickChat.removeUser(self, nick)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
223 self.present_wid.deleteValue(nick)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
224 self.host.redraw()
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
225
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
226 def printMessage(self, from_jid, msg, profile, timestamp=""):
153
f197b52796ee Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents: 144
diff changeset
227 assert isinstance(from_jid, JID)
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
228 try:
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
229 jid,nick,mymess = QuickChat.printMessage(self, from_jid, msg, profile, timestamp)
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
230 except TypeError:
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
231 return
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
232 my_jid = self.host.profiles[profile]['whoami']
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
233 self.content.append(ChatText(self, timestamp or None, nick, mymess, msg))
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
234 self.text_list.set_focus(len(self.content)-1)
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
235 self.host.redraw()
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
236
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
237 def printInfo(self, msg, type='normal'):
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
238 """Print general info
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
239 @param msg: message to print
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
240 @type: one of:
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 181
diff changeset
241 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
242 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
243 """
222
3198bfd66daa primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents: 202
diff changeset
244 self.content.append(sat_widgets.ClickableText(msg))
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
245 self.text_list.set_focus(len(self.content)-1)
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
diff changeset
246 self.host.redraw()
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
247
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
248 def startGame(self, game_type, referee, players):
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
249 """Configure the chat window to start a game"""
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
250 if game_type=="Tarot":
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
251 try:
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
252 self.tarot_wid = CardGame(self, referee, players, self.nick)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
253 self.__appendGamePanel(self.tarot_wid)
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
254 except e:
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
255 self.host.debug()
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
256
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
257 def getGame(self, game_type):
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
258 """Return class managing the game type"""
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
259 #TODO: check that the game is launched, and manage errors
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
260 if game_type=="Tarot":
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 137
diff changeset
261 return self.tarot_wid
137
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
262
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
263 #MENU EVENTS#
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
264 def onTarotRequest(self, menu):
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
265 if len(self.occupants) != 4:
222
3198bfd66daa primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents: 202
diff changeset
266 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
267 else:
227394eb080c Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents: 130
diff changeset
268 self.host.bridge.tarotGameCreate(self.id, list(self.occupants), self.host.profile)
176
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
269
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
270 def onSendFileRequest(self, menu):
180
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
271 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
272 self.host.showPopUp(dialog, 80, 80)
a50953ac6191 Primitivus: send_file first draft
Goffi <goffi@goffi.org>
parents: 153
diff changeset
273
180
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
274 #MISC EVENTS#
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
275 def onFileSelected(self, filepath):
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
276 self.host.removePopUp()
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
277 full_jid = self.host.CM.get_full(self.target)
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
278 id = self.host.bridge.sendFile(full_jid, filepath)
fdb961f27ae9 Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents: 176
diff changeset
279 self.host.addProgress(id,filepath)