annotate browser/sat_browser/chat.py @ 1188:263fed3ce354

server (pages): on_data_post can now raise an exceptions.DataError to reload the page with a warning message (without validating data posted)
author Goffi <goffi@goffi.org>
date Sun, 26 May 2019 22:19:42 +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'})