Mercurial > libervia-web
annotate src/browser/sat_browser/contact_list.py @ 995:f88325b56a6a
server: dynamic pages first draft:
/!\ new dependency: autobahn
This patch introduce server part of dynamic pages.
Dynamic pages use websockets to establish constant connection with a Libervia page, allowing to receive real time data or update it.
The feature is activated by specifying "dynamic = true" in the page.
Once activated, page can implement "on_data" method which will be called when data are sent by the page.
To send data the other way, the page can use request.sendData.
The new "registerSignal" method allows to use an "on_signal" method to be called each time given signal is received, with automatic (and optional) filtering on profile.
New renderPartial and renderAndUpdate method allow to append new HTML elements to the dynamic page.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 03 Jan 2018 01:10:12 +0100 |
parents | fd4eae654182 |
children | f2170536ba23 |
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 |
964
fd4eae654182
misc: date update (yes it's a bit late :p )
Goffi <goffi@goffi.org>
parents:
912
diff
changeset
|
5 # Copyright (C) 2011-2017 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 |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from pyjamas import Window |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from pyjamas import DOM |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
480
50b286866739
browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents:
479
diff
changeset
|
32 from constants import Const as C |
733
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
33 from sat_frontends.tools import jid |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
34 import libervia_widget |
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
35 import contact_panel |
647
e0021d571eef
browser side: moved ContactBox, ContactsPanel, ContactLabeland ContactMenuBar to base_widget/base_panels so they can be reused outside of contact_list module
Goffi <goffi@goffi.org>
parents:
641
diff
changeset
|
36 import blog |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
37 import chat |
242
a25aa882e09a
browser_side: add context menu for contact:
souliane <souliane@mailoo.org>
parents:
230
diff
changeset
|
38 |
614
14bdf5394ae9
browser side: fixed jid's public blog menu
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
39 unicode = str # XXX: pyjama doesn't manage unicode |
14bdf5394ae9
browser side: fixed jid's public blog menu
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
40 |
14bdf5394ae9
browser side: fixed jid's public blog menu
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
41 |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
42 class GroupLabel(libervia_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
|
43 def __init__(self, host, group): |
617
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
44 """ |
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
45 |
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
46 @param host (SatWebFrontend) |
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
47 @param group (unicode): group name |
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
48 """ |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
49 self.group = group |
451 | 50 Label.__init__(self, group) # , Element=DOM.createElement('div') |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
51 self.setStyleName('group') |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
52 libervia_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
|
53 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
|
54 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
|
55 |
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
|
56 def onClick(self, sender): |
748
0d5889b9313c
browser side: fixed group panel drop and contact_list click on GroupLabel
Goffi <goffi@goffi.org>
parents:
733
diff
changeset
|
57 self.host.displayWidget(blog.Blog, (self.group,)) |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
226
diff
changeset
|
58 |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
59 |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
60 class GroupPanel(VerticalPanel): |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 def __init__(self, parent): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 VerticalPanel.__init__(self) |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
64 self.setStyleName('groupPanel') |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 self._parent = parent |
911
997cf25e785c
browser side (contact list): fixed groups displaying
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
66 self._groups = set() |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 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
|
69 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
|
70 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
|
71 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
|
72 _item = GroupLabel(self._parent.host, group) |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 _item.addMouseListener(self._parent) |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 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
|
75 index = 0 |
459
36f27d1e64b2
browser_side: avoid warning "list comprehension redefines 'group' from line XXX"
souliane <souliane@mailoo.org>
parents:
455
diff
changeset
|
76 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
|
77 if group_ > group: |
da0487f0a2e7
browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents:
252
diff
changeset
|
78 break |
da0487f0a2e7
browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents:
252
diff
changeset
|
79 index += 1 |
da0487f0a2e7
browser_side: small changes to prepare the contact group manager:
souliane <souliane@mailoo.org>
parents:
252
diff
changeset
|
80 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
|
81 self._groups.add(group) |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
82 |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
83 def remove(self, group): |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
84 for wid in self: |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
85 if isinstance(wid, GroupLabel) and wid.group == group: |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
86 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
|
87 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
|
88 return |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
89 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
|
90 |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
91 def getGroupBox(self, group): |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
92 """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
|
93 |
617
5baca9d46c34
browser_side: add/improve some docstrings
souliane <souliane@mailoo.org>
parents:
616
diff
changeset
|
94 @param group (unicode): the group |
567
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
95 @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
|
96 for wid in self: |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
97 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
|
98 return wid |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
99 return None |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
200
diff
changeset
|
100 |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
101 def getGroups(self): |
911
997cf25e785c
browser side (contact list): fixed groups displaying
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
102 return self._groups |
242
a25aa882e09a
browser_side: add context menu for contact:
souliane <souliane@mailoo.org>
parents:
230
diff
changeset
|
103 |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
104 |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
105 class ContactTitleLabel(libervia_widget.DragLabel, Label, ClickHandler): |
634
16a5da120b7f
browser side (contact list): Contact list improvments:
Goffi <goffi@goffi.org>
parents:
633
diff
changeset
|
106 |
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
|
107 def __init__(self, host, text): |
451 | 108 Label.__init__(self, text) # , Element=DOM.createElement('div') |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
109 self.setStyleName('contactTitle') |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
647
diff
changeset
|
110 libervia_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
|
111 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
|
112 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
|
113 |
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
|
114 def onClick(self, sender): |
766
dd70db1c48dc
browser_side (contact_list): fixes click on the "Contacts" button above the roster
souliane <souliane@mailoo.org>
parents:
754
diff
changeset
|
115 self.host.displayWidget(blog.Blog, ()) |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
226
diff
changeset
|
116 |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
117 |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
118 class ContactList(SimplePanel, QuickContactList): |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 """Manage the contacts and groups""" |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
200
diff
changeset
|
120 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
121 def __init__(self, host, target, on_click=None, on_change=None, user_data=None, profiles=None): |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
122 QuickContactList.__init__(self, host, C.PROF_KEY_NONE) |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
123 self.contact_list = self.host.contact_list |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 SimplePanel.__init__(self) |
634
16a5da120b7f
browser side (contact list): Contact list improvments:
Goffi <goffi@goffi.org>
parents:
633
diff
changeset
|
125 self.host = host |
187
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
126 self.scroll_panel = ScrollPanel() |
779
fc941d0d97f8
browser_side: fixed ContactsPanel scrolling
souliane <souliane@mailoo.org>
parents:
766
diff
changeset
|
127 self.scroll_panel.addStyleName("gwt-ScrollPanel") # XXX: no class is set by Pyjamas |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 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
|
129 _title = ContactTitleLabel(host, 'Contacts') |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
13
diff
changeset
|
130 DOM.setStyleAttribute(_title.getElement(), "cursor", "pointer") |
684
e876f493dccc
browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
131 |
e876f493dccc
browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
132 def on_click(contact_jid): |
e876f493dccc
browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
133 self.host.displayWidget(chat.Chat, contact_jid, type_=C.CHAT_ONE2ONE) |
754
d3fa1e8904cf
browser_side: display the number of alerts for each contact and not only a symbol (*) + favicon displays the total number of waiting messages
souliane <souliane@mailoo.org>
parents:
748
diff
changeset
|
134 self.removeAlerts(contact_jid, True) |
684
e876f493dccc
browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
135 |
e876f493dccc
browser_side: follow changes made on quick_frontend for chat states and MUC symbols + minor fixes following the refactorisation:
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
136 self._contacts_panel = contact_panel.ContactsPanel(host, contacts_click=on_click, contacts_menus=(C.MENU_JID_CONTEXT, C.MENU_ROSTER_JID_CONTEXT)) |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
137 self._group_panel = GroupPanel(self) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
200
diff
changeset
|
138 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 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
|
140 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
|
141 self.vPanel.add(self._contacts_panel) |
187
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
142 self.scroll_panel.add(self.vPanel) |
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
143 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
|
144 self.setStyleName('contactList') |
187
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
145 Window.addWindowResizeListener(self) |
624
9092e624bb27
browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents:
622
diff
changeset
|
146 |
9092e624bb27
browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents:
622
diff
changeset
|
147 # FIXME: workaround for a pyjamas issue: calling hash on a class method always return a different value if that method is defined directly within the class (with the "def" keyword) |
9092e624bb27
browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents:
622
diff
changeset
|
148 self.avatarListener = self.onAvatarUpdate |
9092e624bb27
browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents:
622
diff
changeset
|
149 host.addListener('avatar', self.avatarListener, [C.PROF_KEY_NONE]) |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
150 self.postInit() |
187
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
151 |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
152 @property |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
153 def profile(self): |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
154 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
|
155 |
607
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
156 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
|
157 QuickContactList.onDelete(self) |
624
9092e624bb27
browser_side: fixes various issues
souliane <souliane@mailoo.org>
parents:
622
diff
changeset
|
158 self.host.removeListener('avatar', self.avatarListener) |
607
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
159 |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
160 def update(self, entities=None, type_=None, profile=None): |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
161 # XXX: as update is slow, we avoid many updates on profile plugs |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
162 # and do them all at once at the end |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
163 if not self.host._profile_plugged: # FIXME: should not be necessary anymore (done in QuickFrontend) |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
164 return |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
165 ### GROUPS ### |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
166 _keys = self.contact_list._groups.keys() |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
167 try: |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
168 # 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
|
169 _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
|
170 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
|
171 pass |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
172 current_groups = set(_keys) |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
173 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
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 |
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
181 ### JIDS ### |
909
e8b133b77aa4
browser, server: update to get compatibility with 0.7-dev (not finished):
Goffi <goffi@goffi.org>
parents:
818
diff
changeset
|
182 to_show = [jid_ for jid_ in self.contact_list.roster if self.contact_list.entityToShow(jid_) and jid_ != self.contact_list.whoami.bare] |
630 | 183 to_show.sort() |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
184 |
660
267761bf7f08
browser side (contact list): ContactPanels is used instead of OccupantsList in MUC:
Goffi <goffi@goffi.org>
parents:
658
diff
changeset
|
185 self._contacts_panel.setList(to_show) |
630 | 186 |
187
d0503f8f15ef
browser side: scroller added to contacts panel
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
187 def onWindowResized(self, width, height): |
654
40c72f3b7638
browser_side: MainPanel is now based on a DockPanel, which allows to use less tables and also to remove some "window resized" listeners
souliane <souliane@mailoo.org>
parents:
651
diff
changeset
|
188 ideal_height = height - DOM.getAbsoluteTop(self.getElement()) - 5 |
658
476d8d9973d3
browser_side: the contact list's height needs a window resize after it's been added or when the tab bar display is changed
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
189 tab_panel = self.host.panel.tab_panel |
476d8d9973d3
browser_side: the contact list's height needs a window resize after it's been added or when the tab bar display is changed
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
190 if tab_panel.getWidgetCount() > 1: |
476d8d9973d3
browser_side: the contact list's height needs a window resize after it's been added or when the tab bar display is changed
souliane <souliane@mailoo.org>
parents:
654
diff
changeset
|
191 ideal_height -= tab_panel.getTabBar().getOffsetHeight() |
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
|
192 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
|
193 |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
194 def isContactInRoster(self, contact_jid): |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
195 """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
|
196 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
|
197 if contact_jid == contact_box.jid: |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
198 return True |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
199 return False |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
200 |
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
|
201 def getGroups(self): |
911
997cf25e785c
browser side (contact list): fixed groups displaying
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
202 return set([g for g in self._groups if g is not None]) |
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
|
203 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 def onMouseMove(self, sender, x, y): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 pass |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
200
diff
changeset
|
206 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 def onMouseDown(self, sender, x, y): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 pass |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 def onMouseUp(self, sender, x, y): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 pass |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 def onMouseEnter(self, sender): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 if isinstance(sender, GroupLabel): |
912
1ced5b522ae2
browser side(contact list): fixed calls to getGroupData
Goffi <goffi@goffi.org>
parents:
911
diff
changeset
|
215 jids = self.contact_list.getGroupData(sender.group, "jids") |
787
b2a75a103aac
browser side (contact list): fixed a traceback on mouse enter/leave + bad attribute name
Goffi <goffi@goffi.org>
parents:
779
diff
changeset
|
216 for contact in self._contacts_panel.getBoxes(): |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
217 if contact.jid in jids: |
480
50b286866739
browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents:
479
diff
changeset
|
218 contact.label.addStyleName("selected") |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
200
diff
changeset
|
219 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 def onMouseLeave(self, sender): |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 if isinstance(sender, GroupLabel): |
912
1ced5b522ae2
browser side(contact list): fixed calls to getGroupData
Goffi <goffi@goffi.org>
parents:
911
diff
changeset
|
222 jids = self.contact_list.getGroupData(sender.group, "jids") |
787
b2a75a103aac
browser side (contact list): fixed a traceback on mouse enter/leave + bad attribute name
Goffi <goffi@goffi.org>
parents:
779
diff
changeset
|
223 for contact in self._contacts_panel.getBoxes(): |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
224 if contact.jid in jids: |
480
50b286866739
browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents:
479
diff
changeset
|
225 contact.label.removeStyleName("selected") |
50b286866739
browser side: display avatars in the contact panel
souliane <souliane@mailoo.org>
parents:
479
diff
changeset
|
226 |
638
63697f082e8a
browser side: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents:
637
diff
changeset
|
227 def onAvatarUpdate(self, jid_, hash_, profile): |
607
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
228 """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
|
229 |
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
230 @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
|
231 @param hash_: hash of the avatar |
638
63697f082e8a
browser side: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents:
637
diff
changeset
|
232 @param profile: %(doc_profile)s |
607
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
233 """ |
687
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
234 box = self._contacts_panel.getContactBox(jid_) |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
235 if box: |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
236 box.update() |
607
537649f6a2d0
browser side (blog, contact list): use of new listener mechanism to update avatar
Goffi <goffi@goffi.org>
parents:
606
diff
changeset
|
237 |
640
75715f5c95e3
browser side(contact list): added nick listener
Goffi <goffi@goffi.org>
parents:
639
diff
changeset
|
238 def onNickUpdate(self, jid_, new_nick, profile): |
687
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
239 box = self._contacts_panel.getContactBox(jid_) |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
240 if box: |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
241 box.update() |
640
75715f5c95e3
browser side(contact list): added nick listener
Goffi <goffi@goffi.org>
parents:
639
diff
changeset
|
242 |
567
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
243 def offlineContactsToShow(self): |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
244 """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
|
245 |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
246 @return: boolean |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
247 """ |
633
617f7a5c5312
browser side (contact list): use of c.bool for parameter conversion
Goffi <goffi@goffi.org>
parents:
630
diff
changeset
|
248 return C.bool(self.host.getCachedParam('General', C.SHOW_OFFLINE_CONTACTS)) |
567
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
249 |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
250 def emtyGroupsToShow(self): |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
251 """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
|
252 |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
253 @return: boolean |
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
254 """ |
633
617f7a5c5312
browser side (contact list): use of c.bool for parameter conversion
Goffi <goffi@goffi.org>
parents:
630
diff
changeset
|
255 return C.bool(self.host.getCachedParam('General', C.SHOW_EMPTY_GROUPS)) |
567
ee9c7bd266ad
browser_side: implements "Show offline contacts" and "Show empty groups" parameters
souliane <souliane@mailoo.org>
parents:
518
diff
changeset
|
256 |
639
8da4735a3c81
browser side (contact list): fixed forgotten profile argument in presence listener
Goffi <goffi@goffi.org>
parents:
638
diff
changeset
|
257 def onPresenceUpdate(self, entity, show, priority, statuses, profile): |
8da4735a3c81
browser side (contact list): fixed forgotten profile argument in presence listener
Goffi <goffi@goffi.org>
parents:
638
diff
changeset
|
258 QuickContactList.onPresenceUpdate(self, entity, show, priority, statuses, profile) |
687
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
259 box = self._contacts_panel.getContactBox(entity) |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
260 if box: # box doesn't exist for MUC bare entity, don't create it |
3845a086f0b3
browser_side: update ContactList, Chat, ContactsPanel, ContactBox, ContactLabel to update the display using listeners as it is done in quick_frontend:
souliane <souliane@mailoo.org>
parents:
685
diff
changeset
|
261 box.update() |
589
a5019e62c3e9
browser side: big refactoring to base Libervia on QuickFrontend, first draft:
Goffi <goffi@goffi.org>
parents:
578
diff
changeset
|
262 |
600
32dbbc941123
browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents:
594
diff
changeset
|
263 |
601
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
264 class JIDList(list): |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
265 """JID-friendly list implementation for Pyjamas""" |
600
32dbbc941123
browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents:
594
diff
changeset
|
266 |
32dbbc941123
browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents:
594
diff
changeset
|
267 def __contains__(self, item): |
601
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
268 """Tells if the list contains the given item. |
600
32dbbc941123
browser_side: fixes the contact group manager
souliane <souliane@mailoo.org>
parents:
594
diff
changeset
|
269 |
601
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
270 @param item (object): element to check |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
271 @return: bool |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
272 """ |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
273 # Since our JID doesn't inherit from str/unicode, without this method |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
274 # the test would return True only when the objects references are the |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
275 # same. Tests have shown that the other iterable "set" and "dict" don't |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
276 # need this hack to reproduce the Twisted's behavior. |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
277 for other in self: |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
278 if other == item: |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
279 return True |
49ccfc22116c
browser_side: fixes class JIDList, remove JIDSet and JIDDict which are actually not needed
souliane <souliane@mailoo.org>
parents:
600
diff
changeset
|
280 return False |
748
0d5889b9313c
browser side: fixed group panel drop and contact_list click on GroupLabel
Goffi <goffi@goffi.org>
parents:
733
diff
changeset
|
281 |
733
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
282 def index(self, item): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
283 i = 0 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
284 for other in self: |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
285 if other == item: |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
286 return i |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
287 i += 1 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
288 raise ValueError("JIDList.index(%(item)s): %(item)s not in list" % {"item": item}) |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
289 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
290 class JIDSet(set): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
291 """JID set implementation for Pyjamas""" |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
292 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
293 def __contains__(self, item): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
294 return __containsJID(self, item) |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
295 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
296 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
297 class JIDDict(dict): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
298 """JID dict implementation for Pyjamas (a dict with JID keys)""" |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
299 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
300 def __contains__(self, item): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
301 return __containsJID(self, item) |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
302 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
303 def keys(self): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
304 return JIDSet(dict.keys(self)) |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
305 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
306 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
307 def __containsJID(iterable, item): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
308 """Tells if the given item is in the iterable, works with JID. |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
309 |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
310 @param iterable(object): list, set or another iterable object |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
311 @param item (object): element |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
312 @return: bool |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
313 """ |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
314 # Pyjamas JID-friendly implementation of the "in" operator. Since our JID |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
315 # doesn't inherit from str, without this method the test would return True |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
316 # only when the objects references are the same. |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
317 if isinstance(item, jid.JID): |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
318 return hash(item) in [hash(other) for other in iterable if isinstance(other, jid.JID)] |
66beef5b943d
browser_side: add functions JIDSet and JIDDict
souliane <souliane@mailoo.org>
parents:
716
diff
changeset
|
319 return super(type(iterable), iterable).__contains__(iterable, item) |