annotate src/browser/sat_browser/contact_list.py @ 607:537649f6a2d0 frontends_multi_profiles

browser side (blog, contact list): use of new listener mechanism to update avatar
author Goffi <goffi@goffi.org>
date Mon, 09 Feb 2015 21:56:30 +0100
parents 7af8f4ab3675
children ea27925ef2a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
3
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 323
diff changeset
4 # Libervia: a Salut à Toi frontend
340
ce5b33f499c5 dates update
Goffi <goffi@goffi.org>
parents: 339
diff changeset
5 # Copyright (C) 2011, 2012, 2013, 2014 Jérôme Poisson <goffi@goffi.org>
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
6
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 323
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: 323
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: 323
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: 323
diff changeset
10 # (at your option) any later version.
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
11
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 323
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: 323
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: 323
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: 323
diff changeset
15 # GNU Affero General Public License for more details.
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
16
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 323
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: 323
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
19
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
20 import pyjd # this is dummy in pyjs
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 413
diff changeset
21 from sat.core.log import getLogger
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 413
diff changeset
22 log = getLogger(__name__)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
23 from sat_frontends.quick_frontend.quick_contact_list import QuickContactList
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from pyjamas.ui.SimplePanel import SimplePanel
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
25 from pyjamas.ui.ScrollPanel import ScrollPanel
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from pyjamas.ui.VerticalPanel import VerticalPanel
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
27 from pyjamas.ui.ClickListener import ClickHandler
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from pyjamas.ui.Label import Label
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
29 from pyjamas.ui.HTML import HTML
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
30 from pyjamas.ui.Image import Image
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from pyjamas import Window
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from pyjamas import DOM
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 439
diff changeset
33 from __pyjamas__ import doc
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
34
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
35 from sat_frontends.tools import jid
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
36 from constants import Const as C
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
37 import base_widget
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
38 import panels
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
39 import html_tools
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
40 import chat
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
41
242
a25aa882e09a browser_side: add context menu for contact:
souliane <souliane@mailoo.org>
parents: 230
diff changeset
42
510
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
43 def buildPresenceStyle(presence, base_style=None):
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
44 """Return the CSS classname to be used for displaying the given presence information.
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
45 @param presence (str): presence is a value in ('', 'chat', 'away', 'dnd', 'xa')
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
46 @param base_style (str): base classname
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
47 @return: str
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
48 """
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
49 if not base_style:
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
50 base_style = "contactLabel"
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
51 return '%s-%s' % (base_style, presence or 'connected')
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
52
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
53
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
54 def setPresenceStyle(widget, presence, base_style=None):
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
55 """
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
56 Set the CSS style of a contact's element according to its presence.
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
57
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
58 @param widget (Widget): the UI element of the contact
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
59 @param presence (str): a value in ("", "chat", "away", "dnd", "xa").
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
60 @param base_style (str): the base name of the style to apply
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
61 """
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
62 if not hasattr(widget, 'presence_style'):
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
63 widget.presence_style = None
510
db3436c85fb1 browser_side: the status menu is now based on GenericMenuBar instead of PopupMenuPanel
souliane <souliane@mailoo.org>
parents: 498
diff changeset
64 style = buildPresenceStyle(presence, base_style)
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
65 if style == widget.presence_style:
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
66 return
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
67 if widget.presence_style is not None:
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
68 widget.removeStyleName(widget.presence_style)
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
69 widget.addStyleName(style)
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
70 widget.presence_style = style
370
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
71
30d03d9f07e4 browser_side: refactorization of the file tools.py:
souliane <souliane@mailoo.org>
parents: 340
diff changeset
72
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
73 class GroupLabel(base_widget.DragLabel, Label, ClickHandler):
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
74 def __init__(self, host, group):
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
75 self.group = group
451
1a0cec9b0f1e better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 449
diff changeset
76 Label.__init__(self, group) # , Element=DOM.createElement('div')
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
77 self.setStyleName('group')
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 592
diff changeset
78 base_widget.DragLabel.__init__(self, group, "GROUP", host)
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
79 ClickHandler.__init__(self)
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
80 self.addClickListener(self)
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
81
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
82 def onClick(self, sender):
574
b07f0fe2763a browser_side: safer attributes handling in getOrCreateLiberviaWidget + use it to create MUC panels
souliane <souliane@mailoo.org>
parents: 571
diff changeset
83 self.host.getOrCreateLiberviaWidget(panels.MicroblogPanel, {'item': self.group})
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 226
diff changeset
84
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
85
485
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
86 class ContactLabel(HTML):
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
87 def __init__(self, jid, name=None):
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
88 HTML.__init__(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
89 self.name = name or str(jid)
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
90 self.waiting = False
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
91 self.refresh()
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
92 self.setStyleName('contactLabel')
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
93
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
94 def refresh(self):
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
95 if self.waiting:
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
96 wait_html = "<b>(*)</b>&nbsp;"
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
97 self.setHTML("%(wait)s%(name)s" % {'wait': wait_html,
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
98 'name': html_tools.html_sanitize(self.name)})
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
99
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
100 def setMessageWaiting(self, waiting):
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
101 """Show a visual indicator if message are waiting
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
102
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
103 @param waiting: True if message are waiting"""
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
104 self.waiting = waiting
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
105 self.refresh()
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
106
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 226
diff changeset
107
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
108 class ContactMenuBar(base_widget.WidgetMenuBar):
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
109
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
110 def onBrowserEvent(self, event):
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
111 base_widget.WidgetMenuBar.onBrowserEvent(self, event)
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
112 event.stopPropagation() # prevent opening the chat dialog
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
113
578
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
114 @classmethod
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
115 def getCategoryHTML(cls, menu_name_i18n, type_):
606
7af8f4ab3675 browser side: fixed avatar getting + better DEFAULT/EMPTY avatars constants + use of jid.JID for microblog's author
Goffi <goffi@goffi.org>
parents: 600
diff changeset
116 return '<img src="%s"/>' % C.DEFAULT_AVATAR_URL
578
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
117
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
118 def setUrl(self, url):
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
119 """Set the URL of the contact avatar."""
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
120 self.items[0].setHTML('<img src="%s" />' % url)
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
121
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
122
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
123 class ContactBox(VerticalPanel, ClickHandler, base_widget.DragLabel):
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
124
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
125 def __init__(self, host, jid_, name=None, click_listener=None, handle_menu=None):
485
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
126 VerticalPanel.__init__(self, StyleName='contactBox', VerticalAlignment='middle')
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 592
diff changeset
127 base_widget.DragLabel.__init__(self, jid_, "CONTACT", host)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
128 self.jid = jid_
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
129 self.label = ContactLabel(jid_, name)
578
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
130 self.avatar = ContactMenuBar(self, host) if handle_menu else Image()
606
7af8f4ab3675 browser side: fixed avatar getting + better DEFAULT/EMPTY avatars constants + use of jid.JID for microblog's author
Goffi <goffi@goffi.org>
parents: 600
diff changeset
131 self.updateAvatar(host.getAvatarURL(jid_))
578
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
132 self.add(self.avatar)
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
133 self.add(self.label)
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
134 if click_listener:
485
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
135 ClickHandler.__init__(self)
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
136 self.addClickListener(self)
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
137 self.click_listener = click_listener
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
138
498
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 495
diff changeset
139 def addMenus(self, menu_bar):
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 495
diff changeset
140 menu_bar.addCachedMenus(C.MENU_ROSTER_JID_CONTEXT, {'jid': self.jid})
60be99de3808 browser_side: menus refactorization + handle levels > 2
souliane <souliane@mailoo.org>
parents: 495
diff changeset
141 menu_bar.addCachedMenus(C.MENU_JID_CONTEXT, {'jid': self.jid})
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
142
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
143 def setMessageWaiting(self, waiting):
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
144 """Show a visual indicator if message are waiting
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
145
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
146 @param waiting: True if message are waiting"""
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
147 self.label.setMessageWaiting(waiting)
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
148
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
149 def updateAvatar(self, url):
578
668bb04e9708 browser_side: set the roster contact's contextual menu on the avatar (no extra button)
souliane <souliane@mailoo.org>
parents: 574
diff changeset
150 """Update the avatar.
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
151
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
152 @param url (str): image url
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
153 """
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
154 self.avatar.setUrl(url)
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
155
485
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
156 def onClick(self, sender):
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
157 self.click_listener(self.jid)
485
5911f71acc80 browser side: move contacts list's avatar from right to top
souliane <souliane@mailoo.org>
parents: 480
diff changeset
158
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
159
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
160 class GroupPanel(VerticalPanel):
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
161
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
162 def __init__(self, parent):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
163 VerticalPanel.__init__(self)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
164 self.setStyleName('groupPanel')
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
165 self._parent = parent
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
166 self._groups = set()
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
167
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
168 def add(self, group):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
169 if group in self._groups:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
170 log.warning("trying to add an already existing group")
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
171 return
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
172 _item = GroupLabel(self._parent.host, group)
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
173 _item.addMouseListener(self._parent)
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
174 DOM.setStyleAttribute(_item.getElement(), "cursor", "pointer")
255
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
175 index = 0
459
36f27d1e64b2 browser_side: avoid warning "list comprehension redefines 'group' from line XXX"
souliane <souliane@mailoo.org>
parents: 455
diff changeset
176 for group_ in [child.group for child in self.getChildren()]:
255
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
177 if group_ > group:
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
178 break
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
179 index += 1
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
180 VerticalPanel.insert(self, _item, index)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
181 self._groups.add(group)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
182
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
183 def remove(self, group):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
184 for wid in self:
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
185 if isinstance(wid, GroupLabel) and wid.group == group:
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
186 VerticalPanel.remove(self, wid)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
187 self._groups.remove(group)
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
188 return
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
189 log.warning("Trying to remove a non existent group")
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
190
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
191 def getGroupBox(self, group):
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
192 """get the widget of a group
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
193
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
194 @param group (str): the group
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
195 @return: GroupLabel instance if present, else None"""
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
196 for wid in self:
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
197 if isinstance(wid, GroupLabel) and wid.group == group:
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
198 return wid
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
199 return None
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
200
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
201 def getGroups(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
202 return self._groups
242
a25aa882e09a browser_side: add context menu for contact:
souliane <souliane@mailoo.org>
parents: 230
diff changeset
203
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
204
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
205 class BaseContactsPanel(VerticalPanel):
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
206 """Class that can be used to represent a contact list, but not necessarily
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
207 the one that is displayed on the left side. Special features like popup menu
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
208 panel or changing the contact states must be done in a sub-class."""
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
209
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
210 def __init__(self, host, handle_click=False, handle_menu=False):
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
211 VerticalPanel.__init__(self)
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
212 self.host = host
255
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
213 self.contacts = []
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
214 self.click_listener = None
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
215 self.handle_menu = handle_menu
242
a25aa882e09a browser_side: add context menu for contact:
souliane <souliane@mailoo.org>
parents: 230
diff changeset
216
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
217 if handle_click:
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
218 def cb(contact_jid):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
219 host.widgets.getOrCreateWidget(chat.Chat, contact_jid, type_=C.CHAT_ONE2ONE, profile=C.PROF_KEY_NONE)
495
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
220 self.click_listener = cb
587fe75d1b16 browser_side: handle menus of type ROOM, SINGLE and ROSTER_JID
souliane <souliane@mailoo.org>
parents: 485
diff changeset
221
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
222 def add(self, jid_, name=None):
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
223 """Add a contact to the list.
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
224
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
225 @param jid_ (jid.JID): jid_ of the contact
479
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
226 @param name (str): optional name of the contact
c21ea1fe3593 browser side: small refactoring to prepare displaying avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 467
diff changeset
227 """
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
228 assert isinstance(jid_, jid.JID)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
229 if jid_ in self.contacts:
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
230 return
255
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
231 index = 0
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
232 for contact_ in self.contacts:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
233 if contact_ > jid_:
255
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
234 break
da0487f0a2e7 browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents: 252
diff changeset
235 index += 1
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
236 self.contacts.insert(index, jid_)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
237 box = ContactBox(self.host, jid_, name, self.click_listener, self.handle_menu)
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
238 VerticalPanel.insert(self, box, index)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
239
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
240 def remove(self, jid_):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
241 box = self.getContactBox(jid_)
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
242 if not box:
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
243 return
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
244 VerticalPanel.remove(self, box)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
245 self.contacts.remove(jid_)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
246
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
247 def isContactPresent(self, contact_jid):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
248 """Return True if a contact is present in the panel"""
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
249 return contact_jid in self.contacts
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
250
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
251 def getContacts(self):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
252 return self.contacts
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
253
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
254 def getContactBox(self, contact_jid):
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
255 """get the widget of a contact
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
256
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
257 @param contact_jid (jid.JID): the contact
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
258 @return: ContactBox instance if present, else None"""
600
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
259 assert isinstance(contact_jid, jid.JID)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
260 for wid in self:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
261 if isinstance(wid, ContactBox) and wid.jid == contact_jid:
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
262 return wid
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
263 return None
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
264
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
265 def updateAvatar(self, jid_, url):
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
266 """Update the avatar of the given contact
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
267
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
268 @param jid_ (jid.JID): contact jid
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
269 @param url (str): image url
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
270 """
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
271 try:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
272 self.getContactBox(jid_).updateAvatar(url)
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
273 except TypeError:
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
274 pass
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
275
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
276
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
277 class ContactsPanel(BaseContactsPanel):
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
278 """The contact list that is displayed on the left side."""
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
279
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
280 def __init__(self, host):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
281 BaseContactsPanel.__init__(self, host, handle_click=True, handle_menu=True)
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
282
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
283 def setState(self, jid_, type_, state):
47
7cabe3c1a5f2 browser side: connected contacts now appear differently
Goffi <goffi@goffi.org>
parents: 33
diff changeset
284 """Change the appearance of the contact, according to the state
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
285 @param jid_ (jid.JID): jid.JID which need to change state
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
286 @param type_ (str): one of "availability", "messageWaiting"
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
287 @param state:
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
288 - for messageWaiting type:
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
289 True if message are waiting
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
290 - for availability type:
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
291 C.PRESENCE_UNAVAILABLE or None if not connected, else presence like RFC6121 #4.7.2.1"""
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
292 assert type_ in ('availability', 'messageWaiting')
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
293 contact_box = self.getContactBox(jid_)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
294 if not contact_box:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
295 log.warning("No contact box found for {}".format(jid_))
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
296 else:
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
297 if type_ == 'availability':
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
298 if state is None:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
299 state = C.PRESENCE_UNAVAILABLE
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
300 setPresenceStyle(contact_box.label, state)
252
b77940d8a9bf browser_side: isolate the basic stuff of ContactList in the new GenericContactList class
souliane <souliane@mailoo.org>
parents: 242
diff changeset
301 elif type_ == 'messageWaiting':
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
302 contact_box.setMessageWaiting(state)
47
7cabe3c1a5f2 browser side: connected contacts now appear differently
Goffi <goffi@goffi.org>
parents: 33
diff changeset
303
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
304
467
97c72fe4a5f2 browser_side: import fixes:
Goffi <goffi@goffi.org>
parents: 459
diff changeset
305 class ContactTitleLabel(base_widget.DragLabel, Label, ClickHandler):
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
306 def __init__(self, host, text):
451
1a0cec9b0f1e better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 449
diff changeset
307 Label.__init__(self, text) # , Element=DOM.createElement('div')
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
308 self.setStyleName('contactTitle')
594
a099990f77a6 browser side: border widgets are now visible on drag start + they float right or left in the cell
Goffi <goffi@goffi.org>
parents: 592
diff changeset
309 base_widget.DragLabel.__init__(self, text, "CONTACT_TITLE", host)
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
310 ClickHandler.__init__(self)
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
311 self.addClickListener(self)
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
312
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
313 def onClick(self, sender):
574
b07f0fe2763a browser_side: safer attributes handling in getOrCreateLiberviaWidget + use it to create MUC panels
souliane <souliane@mailoo.org>
parents: 571
diff changeset
314 self.host.getOrCreateLiberviaWidget(panels.MicroblogPanel, {'item': None})
230
266e9678eec0 browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents: 226
diff changeset
315
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
316
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
317 class ContactList(SimplePanel, QuickContactList):
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
318 """Manage the contacts and groups"""
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
319
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
320 def __init__(self, host):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
321 QuickContactList.__init__(self, host, C.PROF_KEY_NONE)
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
322 SimplePanel.__init__(self)
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
323 self.scroll_panel = ScrollPanel()
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
324 self.vPanel = VerticalPanel()
200
0f5c2f799913 browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents: 196
diff changeset
325 _title = ContactTitleLabel(host, 'Contacts')
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 13
diff changeset
326 DOM.setStyleAttribute(_title.getElement(), "cursor", "pointer")
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
327 self._contacts_panel = ContactsPanel(host)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
328 self._contacts_panel.setStyleName('contactPanel') # FIXME: style doesn't exists !
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
329 self._group_panel = GroupPanel(self)
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
330
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
331 self.vPanel.add(_title)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
332 self.vPanel.add(self._group_panel)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
333 self.vPanel.add(self._contacts_panel)
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
334 self.scroll_panel.add(self.vPanel)
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
335 self.add(self.scroll_panel)
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
336 self.setStyleName('contactList')
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
337 Window.addWindowResizeListener(self)
607
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
338 host.addListerner('avatar', self.onAvatarUpdate)
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
339
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
340 @property
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
341 def profile(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
342 return C.PROF_KEY_NONE
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
343
607
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
344 def onDelete(self):
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
345 QuickContactList.onDelete(self)
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
346 self.host.removeListener('avatar', self.onAvatarUpdate)
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
347
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
348 def update(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
349 ### GROUPS ###
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
350 _keys = self._groups.keys()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
351 try:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
352 # XXX: Pyjamas doesn't do the set casting if None is present
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
353 _keys.remove(None)
592
c66f7227848e browser side: fixed an error catch in contact_list module (raised error depend on pyama's compilation options)
Goffi <goffi@goffi.org>
parents: 589
diff changeset
354 except (KeyError, ValueError): # XXX: error raised depend on pyjama's compilation options
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
355 pass
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
356 current_groups = set(_keys)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
357 shown_groups = self._group_panel.getGroups()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
358 new_groups = current_groups.difference(shown_groups)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
359 removed_groups = shown_groups.difference(current_groups)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
360 for group in new_groups:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
361 self._group_panel.add(group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
362 for group in removed_groups:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
363 self._group_panel.remove(group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
364
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
365 ### JIDS ###
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
366 current_contacts = set(self._cache.keys())
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
367 shown_contacts = set(self._contacts_panel.getContacts())
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
368 new_contacts = current_contacts.difference(shown_contacts)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
369 removed_contacts = shown_contacts.difference(current_contacts)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
370
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
371 for contact in new_contacts:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
372 self._contacts_panel.add(contact)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
373 for contact in removed_contacts:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
374 self._contacts_panel.remove(contact)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
375
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
376 def onWindowResized(self, width, height):
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
377 contact_panel_elt = self.getElement()
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
378 # FIXME: still needed ?
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
379 # classname = 'widgetsPanel' if isinstance(self.getParent().getParent(), panels.UniBoxPanel) else 'gwt-TabBar'
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
380 classname = 'gwt-TabBar'
290
3216c8d5432b browser_side: set the ideal height for the contact panel size when displayed in the unibox panel
souliane <souliane@mailoo.org>
parents: 279
diff changeset
381 _elts = doc().getElementsByClassName(classname)
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
382 if not _elts.length:
439
d52f529a6d42 browser side: use of new log system (first draft):
Goffi <goffi@goffi.org>
parents: 413
diff changeset
383 log.error("no element of class %s found, it should exist !" % classname)
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
384 tab_bar_h = height
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
385 else:
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
386 tab_bar_h = DOM.getAbsoluteTop(_elts.item(0)) or height # getAbsoluteTop can be 0 if tabBar is hidden
187
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
387
d0503f8f15ef browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents: 165
diff changeset
388 ideal_height = tab_bar_h - DOM.getAbsoluteTop(contact_panel_elt) - 5
290
3216c8d5432b browser_side: set the ideal height for the contact panel size when displayed in the unibox panel
souliane <souliane@mailoo.org>
parents: 279
diff changeset
389 self.scroll_panel.setHeight("%s%s" % (ideal_height, "px"))
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
390
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
391 # def updateContact(self, jid_s, attributes, groups):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
392 # """Add a contact to the panel if it doesn't exist, update it else
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
393
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
394 # @param jid_s: jid userhost as unicode
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
395 # @param attributes: cf SàT Bridge API's newContact
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
396 # @param groups: list of groups"""
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
397 # _current_groups = self.getContactGroups(jid_s)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
398 # _new_groups = set(groups)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
399 # _key = "@%s: "
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
400
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
401 # for group in _current_groups.difference(_new_groups):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
402 # # We remove the contact from the groups where he isn't anymore
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
403 # self.groups[group].remove(jid_s)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
404 # if not self.groups[group]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
405 # # The group is now empty, we must remove it
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
406 # del self.groups[group]
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
407 # self._group_panel.remove(group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
408 # if self.host.uni_box:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
409 # self.host.uni_box.removeKey(_key % group)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
410
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
411 # for group in _new_groups.difference(_current_groups):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
412 # # We add the contact to the groups he joined
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
413 # if group not in self.groups.keys():
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
414 # self.groups[group] = set()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
415 # self._group_panel.add(group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
416 # if self.host.uni_box:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
417 # self.host.uni_box.addKey(_key % group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
418 # self.groups[group].add(jid_s)
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
419
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
420 # # We add the contact to contact list, it will check if contact already exists
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
421 # self._contacts_panel.add(jid_s)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
422 # self.updateVisibility([jid_s], self.getContactGroups(jid_s))
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
423
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
424 # def removeContact(self, jid):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
425 # """Remove contacts from groups where he is and contact list"""
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
426 # self.updateContact(jid, {}, []) # we remove contact from every group
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
427 # self._contacts_panel.remove(jid)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
428
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
429 # def setConnected(self, jid_s, resource, availability, priority, statuses):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
430 # """Set connection status
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
431 # @param jid_s (str): JID userhost as unicode
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
432 # """
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
433 # if availability == 'unavailable':
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
434 # if jid_s in self.connected:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
435 # if resource in self.connected[jid_s]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
436 # del self.connected[jid_s][resource]
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
437 # if not self.connected[jid_s]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
438 # del self.connected[jid_s]
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
439 # else:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
440 # if jid_s not in self.connected:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
441 # self.connected[jid_s] = {}
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
442 # self.connected[jid_s][resource] = (availability, priority, statuses)
413
7a8991cda2fa browser_side: display presence with the highest priority
souliane <souliane@mailoo.org>
parents: 372
diff changeset
443
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
444 # # check if the contact is connected with another resource, use the one with highest priority
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
445 # if jid_s in self.connected:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
446 # max_resource = max_priority = None
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
447 # for tmp_resource in self.connected[jid_s]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
448 # if max_priority is None or self.connected[jid_s][tmp_resource][1] >= max_priority:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
449 # max_resource = tmp_resource
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
450 # max_priority = self.connected[jid_s][tmp_resource][1]
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
451 # if availability == "unavailable": # do not check the priority here, because 'unavailable' has a dummy one
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
452 # priority = max_priority
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
453 # availability = self.connected[jid_s][max_resource][0]
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
454 # if jid_s not in self.connected or priority >= max_priority:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
455 # # case 1: jid not in self.connected means all resources are disconnected, update with 'unavailable'
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
456 # # case 2: update (or confirm) with the values of the resource which takes precedence
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
457 # self._contacts_panel.setState(jid_s, "availability", availability)
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
458
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
459 # # update the connected contacts chooser live
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
460 # if hasattr(self.host, "room_contacts_chooser") and self.host.room_contacts_chooser is not None:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
461 # self.host.room_contacts_chooser.resetContacts()
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
462
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
463 # self.updateVisibility([jid_s], self.getContactGroups(jid_s))
271
d868181d0649 browser_side: update contacts in "group and contact chooser" when the a user connect/disconnect
souliane <souliane@mailoo.org>
parents: 267
diff changeset
464
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
465 def setContactMessageWaiting(self, jid, waiting):
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
466 """Show an visual indicator that contact has send a message
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
467 @param jid: jid of the contact
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
468 @param waiting: True if message are waiting"""
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
469 self._contacts_panel.setState(jid, "messageWaiting", waiting)
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 55
diff changeset
470
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
471 # def getConnected(self, filter_muc=False):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
472 # """return a list of all jid (bare jid) connected
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
473 # @param filter_muc: if True, remove the groups from the list
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
474 # """
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
475 # contacts = self.connected.keys()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
476 # contacts.sort()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
477 # return contacts if not filter_muc else list(set(contacts).intersection(set(self.getContacts())))
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 22
diff changeset
478
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
479 # def getContactGroups(self, contact_jid_s):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
480 # """Get groups where contact is
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
481 # @param group: string of single group, or list of string
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
482 # @param contact_jid_s: jid to test, as unicode
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
483 # """
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
484 # result = set()
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
485 # for group in self.groups:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
486 # if self.isContactInGroup(group, contact_jid_s):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
487 # result.add(group)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
488 # return result
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
489
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
490 # def isContactInGroup(self, group, contact_jid):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
491 # """Test if the contact_jid is in the group
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
492 # @param group: string of single group, or list of string
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
493 # @param contact_jid: jid to test
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
494 # @return: True if contact_jid is in on of the groups"""
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
495 # if group in self.groups and contact_jid in self.groups[group]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
496 # return True
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
497 # return False
13
0110d4e1d816 microblog panel filtering
Goffi <goffi@goffi.org>
parents: 6
diff changeset
498
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 51
diff changeset
499 def isContactInRoster(self, contact_jid):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 51
diff changeset
500 """Test if the contact is in our roster list"""
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
501 for contact_box in self._contacts_panel:
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
502 if contact_jid == contact_box.jid:
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 51
diff changeset
503 return True
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 51
diff changeset
504 return False
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 51
diff changeset
505
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
506 # def getContacts(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
507 # return self._contacts_panel.getContacts()
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
508
21
77c2e48efa29 browser side: a warning message now show who will receive the message entered in UniBox, with a color depending on how many people will be able to see it
Goffi <goffi@goffi.org>
parents: 19
diff changeset
509 def getGroups(self):
77c2e48efa29 browser side: a warning message now show who will receive the message entered in UniBox, with a color depending on how many people will be able to see it
Goffi <goffi@goffi.org>
parents: 19
diff changeset
510 return self.groups.keys()
77c2e48efa29 browser side: a warning message now show who will receive the message entered in UniBox, with a color depending on how many people will be able to see it
Goffi <goffi@goffi.org>
parents: 19
diff changeset
511
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
512 def onMouseMove(self, sender, x, y):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
513 pass
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
514
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
515 def onMouseDown(self, sender, x, y):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
516 pass
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
517
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
518 def onMouseUp(self, sender, x, y):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
519 pass
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
520
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
521 def onMouseEnter(self, sender):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
522 if isinstance(sender, GroupLabel):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
523 jids = self.getGroupData(sender.group, "jids")
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
524 for contact in self._contacts_panel:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
525 if contact.jid in jids:
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
526 contact.label.addStyleName("selected")
226
744426c2b699 browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 200
diff changeset
527
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
528 def onMouseLeave(self, sender):
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff changeset
529 if isinstance(sender, GroupLabel):
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
530 jids = self.getGroupData(sender.group, "jids")
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
531 for contact in self._contacts_panel:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
532 if contact.jid in jids:
480
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
533 contact.label.removeStyleName("selected")
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
534
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
535 def updateAvatar(self, jid_s, url):
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
536 """Update the avatar of the given contact
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
537
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
538 @param jid_s (str): contact jid
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
539 @param url (str): image url
50b286866739 browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents: 479
diff changeset
540 """
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
541 self._contacts_panel.updateAvatar(jid_s, url)
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
542
607
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
543 def onAvatarUpdate(self, jid_, hash_, profile):
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
544 """Called on avatar update events
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
545
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
546 @param jid_: jid of the entity with updated avatar
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
547 @param hash_: hash of the avatar
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
548 @param profile: should be C.PROF_KEY_NONE
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
549 """
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
550 self._contacts_panel.updateAvatar(jid_, self.host.getAvatarURL(jid_))
537649f6a2d0 browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents: 606
diff changeset
551
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
552 def hasVisibleMembers(self, group):
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
553 """Tell if the given group actually has visible members
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
554
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
555 @param group (str): the group to check
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
556 @return: boolean
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
557 """
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
558 for jid_ in self.groups[group]:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
559 if self._contacts_panel.getContactBox(jid_).isVisible():
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
560 return True
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
561 return False
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
562
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
563 def offlineContactsToShow(self):
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
564 """Tell if offline contacts should be visible according to the user settings
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
565
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
566 @return: boolean
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
567 """
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
568 return self.host.getCachedParam('General', C.SHOW_OFFLINE_CONTACTS) == 'true'
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
569
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
570 def emtyGroupsToShow(self):
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
571 """Tell if empty groups should be visible according to the user settings
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
572
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
573 @return: boolean
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
574 """
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
575 return self.host.getCachedParam('General', C.SHOW_EMPTY_GROUPS) == 'true'
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
576
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
577 def updatePresence(self, entity, show, priority, statuses):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
578 QuickContactList.updatePresence(self, entity, show, priority, statuses)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
579 entity_bare = entity.bare
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
580 show = self.getCache(entity_bare, C.PRESENCE_SHOW) # we use cache to have the show nformation of main resource only
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
581 self._contacts_panel.setState(entity_bare, "availability", show)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
582
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
583 # def updateVisibility(self, jids, groups):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
584 # """Set the widgets visibility for the given contacts and groups
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
585
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
586 # @param jids (list[str]): list of JID
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
587 # @param groups (list[str]): list of groups
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
588 # """
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
589 # for jid_s in jids:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
590 # try:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
591 # self._contacts_panel.getContactBox(jid_s).setVisible(jid_s in self.connected or self.offlineContactsToShow())
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
592 # except TypeError:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
593 # log.warning('No box for contact %s: this code line should not be reached' % jid_s)
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
594 # for group in groups:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
595 # try:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
596 # self._group_panel.getGroupBox(group).setVisible(self.hasVisibleMembers(group) or self.emtyGroupsToShow())
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
597 # except TypeError:
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
598 # log.warning('No box for group %s: this code line should not be reached' % group)
567
ee9c7bd266ad browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents: 518
diff changeset
599
589
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
600 # def refresh(self):
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
601 # """Show or hide disconnected contacts and empty groups"""
a5019e62c3e9 browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents: 578
diff changeset
602 # self.updateVisibility(self._contacts_panel.contacts, self.groups.keys())
600
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
603
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
604
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
605 def mayContainJID(iterable, item):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
606 """Tells if the given item is in the iterable, works with JID.
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
607
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
608 @param iterable(object): list, set or another iterable object
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
609 @param item (object): element
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
610 @return: bool
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
611 """
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
612 # Pyjamas JID-friendly implementation of the "in" operator. Since our JID
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
613 # doesn't inherit from str, without this method the test would return True
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
614 # only when the objects references are the same.
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
615 if isinstance(item, jid.JID):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
616 return hash(item) in [hash(other) for other in iterable if isinstance(other, jid.JID)]
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
617 return super(type(iterable), iterable).__contains__(self, item)
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
618
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
619
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
620 class JIDSet(set):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
621 """JID set implementation for Pyjamas"""
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
622
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
623 def __contains__(self, item):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
624 return mayContainJID(self, item)
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
625
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
626
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
627 class JIDList(list):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
628 """JID list implementation for Pyjamas"""
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
629
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
630 def __contains__(self, item):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
631 return mayContainJID(self, item)
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
632
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
633
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
634 class JIDDict(dict):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
635 """JID dict implementation for Pyjamas (a dict with JID keys)"""
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
636
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
637 def __contains__(self, item):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
638 return mayContainJID(self, item)
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
639
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
640 def keys(self):
32dbbc941123 browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents: 594
diff changeset
641 return JIDSet(dict.keys(self))