annotate frontends/src/wix/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 cd02f5ef30df
children 5a6354ff468c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
goffi@necton2
parents:
diff changeset
1 #!/usr/bin/python
goffi@necton2
parents:
diff changeset
2 # -*- coding: utf-8 -*-
goffi@necton2
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
diff changeset
4 # wix: a SAT frontend
811
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 771
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
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: 587
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: 587
diff changeset
10 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
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: 587
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: 587
diff changeset
15 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
19
goffi@necton2
parents:
diff changeset
20
goffi@necton2
parents:
diff changeset
21
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 688
diff changeset
22 from sat.core.i18n import _
0
goffi@necton2
parents:
diff changeset
23 import wx
goffi@necton2
parents:
diff changeset
24 import os.path
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
25 import time
0
goffi@necton2
parents:
diff changeset
26 import pdb
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
27 from logging import debug, info, error, warning
225
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
28 from sat.tools.jid import JID
227
533507bb4e32 distutils wix installation
Goffi <goffi@goffi.org>
parents: 225
diff changeset
29 from sat_frontends.quick_frontend.quick_chat import QuickChat
533507bb4e32 distutils wix installation
Goffi <goffi@goffi.org>
parents: 225
diff changeset
30 from sat_frontends.wix.contact_list import ContactList
533507bb4e32 distutils wix installation
Goffi <goffi@goffi.org>
parents: 225
diff changeset
31 from sat_frontends.wix.card_game import CardPanel
361
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
32 from sat_frontends.wix.quiz_game import QuizPanel
0
goffi@necton2
parents:
diff changeset
33
goffi@necton2
parents:
diff changeset
34
goffi@necton2
parents:
diff changeset
35 idSEND = 1
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
36 idTAROT = 2
0
goffi@necton2
parents:
diff changeset
37
goffi@necton2
parents:
diff changeset
38 class Chat(wx.Frame, QuickChat):
goffi@necton2
parents:
diff changeset
39 """The chat Window for one to one conversations"""
goffi@necton2
parents:
diff changeset
40
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
41 def __init__(self, target, host, type_='one2one'):
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
42 wx.Frame.__init__(self, None, title=target, pos=(0,0), size=(400,200))
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
43 QuickChat.__init__(self, target, host, type_)
0
goffi@necton2
parents:
diff changeset
44
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
45 self.sizer = wx.BoxSizer(wx.VERTICAL)
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
46 self.SetSizer(self.sizer)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
47
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
48 self.splitter = wx.SplitterWindow(self, -1)
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
49 self.sizer.Add(self.splitter, 1, flag = wx.EXPAND)
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
50
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
51 self.conv_panel = wx.Panel(self.splitter)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
52 self.conv_panel.sizer = wx.BoxSizer(wx.VERTICAL)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
53 self.subjectBox = wx.TextCtrl(self.conv_panel, -1, style = wx.TE_READONLY)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
54 self.chatWindow = wx.TextCtrl(self.conv_panel, -1, style = wx.TE_MULTILINE | wx.TE_RICH | wx.TE_READONLY)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
55 self.textBox = wx.TextCtrl(self.conv_panel, -1, style = wx.TE_PROCESS_ENTER)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
56 self.conv_panel.sizer.Add(self.subjectBox, flag=wx.EXPAND)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
57 self.conv_panel.sizer.Add(self.chatWindow, 1, flag=wx.EXPAND)
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
58 self.conv_panel.sizer.Add(self.textBox, 0, flag=wx.EXPAND)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
59 self.conv_panel.SetSizer(self.conv_panel.sizer)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
60 self.splitter.Initialize(self.conv_panel)
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
61 self.SetMenuBar(wx.MenuBar())
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
62
0
goffi@necton2
parents:
diff changeset
63 #events
goffi@necton2
parents:
diff changeset
64 self.Bind(wx.EVT_CLOSE, self.onClose, self)
goffi@necton2
parents:
diff changeset
65 self.Bind(wx.EVT_TEXT_ENTER, self.onEnterPressed, self.textBox)
goffi@necton2
parents:
diff changeset
66
goffi@necton2
parents:
diff changeset
67 #fonts
goffi@necton2
parents:
diff changeset
68 self.font={}
goffi@necton2
parents:
diff changeset
69 self.font["points"] = self.chatWindow.GetFont().GetPointSize()
goffi@necton2
parents:
diff changeset
70 self.font["family"] = self.chatWindow.GetFont().GetFamily()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
71
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
72
0
goffi@necton2
parents:
diff changeset
73 #misc
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
74 self.day_change = time.strptime(time.strftime("%a %b %d 00:00:00 %Y")) #struct_time of day changing time
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
75 self.setType(self.type)
0
goffi@necton2
parents:
diff changeset
76 self.textBox.SetFocus()
goffi@necton2
parents:
diff changeset
77 self.Hide() #We hide because of the show toggle
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
78
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
79 def __createPresents(self):
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
80 """Create a list of present people in a group chat"""
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
81 self.present_panel = wx.Panel(self.splitter)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
82 self.present_panel.sizer = wx.BoxSizer(wx.VERTICAL)
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
83 self.present_panel.presents = ContactList(self.present_panel, self.host, type_='nicks')
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
84 self.present_panel.presents.SetMinSize(wx.Size(80,20))
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
85 self.present_panel.sizer.Add(self.present_panel.presents, 1, wx.EXPAND)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
86 self.present_panel.SetSizer(self.present_panel.sizer)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
87 self.splitter.SplitVertically(self.present_panel, self.conv_panel, 80)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
88
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
89 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
90 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
91 if type_ is 'group' and not self.splitter.IsSplit():
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
92 self.__createPresents()
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
93 self.subjectBox.Show()
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
94 self.__eraseMenus()
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
95 self.__createMenus_group()
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
96 self.sizer.Layout()
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
97 elif type_ is 'one2one' and self.splitter.IsSplit():
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
98 self.splitter.Unsplit(self.present_panel)
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
99 del self.present_panel
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
100 self.GetMenuBar().Show()
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
101 self.subjectBox.Hide()
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
102 self.__eraseMenus()
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
103 self.__createMenus_O2O()
79
db0a0f000e37 Chat presentation enhancement
Goffi <goffi@goffi.org>
parents: 78
diff changeset
104 self.nick = None
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
105 else:
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
106 self.subjectBox.Hide()
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
107 self.__eraseMenus()
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
108 self.__createMenus_O2O()
79
db0a0f000e37 Chat presentation enhancement
Goffi <goffi@goffi.org>
parents: 78
diff changeset
109 self.historyPrint(profile=self.host.profile)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
110
90
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 87
diff changeset
111 def startGame(self, game_type, referee, players):
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
112 """Configure the chat window to start a game"""
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
113 if game_type=="Tarot":
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
114 debug (_("configure chat window for Tarot game"))
90
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 87
diff changeset
115 self.tarot_panel = CardPanel(self, referee, players, self.nick)
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
116 self.sizer.Prepend(self.tarot_panel, 0, flag=wx.EXPAND)
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
117 self.sizer.Layout()
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
118 self.Fit()
321
1a990a88bff2 wix: force updating of splitterWindow in ChatWindow (needed when Tarot game is launched)
Goffi <goffi@goffi.org>
parents: 276
diff changeset
119 self.splitter.UpdateSize()
361
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
120 elif game_type=="Quiz":
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
121 debug (_("configure chat window for Quiz game"))
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
122 self.quiz_panel = QuizPanel(self, referee, players, self.nick)
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
123 self.sizer.Prepend(self.quiz_panel, 0, flag=wx.EXPAND)
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
124 self.sizer.Layout()
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
125 self.Fit()
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
126 self.splitter.UpdateSize()
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
127
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
128 def getGame(self, game_type):
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
129 """Return class managing the game type"""
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
130 #TODO: check that the game is launched, and manage errors
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
131 if game_type=="Tarot":
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
132 return self.tarot_panel
361
141eeb7cd9e6 Quizz game: first draft
Goffi <goffi@goffi.org>
parents: 321
diff changeset
133 elif game_type=="Quiz":
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
134 return self.quiz_panel
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
135
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
136 def setPresents(self, nicks):
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
137 """Set the users presents in the contact list for a group chat
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
138 @param nicks: list of nicknames
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
139 """
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 90
diff changeset
140 QuickChat.setPresents(self, nicks)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 70
diff changeset
141 for nick in nicks:
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
142 self.present_panel.presents.replace(nick)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
143
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 501
diff changeset
144 def replaceUser(self, nick, show_info=True):
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
145 """Add user if it is not in the group list"""
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
146 debug (_("Replacing user %s") % nick)
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
147 if self.type != "group":
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
148 error (_("[INTERNAL] trying to replace user for a non group chat window"))
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
149 return
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 501
diff changeset
150 QuickChat.replaceUser(self, nick, show_info)
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
151 self.present_panel.presents.replace(nick)
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 90
diff changeset
152
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 501
diff changeset
153 def removeUser(self, nick, show_info=True):
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
154 """Remove a user from the group list"""
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 501
diff changeset
155 QuickChat.removeUser(self, nick, show_info)
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
156 self.present_panel.presents.remove(nick)
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
157
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
158 def setSubject(self, subject):
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
159 """Set title for a group chat"""
120
1ca5f254ce41 primitivus group chat & misc
Goffi <goffi@goffi.org>
parents: 90
diff changeset
160 QuickChat.setSubject(self, subject)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
161 self.subjectBox.SetValue(subject)
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
162
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
163 def __eraseMenus(self):
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
164 """erase all menus"""
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
165 menuBar = self.GetMenuBar()
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
166 for i in range(menuBar.GetMenuCount()):
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
167 menuBar.Remove(i)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
168
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
169 def __createMenus_O2O(self):
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
170 """create menu bar for one 2 one chat"""
0
goffi@necton2
parents:
diff changeset
171 info("Creating menus")
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
172 self.__eraseMenus()
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 77
diff changeset
173 menuBar = self.GetMenuBar()
0
goffi@necton2
parents:
diff changeset
174 actionMenu = wx.Menu()
70
Goffi <goffi@goffi.org>
parents: 67
diff changeset
175 actionMenu.Append(idSEND, _("&SendFile CTRL-s"),_(" Send a file to contact"))
Goffi <goffi@goffi.org>
parents: 67
diff changeset
176 menuBar.Append(actionMenu,_("&Action"))
0
goffi@necton2
parents:
diff changeset
177
goffi@necton2
parents:
diff changeset
178 #events
goffi@necton2
parents:
diff changeset
179 wx.EVT_MENU(self, idSEND, self.onSendFile)
goffi@necton2
parents:
diff changeset
180
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
181 def __createMenus_group(self):
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
182 """create menu bar for group chat"""
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
183 info("Creating menus")
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
184 self.__eraseMenus()
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
185 menuBar = self.GetMenuBar()
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
186 actionMenu = wx.Menu()
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
187 actionMenu.Append(idTAROT, _("Start &Tarot game CTRL-t"),_(" Start a Tarot card game")) #tmp
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
188 menuBar.Append(actionMenu,_("&Games"))
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
189
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
190 #events
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
191 wx.EVT_MENU(self, idTAROT, self.onStartTarot)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
192
0
goffi@necton2
parents:
diff changeset
193 def __del__(self):
goffi@necton2
parents:
diff changeset
194 wx.Frame.__del__(self)
goffi@necton2
parents:
diff changeset
195
goffi@necton2
parents:
diff changeset
196 def onClose(self, event):
goffi@necton2
parents:
diff changeset
197 """Close event: we only hide the frame."""
goffi@necton2
parents:
diff changeset
198 event.Veto()
goffi@necton2
parents:
diff changeset
199 self.Hide()
goffi@necton2
parents:
diff changeset
200
goffi@necton2
parents:
diff changeset
201 def onEnterPressed(self, event):
goffi@necton2
parents:
diff changeset
202 """Behaviour when enter pressed in send line."""
688
f7878ad3c846 tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents: 638
diff changeset
203 self.host.sendMessage(self.target.bare if self.type == 'group' else self.target,
638
6821fc06a324 misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 609
diff changeset
204 event.GetString(),
6821fc06a324 misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 609
diff changeset
205 mess_type="groupchat" if self.type == 'group' else "chat",
6821fc06a324 misc: a few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 609
diff changeset
206 profile_key=self.host.profile)
0
goffi@necton2
parents:
diff changeset
207 self.textBox.Clear()
goffi@necton2
parents:
diff changeset
208
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
209 def __blink(self):
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
210 """Do wizzz and buzzz to show window to user or
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
211 at least inform him of something new"""
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
212 #TODO: use notification system
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
213 if not self.IsActive():
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
214 self.RequestUserAttention()
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
215 if not self.IsShown():
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
216 self.Show()
0
goffi@necton2
parents:
diff changeset
217
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 57
diff changeset
218 def printMessage(self, from_jid, msg, profile, timestamp=""):
0
goffi@necton2
parents:
diff changeset
219 """Print the message with differents colors depending on where it comes from."""
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
220 try:
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
221 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: 183
diff changeset
222 except TypeError:
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
223 return
79
db0a0f000e37 Chat presentation enhancement
Goffi <goffi@goffi.org>
parents: 78
diff changeset
224 print "printMessage, jid=",jid,"type=",self.type
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
225 _font_bold = wx.Font(self.font["points"], self.font["family"], wx.NORMAL, wx.BOLD)
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
226 _font_normal = wx.Font(self.font["points"], self.font["family"], wx.NORMAL, wx.NORMAL)
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
227 _font_italic = wx.Font(self.font["points"], self.font["family"], wx.ITALIC if mymess else wx.NORMAL, wx.NORMAL)
123
34766e0cf970 wix: chat: date is now printed in grey
Goffi <goffi@goffi.org>
parents: 122
diff changeset
228 self.chatWindow.SetDefaultStyle(wx.TextAttr("GREY", font=_font_normal))
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
229 msg_time = time.localtime(timestamp or None)
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
230 time_format = "%c" if msg_time < self.day_change else "%H:%M" #if the message was sent before today, we print the full date
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
231 self.chatWindow.AppendText("[%s]" % time.strftime(time_format, msg_time ))
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
232 self.chatWindow.SetDefaultStyle(wx.TextAttr( "BLACK" if mymess else "BLUE", font=_font_bold))
77
1ae680f9682e wix: MUC groupchat management + short nick shown in chat window instead of full jid when possible
Goffi <goffi@goffi.org>
parents: 76
diff changeset
233 self.chatWindow.AppendText("[%s] " % nick)
122
29998cd0ed8d wix: time is now printed in chat window
Goffi <goffi@goffi.org>
parents: 120
diff changeset
234 self.chatWindow.SetDefaultStyle(wx.TextAttr("BLACK", font=_font_italic))
0
goffi@necton2
parents:
diff changeset
235 self.chatWindow.AppendText("%s\n" % msg)
goffi@necton2
parents:
diff changeset
236 if not mymess:
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
237 self.__blink()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
238
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
239 def printInfo(self, msg, type_='normal'):
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
240 """Print general info
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
241 @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
242 @type_: one of:
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
243 normal: general info like "toto has joined the room"
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
244 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: 183
diff changeset
245 """
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
246 _font_bold = wx.Font(self.font["points"], self.font["family"], wx.NORMAL, wx.BOLD)
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
247 _font_normal = wx.Font(self.font["points"], self.font["family"], wx.NORMAL, wx.NORMAL)
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
248 self.chatWindow.SetDefaultStyle(wx.TextAttr("BLACK", font=_font_bold if type_ == 'normal' else _font_normal))
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
249 self.chatWindow.AppendText("%s\n" % msg)
812
084b52afdceb frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents: 811
diff changeset
250 if type_=="me":
190
31632472e857 quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents: 183
diff changeset
251 self.__blink()
0
goffi@necton2
parents:
diff changeset
252
goffi@necton2
parents:
diff changeset
253 ### events ###
goffi@necton2
parents:
diff changeset
254
goffi@necton2
parents:
diff changeset
255 def onSendFile(self, e):
70
Goffi <goffi@goffi.org>
parents: 67
diff changeset
256 debug(_("Send File"))
Goffi <goffi@goffi.org>
parents: 67
diff changeset
257 filename = wx.FileSelector(_("Choose a file to send"), flags = wx.FD_FILE_MUST_EXIST)
0
goffi@necton2
parents:
diff changeset
258 if filename:
70
Goffi <goffi@goffi.org>
parents: 67
diff changeset
259 debug(_("filename: %s"),filename)
501
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 480
diff changeset
260 #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: 638
diff changeset
261 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
262 if last_resource:
688
f7878ad3c846 tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents: 638
diff changeset
263 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
264 else:
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 480
diff changeset
265 full_jid = self.target
387
e66d300c5d42 frontends, bridge: sendFile method signature change + jid parameters in bridge now use _jid suffix
Goffi <goffi@goffi.org>
parents: 361
diff changeset
266 id = self.host.bridge.sendFile(full_jid, filename, {}, self.host.profile)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
267 self.host.waitProgress(id, _("File Transfer"), _("Copying %s") % os.path.basename(filename), self.host.profile)
0
goffi@necton2
parents:
diff changeset
268
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 80
diff changeset
269 def onStartTarot(self, e):
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
270 debug(_("Starting Tarot game"))
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
271 warning(_("FIXME: temporary menu, must be changed"))
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
272 if len(self.occupants) != 4:
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
273 err_dlg = wx.MessageDialog(self, _("You need to be exactly 4 peoples in the room to start a Tarot game"), _("Can't start game"), style = wx.OK | wx.ICON_ERROR) #FIXME: gof: temporary only, need to choose the people with who the game has to be started
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
274 err_dlg.ShowModal()
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
275 else:
90
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 87
diff changeset
276 self.host.bridge.tarotGameCreate(self.id, list(self.occupants), self.host.profile)
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
277
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
278 def updateChatState(self, state, nick=None):
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
279 """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: 812
diff changeset
280 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: 812
diff changeset
281 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: 812
diff changeset
282 @param state: the new chat state
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
283 @param nick: None for one2one, the MUC user nick or Const.ALL_OCCUPANTS
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
284 """
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
285 #TODO: chat states not implemented yet
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 812
diff changeset
286 pass