annotate browser/sat_browser/chat.py @ 1203:251eba911d4d

server (websockets): fixed websocket handling on HTTPS connections: Original request used to retrieve a page was stored on dynamic pages, but after the end of it, the channel was deleted, resulting in a isSecure() always returning False, and troubles in chain leading to the the use of the wrong session object. This patch fixes this by reworking the way original request is used, and creating a new wrapping class allowing to keep an API similar to iweb.IRequest, with data coming from both the original request and the websocket request. fix 327
author Goffi <goffi@goffi.org>
date Sun, 14 Jul 2019 14:45:51 +0200
parents 2af117bfe6cc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
3
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
4 # Libervia: a Salut à Toi frontend
1144
2af117bfe6cc dates update
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
5 # Copyright (C) 2011-2019 Jérôme Poisson <goffi@goffi.org>
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
6
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
7 # This program is free software: you can redistribute it and/or modify
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
10 # (at your option) any later version.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
11
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
12 # This program is distributed in the hope that it will be useful,
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
15 # GNU Affero General Public License for more details.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
16
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 334
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
19
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 433
diff changeset
20 from sat.core.log import getLogger
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 433
diff changeset
21 log = getLogger(__name__)
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 442
diff changeset
22
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
23 # from sat_frontends.tools.games import SYMBOLS
784
f3cd261ea12f browser side: workaround for a pyjamas bug which freeze the browser in some case with addURLToText regex
Goffi <goffi@goffi.org>
parents: 779
diff changeset
24 from sat_browser import strings
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
25 from sat_frontends.tools import jid
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
26 from sat_frontends.quick_frontend import quick_widgets, quick_games, quick_menus
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
27 from sat_frontends.quick_frontend.quick_chat import QuickChat
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 442
diff changeset
28
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
29 from pyjamas.ui.AbsolutePanel import AbsolutePanel
18
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
30 from pyjamas.ui.VerticalPanel import VerticalPanel
795d144fc1d2 moved panels and menu in a separate file
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from pyjamas.ui.HorizontalPanel import HorizontalPanel
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
32 from pyjamas.ui.KeyboardListener import KEY_ENTER, KeyboardHandler
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
33 from pyjamas.ui.HTMLPanel import HTMLPanel
673
e489218886d7 browser_side: add attribute "merge_resources" to ContactsPanel to display the MUC occupants + override Chat.replaceUser and Chat.removeUser
souliane <souliane@mailoo.org>
parents: 672
diff changeset
34 from pyjamas import DOM
779
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
35 from pyjamas import Window
323
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 322
diff changeset
36
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 322
diff changeset
37 from datetime import datetime
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 442
diff changeset
38
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 463
diff changeset
39 import html_tools
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
40 import libervia_widget
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
41 import base_panel
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
42 import contact_panel
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
43 import editor_widget
433
bbdbee25123a import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents: 432
diff changeset
44 from constants import Const as C
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 463
diff changeset
45 import plugin_xep_0085
672
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
46 import game_tarot
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
47 import game_radiocol
323
0b7934e75e76 misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents: 322
diff changeset
48
279
2d6bd975a72d browser_side: set your own presence status and display those of others
souliane <souliane@mailoo.org>
parents: 276
diff changeset
49
624
9092e624bb27 browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents: 617
diff changeset
50 unicode = str # FIXME: pyjamas workaround
9092e624bb27 browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents: 617
diff changeset
51
9092e624bb27 browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents: 617
diff changeset
52
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
53 class MessageWidget(HTMLPanel):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
54
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
55 def __init__(self, mess_data):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
56 """
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
57 @param mess_data(quick_chat.Message, None): message data
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
58 None: used only for non text widgets (e.g.: focus separator)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
59 """
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
60 self.mess_data = mess_data
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
61 mess_data.widgets.add(self)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
62 _msg_class = []
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
63 if mess_data.type == C.MESS_TYPE_INFO:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
64 markup = "<span class='{msg_class}'>{msg}</span>"
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
65
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
66 if mess_data.extra.get('info_type') == 'me':
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
67 _msg_class.append('chatTextMe')
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
68 else:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
69 _msg_class.append('chatTextInfo')
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
70 # FIXME: following code was in printInfo before refactoring
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
71 # seems to be used only in radiocol
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
72 # elif type_ == 'link':
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
73 # _wid = HTML(msg)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
74 # _wid.setStyleName('chatTextInfo-link')
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
75 # if link_cb:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
76 # _wid.addClickListener(link_cb)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
77 else:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
78 markup = "<span class='chat_text_timestamp'>{timestamp}</span> <span class='chat_text_nick'>{nick}</span> <span class='{msg_class}'>{msg}</span>"
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
79 _msg_class.append("chat_text_msg")
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
80 if mess_data.own_mess:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
81 _msg_class.append("chat_text_mymess")
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
82
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
83 xhtml = mess_data.main_message_xhtml
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
84 _date = datetime.fromtimestamp(float(mess_data.timestamp))
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
85 HTMLPanel.__init__(self, markup.format(
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
86 timestamp = _date.strftime("%H:%M"),
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
87 nick = "[{}]".format(html_tools.html_sanitize(mess_data.nick)),
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
88 msg_class = ' '.join(_msg_class),
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
89 msg = strings.addURLToText(html_tools.html_sanitize(mess_data.main_message)) if not xhtml else html_tools.inlineRoot(xhtml) # FIXME: images and external links must be removed according to preferences
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
90 ))
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
91 if mess_data.type != C.MESS_TYPE_INFO:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
92 self.setStyleName('chatText')
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
93
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 206
diff changeset
94
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
95 class Chat(QuickChat, libervia_widget.LiberviaWidget, KeyboardHandler):
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 226
diff changeset
96
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
97 def __init__(self, host, target, type_=C.CHAT_ONE2ONE, nick=None, occupants=None, subject=None, profiles=None):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
98 """Panel used for conversation (one 2 one or group chat)
496
0924710b666a browser_side: remove the annoying (esp. when editing a message) scrolling each time you select a microblog entry
souliane <souliane@mailoo.org>
parents: 495
diff changeset
99
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
100 @param host: SatWebFrontend instance
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 463
diff changeset
101 @param target: entity (jid.JID) with who we have a conversation (contact's jid for one 2 one chat, or MUC room)
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 589
diff changeset
102 @param type: one2one for simple conversation, group for MUC
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 589
diff changeset
103 """
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
104 QuickChat.__init__(self, host, target, type_, nick, occupants, subject, profiles=profiles)
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
105 self.vpanel = VerticalPanel()
210
3092f6b1710c browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents: 206
diff changeset
106 self.vpanel.setSize('100%', '100%')
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 534
diff changeset
107
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 534
diff changeset
108 # FIXME: temporary dirty initialization to display the OTR state
663
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
109 header_info = host.plugins['otr'].getInfoTextForUser(target) if (type_ == C.CHAT_ONE2ONE and 'otr' in host.plugins) else None
536
048ae7314156 browser_side: temporary way to display the OTR state in the LiberviaWidget header
souliane <souliane@mailoo.org>
parents: 534
diff changeset
110
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
111 libervia_widget.LiberviaWidget.__init__(self, host, title=unicode(target.bare), info=header_info, selectable=True)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
112 self._body = AbsolutePanel()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
113 self._body.setStyleName('chatPanel_body')
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
114 chat_area = HorizontalPanel()
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
115 chat_area.setStyleName('chatArea')
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
116 if type_ == C.CHAT_GROUP:
673
e489218886d7 browser_side: add attribute "merge_resources" to ContactsPanel to display the MUC occupants + override Chat.replaceUser and Chat.removeUser
souliane <souliane@mailoo.org>
parents: 672
diff changeset
117 self.occupants_panel = contact_panel.ContactsPanel(host, merge_resources=False,
671
2201ff543a05 browser_side: replace ContactsPanel and ContactBox init "parent" attribute with "host" + menus bound to the avatar can be parameterized
souliane <souliane@mailoo.org>
parents: 663
diff changeset
118 contacts_style="muc_contact",
2201ff543a05 browser_side: replace ContactsPanel and ContactBox init "parent" attribute with "host" + menus bound to the avatar can be parameterized
souliane <souliane@mailoo.org>
parents: 663
diff changeset
119 contacts_menus=(C.MENU_JID_CONTEXT),
2201ff543a05 browser_side: replace ContactsPanel and ContactBox init "parent" attribute with "host" + menus bound to the avatar can be parameterized
souliane <souliane@mailoo.org>
parents: 663
diff changeset
120 contacts_display=('resource',))
660
267761bf7f08 browser side (contact list): ContactPanels is used instead of OccupantsList in MUC:
Goffi <goffi@goffi.org>
parents: 652
diff changeset
121 chat_area.add(self.occupants_panel)
673
e489218886d7 browser_side: add attribute "merge_resources" to ContactsPanel to display the MUC occupants + override Chat.replaceUser and Chat.removeUser
souliane <souliane@mailoo.org>
parents: 672
diff changeset
122 DOM.setAttribute(chat_area.getWidgetTd(self.occupants_panel), "className", "occupantsPanelCell")
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
123 # FIXME: workaround for a pyjamas issue: calling hash on a class method always return a different value if that method is defined directly within the class (with the "def" keyword)
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
124 self.presenceListener = self.onPresenceUpdate
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
125 self.host.addListener('presence', self.presenceListener, [C.PROF_KEY_NONE])
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
126 self.avatarListener = self.onAvatarUpdate
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
127 host.addListener('avatar', self.avatarListener, [C.PROF_KEY_NONE])
779
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
128 Window.addWindowResizeListener(self)
872
fa29524774d6 browser (chat): use new style bridge call for mucLeave
Goffi <goffi@goffi.org>
parents: 834
diff changeset
129
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
130 else:
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
131 self.chat_state = None
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
132
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
133 self._body.add(chat_area)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
134 self.content = AbsolutePanel()
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
135 self.content.setStyleName('chatContent')
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
136 self.content_scroll = base_panel.ScrollPanelWrapper(self.content)
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
137 chat_area.add(self.content_scroll)
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
138 chat_area.setCellWidth(self.content_scroll, '100%')
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
139 self.vpanel.add(self._body)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
140 self.vpanel.setCellHeight(self._body, '100%')
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
141 self.addStyleName('chatPanel')
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
142 self.setWidget(self.vpanel)
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
143 self.chat_state_machine = plugin_xep_0085.ChatStateMachine(self.host, unicode(self.target))
696
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
144
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
145 self.message_box = editor_widget.MessageBox(self.host)
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
146 self.message_box.onSelectedChange(self)
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
147 self.message_box.addKeyboardListener(self)
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
148 self.vpanel.add(self.message_box)
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
149 self.postInit()
696
c2f22ca12e23 browser and server side: remove unibox
souliane <souliane@mailoo.org>
parents: 687
diff changeset
150
779
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
151 def onWindowResized(self, width=None, height=None):
833
4db064a70fc7 browser (chat): fixes resize callback for one2one conversation
souliane <souliane@mailoo.org>
parents: 818
diff changeset
152 if self.type == C.CHAT_GROUP:
4db064a70fc7 browser (chat): fixes resize callback for one2one conversation
souliane <souliane@mailoo.org>
parents: 818
diff changeset
153 ideal_height = self.content_scroll.getOffsetHeight()
4db064a70fc7 browser (chat): fixes resize callback for one2one conversation
souliane <souliane@mailoo.org>
parents: 818
diff changeset
154 self.occupants_panel.setHeight("%s%s" % (ideal_height, "px"))
779
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
155
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
156 @property
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
157 def target(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
158 # FIXME: for unknow reason, pyjamas doesn't use the method inherited from QuickChat
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
159 # FIXME: must remove this when either pyjamas is fixed, or we use an alternative
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
160 if self.type == C.CHAT_GROUP:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
161 return self.current_target.bare
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
162 return self.current_target
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
163
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
164 @property
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
165 def profile(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
166 # FIXME: for unknow reason, pyjamas doesn't use the method inherited from QuickWidget
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
167 # FIXME: must remove this when either pyjamas is fixed, or we use an alternative
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
168 assert len(self.profiles) == 1 and not self.PROFILES_MULTIPLE and not self.PROFILES_ALLOW_NONE
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
169 return list(self.profiles)[0]
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
170
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
171 @property
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
172 def plugin_menu_context(self):
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
173 return (C.MENU_ROOM,) if self.type == C.CHAT_GROUP else (C.MENU_SINGLE,)
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
174
499
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
175 def onKeyDown(self, sender, keycode, modifiers):
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
176 if keycode == KEY_ENTER:
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
177 self.host.showWarning(None, None)
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
178 else:
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
179 self.host.showWarning(*self.getWarningData())
ec3f30253040 browser_side: also display the warning banner when writing to a single contact and unibox is disabled
souliane <souliane@mailoo.org>
parents: 498
diff changeset
180
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
181 def getWarningData(self):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
182 if self.type not in [C.CHAT_ONE2ONE, C.CHAT_GROUP]:
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
183 raise Exception("Unmanaged type !")
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
184 if self.type == C.CHAT_ONE2ONE:
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
185 msg = "This message will be sent to your contact <span class='warningTarget'>%s</span>" % self.target
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
186 elif self.type == C.CHAT_GROUP:
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
187 msg = "This message will be sent to all the participants of the multi-user room <span class='warningTarget'>%s</span>" % self.target
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
188 return ("ONE2ONE" if self.type == C.CHAT_ONE2ONE else "GROUP", msg)
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
189
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
190 def onTextEntered(self, text):
909
e8b133b77aa4 browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents: 872
diff changeset
191 self.host.messageSend(self.target,
e8b133b77aa4 browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents: 872
diff changeset
192 {'': text},
e8b133b77aa4 browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents: 872
diff changeset
193 {},
e8b133b77aa4 browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents: 872
diff changeset
194 C.MESS_TYPE_GROUPCHAT if self.type == C.CHAT_GROUP else C.MESS_TYPE_CHAT,
e8b133b77aa4 browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents: 872
diff changeset
195 {},
663
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
196 errback=self.host.sendError,
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
197 profile_key=C.PROF_KEY_NONE
423182fea41c browser_side: fixes OTR using the new resource system and proper triggers (send and receive message) or listener (presence update)
souliane <souliane@mailoo.org>
parents: 662
diff changeset
198 )
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
199 self.chat_state_machine._onEvent("active")
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
200
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
201 def onPresenceUpdate(self, entity, show, priority, statuses, profile):
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
202 """Update entity's presence status
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
203
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
204 @param entity(jid.JID): entity updated
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
205 @param show: availability
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
206 @parap priority: resource's priority
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
207 @param statuses: dict of statuses
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
208 @param profile: %(doc_profile)s
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
209 """
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
210 assert self.type == C.CHAT_GROUP
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
211 if entity.bare != self.target:
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
212 return
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
213 self.update(entity)
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
214
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
215 def onAvatarUpdate(self, entity, hash_, profile):
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
216 """Called on avatar update events
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
217
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
218 @param jid_: jid of the entity with updated avatar
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
219 @param hash_: hash of the avatar
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
220 @param profile: %(doc_profile)s
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
221 """
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
222 assert self.type == C.CHAT_GROUP
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
223 if entity.bare != self.target:
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
224 return
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
225 self.update(entity)
201
aa76793da353 server + browser: message warning level/sending refactoring:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
226
179
8475a29d7214 closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents: 178
diff changeset
227 def onQuit(self):
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
228 libervia_widget.LiberviaWidget.onQuit(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
229 if self.type == C.CHAT_GROUP:
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
230 self.host.removeListener('presence', self.presenceListener)
872
fa29524774d6 browser (chat): use new style bridge call for mucLeave
Goffi <goffi@goffi.org>
parents: 834
diff changeset
231 self.host.bridge.mucLeave(self.target.bare, profile=C.PROF_KEY_NONE)
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
232
709
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
233 def newMessage(self, from_jid, target, msg, type_, extra, profile):
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
234 header_info = extra.pop('header_info', None)
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
235 if header_info:
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
236 self.setHeaderInfo(header_info)
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
237 QuickChat.newMessage(self, from_jid, target, msg, type_, extra, profile)
78e4a79fbb5e browser_side: fix updating OTR icons when state or trust has changed
souliane <souliane@mailoo.org>
parents: 697
diff changeset
238
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
239 def _onHistoryPrinted(self):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
240 """Refresh or scroll down the focus after the history is printed"""
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
241 self.printMessages(clear=False)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
242 super(Chat, self)._onHistoryPrinted()
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
243
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
244 def printMessages(self, clear=True):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
245 """generate message widgets
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
246
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
247 @param clear(bool): clear message before printing if true
35
d43d6e4b9dc8 room user joining/leaving
Goffi <goffi@goffi.org>
parents: 34
diff changeset
248 """
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
249 if clear:
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
250 # FIXME: clear is not handler
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
251 pass
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
252 for message in self.messages.itervalues():
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
253 self.appendMessage(message)
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
254
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
255 def createMessage(self, message):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
256 self.appendMessage(message)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
257
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
258 def appendMessage(self, message):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
259 self.content.add(MessageWidget(message))
34
ed935f763cc8 browser side: misc css/layout fixes
Goffi <goffi@goffi.org>
parents: 33
diff changeset
260 self.content_scroll.scrollToBottom()
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
261
834
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
262 def notify(self, contact="somebody", msg=""):
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
263 """Notify the user of a new message if primitivus doesn't have the focus.
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
264
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
265 @param contact (unicode): contact who wrote to the users
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
266 @param msg (unicode): the message that has been received
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
267 """
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
268 self.host.notification.notify(contact, msg)
2491898b3041 browser (chat, notification): remove the textual alerts counter, merge it with the favicon counter
souliane <souliane@mailoo.org>
parents: 833
diff changeset
269
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
270 # def printDayChange(self, day):
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
271 # """Display the day on a new line.
808
9e1e6d5241f9 browser_side: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 807
diff changeset
272
914
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
273 # @param day(unicode): day to display (or not if this method is not overwritten)
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
274 # """
0c0551967bdf server, browser: partial Libervia fix
Goffi <goffi@goffi.org>
parents: 909
diff changeset
275 # self.printInfo("* " + day)
808
9e1e6d5241f9 browser_side: restore printing the day change while displaying history
souliane <souliane@mailoo.org>
parents: 807
diff changeset
276
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
277 def setTitle(self, title=None, extra=None):
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
278 """Refresh the title of this Chat dialog
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
279
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
280 @param title (unicode): main title or None to use default
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
281 @param suffix (unicode): extra title (e.g. for chat states) or None
407
6a6551de4414 browser_side: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 404
diff changeset
282 """
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
283 if title is None:
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
284 title = unicode(self.target.bare)
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
285 if extra:
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
286 title += ' %s' % extra
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
287 libervia_widget.LiberviaWidget.setTitle(self, title)
407
6a6551de4414 browser_side: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 404
diff changeset
288
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
289 def onChatState(self, from_jid, state, profile):
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
290 super(Chat, self).onChatState(from_jid, state, profile)
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
291 if self.type == C.CHAT_ONE2ONE:
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
292 self.title_dynamic = C.CHAT_STATE_ICON[state]
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
293
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
294 def update(self, entity=None):
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
295 """Update one or all entities.
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 201
diff changeset
296
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
297 @param entity (jid.JID): entity to update
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
298 """
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
299 if self.type == C.CHAT_ONE2ONE: # only update the chat title
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
300 if self.chat_state:
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
301 self.setTitle(extra='({})'.format(self.chat_state))
687
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
302 else:
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
303 if entity is None: # rebuild all the occupants list
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
304 nicks = list(self.occupants)
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
305 nicks.sort()
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
306 self.occupants_panel.setList([jid.newResource(self.target, nick) for nick in nicks])
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
307 else: # add, remove or update only one occupant
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
308 contact_list = self.host.contact_lists[self.profile]
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
309 show = contact_list.getCache(entity, C.PRESENCE_SHOW)
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
310 if show == C.PRESENCE_UNAVAILABLE or show is None:
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
311 self.occupants_panel.removeContactBox(entity)
3845a086f0b3 browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents: 685
diff changeset
312 else:
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
313 pass
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
314 # FIXME: legacy code, chat state must be checked
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
315 # box = self.occupants_panel.updateContactBox(entity)
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
316 # box.states.setHTML(u''.join(states.values()))
684
e876f493dccc browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents: 679
diff changeset
317
944
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
318 # FIXME: legacy code, chat state must be checked
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
319 # if 'chat_state' in states.keys(): # start/stop sending "composing" state from now
5d9f6d25c586 browser: various fixes
Goffi <goffi@goffi.org>
parents: 914
diff changeset
320 # self.chat_state_machine.started = not not states['chat_state']
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 27
diff changeset
321
779
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
322 self.onWindowResized() # be sure to set the good height
fc941d0d97f8 browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents: 709
diff changeset
323
672
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
324 def addGamePanel(self, widget):
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
325 """Insert a game panel to this Chat dialog.
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
326
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
327 @param widget (Widget): the game panel
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
328 """
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
329 self.vpanel.insert(widget, 0)
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
330 self.vpanel.setCellHeight(widget, widget.getHeight())
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
331
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
332 def removeGamePanel(self, widget):
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
333 """Remove the game panel from this Chat dialog.
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
334
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
335 @param widget (Widget): the game panel
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
336 """
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
337 self.vpanel.remove(widget)
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
338
598
ed6d8f7c6026 browser side (blog, chat): fixed dropKey callbacks to adapt them to new widget creation system. Drag'n'Drop should be fixed.
Goffi <goffi@goffi.org>
parents: 589
diff changeset
339
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 585
diff changeset
340 quick_widgets.register(QuickChat, Chat)
672
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
341 quick_widgets.register(quick_games.Tarot, game_tarot.TarotPanel)
b39a9eddfe56 browser_side: fixes room games:
souliane <souliane@mailoo.org>
parents: 671
diff changeset
342 quick_widgets.register(quick_games.Radiocol, game_radiocol.RadioColPanel)
648
6d3142b782c3 browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents: 624
diff changeset
343 libervia_widget.LiberviaWidget.addDropKey("CONTACT", lambda host, item: host.displayWidget(Chat, jid.JID(item), dropped=True))
676
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
344 quick_menus.QuickMenusManager.addDataCollector(C.MENU_ROOM, {'room_jid': 'target'})
849ffb24d5bf browser side: menus refactorisation:
Goffi <goffi@goffi.org>
parents: 673
diff changeset
345 quick_menus.QuickMenusManager.addDataCollector(C.MENU_SINGLE, {'jid': 'target'})