Mercurial > libervia-backend
annotate libervia/frontends/quick_frontend/quick_contact_list.py @ 4100:810921c33a47
tools (common/template): add filter to get media types:
Add 2 filters to get main type and subtype of media type. Jinja2 and Nunjucks don't handle
slices in the same way (Python way for Jinja2, JS way for Nunjucks), making it difficult
to retrieve main type of a media from media type. Thoses filters work in both cases.
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 22 Jun 2023 15:49:06 +0200 |
parents | 26b7ed2817da |
children | b47f21f2b8fa |
rev | line source |
---|---|
3113
b067736d5099
quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents:
3065
diff
changeset
|
1 #!/usr/bin/env python3 |
0 | 2 |
3113
b067736d5099
quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents:
3065
diff
changeset
|
3 # helper class for making a SàT frontend contact lists |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
0 | 5 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
9 # (at your option) any later version. |
0 | 10 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
14 # GNU Affero General Public License for more details. |
0 | 15 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 18 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
19 """Contact List handling multi profiles at once, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
20 should replace quick_contact_list module in the future""" |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
21 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
22 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
23 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
24 from libervia.backend.core import exceptions |
4074
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
25 from libervia.frontends.quick_frontend.quick_widgets import QuickWidget |
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
26 from libervia.frontends.quick_frontend.constants import Const as C |
26b7ed2817da
refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
27 from libervia.frontends.tools import jid |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
28 from collections import OrderedDict |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
29 |
2978
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
30 log = getLogger(__name__) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
31 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
32 try: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
33 # FIXME: to be removed when an acceptable solution is here |
3028 | 34 str("") # XXX: unicode doesn't exist in pyjamas |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
35 except (TypeError, AttributeError): # Error raised is not the same depending on |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
36 # pyjsbuild options |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
37 # XXX: pyjamas' max doesn't support key argument, so we implement it ourself |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
38 pyjamas_max = max |
1391
1276e6a0716b
quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
39 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
40 def max(iterable, key): |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
41 iter_cpy = list(iterable) |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
42 iter_cpy.sort(key=key) |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
43 return pyjamas_max(iter_cpy) |
0 | 44 |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
45 # next doesn't exist in pyjamas |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
46 def next(iterable, *args): |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
47 try: |
3028 | 48 return iterable.__next__() |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
49 except StopIteration as e: |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
50 if args: |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
51 return args[0] |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
52 raise e |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
53 |
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
54 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
55 handler = None |
0 | 56 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
57 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
58 class ProfileContactList(object): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
59 """Contact list data for a single profile""" |
0 | 60 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
61 def __init__(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
62 self.host = handler.host |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 self.profile = profile |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
64 # contain all jids in roster or not, |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
65 # bare jids as keys, resources are used in data |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
66 # XXX: we don't mutualise cache, as values may differ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
67 # for different profiles (e.g. directed presence) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
68 self._cache = {} |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
69 |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
70 # special entities (groupchat, gateways, etc) |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
71 # may be bare or full jid |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
72 self._specials = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
73 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
74 # group data contain jids in groups and misc frontend data |
2582
2e6864b1d577
quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
75 # None key is used for jids with no group |
1391
1276e6a0716b
quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
76 self._groups = {} # groups to group data map |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
77 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
78 # contacts in roster (bare jids) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
79 self._roster = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
80 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
81 # selected entities, full jid |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
82 self._selected = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
83 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
84 # options |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
85 self.show_disconnected = False |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
86 self._show_empty_groups = True |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
87 self.show_resources = False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
88 self.show_status = False |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
89 # do we show entities with notifications? |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
90 # if True, entities will be show even if they normally would not |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
91 # (e.g. not in contact list) if they have notifications attached |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
92 self.show_entities_with_notifs = True |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
93 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
94 self.host.bridge.param_get_a_async( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
95 C.SHOW_EMPTY_GROUPS, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
96 "General", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
97 profile_key=profile, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
98 callback=self._show_empty_groups_cb, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
99 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
100 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
101 self.host.bridge.param_get_a_async( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
102 C.SHOW_OFFLINE_CONTACTS, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
103 "General", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
104 profile_key=profile, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
105 callback=self._show_offline_contacts, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
106 ) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
107 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
108 self.host.addListener("presence", self.on_presence_update, [self.profile]) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
109 self.host.addListener("nicknames", self.on_nicknames_update, [self.profile]) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
110 self.host.addListener("notification", self.on_notification, [self.profile]) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
111 # on_notification only updates the entity, so we can re-use it |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
112 self.host.addListener("notificationsClear", self.on_notification, [self.profile]) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
113 |
2686
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
114 @property |
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
115 def whoami(self): |
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
116 return self.host.profiles[self.profile].whoami |
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
117 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
118 def _show_empty_groups_cb(self, show_str): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
119 # Called only by __init__ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
120 # self.update is not wanted here, as it is done by |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
121 # handler when all profiles are ready |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
122 self.show_empty_groups(C.bool(show_str)) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
123 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
124 def _show_offline_contacts(self, show_str): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
125 # same comments as for _show_empty_groups |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
126 self.show_offline_contacts(C.bool(show_str)) |
1332
0f92b6a150ff
quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents:
1328
diff
changeset
|
127 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
128 def __contains__(self, entity): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
129 """Check if entity is in contact list |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
130 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
131 An entity can be in contact list even if not in roster |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
132 use is_in_roster to check if entity is in roster. |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
133 @param entity (jid.JID): jid of the entity (resource is not ignored, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
134 use bare jid if needed) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
135 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
136 if entity.resource: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
137 try: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
138 return entity.resource in self.getCache(entity.bare, C.CONTACT_RESOURCES) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
139 except exceptions.NotFound: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
140 return False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
141 return entity in self._cache |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
142 |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
143 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
144 def roster(self): |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
145 """Return all the bare JIDs of the roster entities. |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
146 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
147 @return (set[jid.JID]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
148 """ |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
149 return self._roster |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
150 |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
151 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
152 def roster_connected(self): |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
153 """Return all the bare JIDs of the roster entities that are connected. |
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
154 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
155 @return (set[jid.JID]) |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
156 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
157 return set( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
158 [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
159 entity |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
160 for entity in self._roster |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
161 if self.getCache(entity, C.PRESENCE_SHOW, default=None) is not None |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
162 ] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
163 ) |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
164 |
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
165 @property |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
166 def roster_entities_by_group(self): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
167 """Return a dictionary binding the roster groups to their entities bare JIDs. |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
168 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
169 This also includes the empty group (None key). |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
170 @return (dict[unicode,set(jid.JID)]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
171 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
172 return {group: self._groups[group]["jids"] for group in self._groups} |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
173 |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
174 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
175 def roster_groups_by_entities(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
176 """Return a dictionary binding the entities bare JIDs to their roster groups |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
177 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
178 @return (dict[jid.JID, set(unicode)]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
179 """ |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
180 result = {} |
3028 | 181 for group, data in self._groups.items(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
182 for entity in data["jids"]: |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
183 result.setdefault(entity, set()).add(group) |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
184 return result |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
185 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
186 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
187 def selected(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
188 """Return contacts currently selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
189 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
190 @return (set): set of selected entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
191 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
192 return self._selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
193 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
194 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
195 def all_iter(self): |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
196 """return all know entities in cache as an iterator of tuples |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
197 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
198 entities are not sorted |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
199 """ |
3028 | 200 return iter(self._cache.items()) |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
201 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
202 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
203 def items(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
204 """Return item representation for all visible entities in cache |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
205 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
206 entities are not sorted |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
207 key: bare jid, value: data |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
208 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
209 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
210 jid_: cache |
3028 | 211 for jid_, cache in self._cache.items() |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
212 if self.entity_visible(jid_) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
213 } |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
214 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
215 def get_item(self, entity): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
216 """Return item representation of requested entity |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
217 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
218 @param entity(jid.JID): bare jid of entity |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
219 @raise (KeyError): entity is unknown |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
220 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
221 return self._cache[entity] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
222 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
223 def _got_contacts(self, contacts): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
224 """Add contacts and notice parent that contacts are filled |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
225 |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
226 Called during initial contact list filling |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
227 @param contacts(tuple): all contacts |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
228 """ |
1462 | 229 for contact in contacts: |
2978
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
230 entity = jid.JID(contact[0]) |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
231 if entity.resource: |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
232 # we use entity's bare jid to cache data, so a resource here |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
233 # will cause troubles |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
234 log.warning( |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
235 "Roster entities with resources are not managed, ignoring {entity}" |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
236 .format(entity=entity)) |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
237 continue |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
238 self.host.contact_new_handler(*contact, profile=self.profile) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
239 handler._contacts_filled(self.profile) |
1462 | 240 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
241 def _fill(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
242 """Get all contacts from backend |
1429
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
243 |
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
244 Contacts will be cleared before refilling them |
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
245 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
246 self.clear_contacts(keep_cache=True) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
247 self.host.bridge.contacts_get(self.profile, callback=self._got_contacts) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
248 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
249 def fill(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
250 handler.fill(self.profile) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
251 |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
252 def getCache( |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
253 self, entity, name=None, bare_default=True, create_if_not_found=False, |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
254 default=Exception): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
255 """Return a cache value for a contact |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
256 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
257 @param entity(jid.JID): entity of the contact from who we want data |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
258 (resource is used if given) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
259 if a resource specific information is requested: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
260 - if no resource is given (bare jid), the main resource is used, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
261 according to priority |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
262 - if resource is given, it is used |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
263 @param name(unicode): name the data to get, or None to get everything |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
264 @param bare_default(bool, None): if True and entity is a full jid, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
265 the value of bare jid will be returned if not value is found for |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
266 the requested resource. |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
267 If False, None is returned if no value is found for the requested resource. |
2122
3970ebcf8830
quick frontend (contact list): bare_default in getCache now default to True, plus added None:
Goffi <goffi@goffi.org>
parents:
2121
diff
changeset
|
268 If None, bare_default will be set to False if entity is in a room, True else |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
269 @param create_if_not_found(bool): if True, create contact if it's not found |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
270 in cache |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
271 @param default(object): value to return when name is not found in cache |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
272 if Exception is used, a KeyError will be returned |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
273 otherwise, the given value will be used |
1334
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
274 @return: full cache if no name is given, or value of "name", or None |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
275 @raise NotFound: entity not found in cache |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
276 @raise KeyError: name not found in cache |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
277 """ |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
278 # FIXME: resource handling need to be reworked |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
279 # FIXME: bare_default work for requesting full jid to get bare jid, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
280 # but not the other way |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
281 # e.g.: if we have set an avatar for user@server.tld/resource |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
282 # and we request user@server.tld |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2122
diff
changeset
|
283 # we won't get the avatar set in the resource |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
284 try: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
285 cache = self._cache[entity.bare] |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
286 except KeyError: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
287 if create_if_not_found: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
288 self.set_contact(entity) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
289 cache = self._cache[entity.bare] |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
290 else: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
291 raise exceptions.NotFound |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
292 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
293 if name is None: |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
294 if default is not Exception: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
295 raise exceptions.InternalError( |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
296 "default value can only Exception when name is not specified" |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
297 ) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
298 # full cache is requested |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
299 return cache |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
300 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
301 if name in ("status", C.PRESENCE_STATUSES, C.PRESENCE_PRIORITY, C.PRESENCE_SHOW): |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
302 # these data are related to the resource |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
303 if not entity.resource: |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
304 main_resource = cache[C.CONTACT_MAIN_RESOURCE] |
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
305 if main_resource is None: |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
306 # we ignore presence info if we don't have any resource in cache |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
307 # FIXME: to be checked |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
308 return |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
309 cache = cache[C.CONTACT_RESOURCES].setdefault(main_resource, {}) |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
310 else: |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
311 cache = cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {}) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
312 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
313 if name == "status": # XXX: we get the first status for 'status' key |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
314 # TODO: manage main language for statuses |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
315 return cache[C.PRESENCE_STATUSES].get(C.PRESENCE_STATUSES_DEFAULT, "") |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
316 |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
317 elif entity.resource: |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
318 try: |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
319 return cache[C.CONTACT_RESOURCES][entity.resource][name] |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
320 except KeyError as e: |
2122
3970ebcf8830
quick frontend (contact list): bare_default in getCache now default to True, plus added None:
Goffi <goffi@goffi.org>
parents:
2121
diff
changeset
|
321 if bare_default is None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
322 bare_default = not self.is_room(entity.bare) |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
323 if not bare_default: |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
324 if default is Exception: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
325 raise e |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
326 else: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
327 return default |
2061
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
328 |
748e539c5feb
quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
Goffi <goffi@goffi.org>
parents:
2032
diff
changeset
|
329 try: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
330 return cache[name] |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
331 except KeyError as e: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
332 if default is Exception: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
333 raise e |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
334 else: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
335 return default |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
336 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
337 def set_cache(self, entity, name, value): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
338 """Set or update value for one data in cache |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
339 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
340 @param entity(JID): entity to update |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
341 @param name(str): value to set or update |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
342 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
343 self.set_contact(entity, attributes={name: value}) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
344 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
345 def get_full_jid(self, entity): |
1334
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
346 """Get full jid from a bare jid |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
347 |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
348 @param entity(jid.JID): must be a bare jid |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
349 @return (jid.JID): bare jid + main resource |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
350 @raise ValueError: the entity is not bare |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
351 """ |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
352 if entity.resource: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
353 raise ValueError("get_full_jid must be used with a bare jid") |
1334
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
354 main_resource = self.getCache(entity, C.CONTACT_MAIN_RESOURCE) |
3028 | 355 return jid.JID("{}/{}".format(entity, main_resource)) |
1334
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
356 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
357 def set_group_data(self, group, name, value): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
358 """Register a data for a group |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
359 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
360 @param group: a valid (existing) group name |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
361 @param name: name of the data (can't be "jids") |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
362 @param value: value to set |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
363 """ |
2828
08b54bf77c54
primitivus(contact list): fixed room not always appearing correctly in contact list
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
364 assert name != "jids" |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
365 self._groups[group][name] = value |
124 | 366 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
367 def get_group_data(self, group, name=None): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
368 """Return value associated to group data |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
369 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
370 @param group: a valid (existing) group name |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
371 @param name: name of the data or None to get the whole dict |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
372 @return: registered value |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
373 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
374 if name is None: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
375 return self._groups[group] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
376 return self._groups[group][name] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
377 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
378 def is_in_roster(self, entity): |
3189
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
379 """Tell if an entity is in roster |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
380 |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
381 @param entity(jid.JID): jid of the entity |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
382 the bare jid will be used |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
383 """ |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
384 return entity.bare in self._roster |
142ecb7f6338
quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents:
3136
diff
changeset
|
385 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
386 def is_room(self, entity): |
2121
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
387 """Helper method to know if entity is a MUC room |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
388 |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
389 @param entity(jid.JID): jid of the entity |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
390 hint: use bare jid here, as room can't be full jid with MUC |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
391 @return (bool): True if entity is a room |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
392 """ |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
393 assert entity.resource is None # FIXME: this may change when MIX will be handled |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
394 return self.is_special(entity, C.CONTACT_SPECIAL_GROUP) |
2121
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
395 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
396 def is_special(self, entity, special_type): |
2121
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
397 """Tell if an entity is of a specialy _type |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
398 |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
399 @param entity(jid.JID): jid of the special entity |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
400 if the jid is full, will be added to special extras |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
401 @param special_type: one of special type (e.g. C.CONTACT_SPECIAL_GROUP) |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
402 @return (bool): True if entity is from this special type |
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
403 """ |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
404 return self.getCache(entity, C.CONTACT_SPECIAL, default=None) == special_type |
2121
df5cb9e7d0b7
quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents:
2120
diff
changeset
|
405 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
406 def set_special(self, entity, special_type): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
407 """Set special flag on an entity |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
408 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
409 @param entity(jid.JID): jid of the special entity |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
410 if the jid is full, will be added to special extras |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
411 @param special_type: one of special type (e.g. C.CONTACT_SPECIAL_GROUP) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
412 or None to remove special flag |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
413 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
414 assert special_type in C.CONTACT_SPECIAL_ALLOWED + (None,) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
415 self.set_cache(entity, C.CONTACT_SPECIAL, special_type) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
416 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
417 def get_specials(self, special_type=None, bare=False): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
418 """Return all the bare JIDs of the special roster entities of with given type. |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
419 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
420 @param special_type(unicode, None): if not None, filter by special type |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
421 (e.g. C.CONTACT_SPECIAL_GROUP) |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
422 @param bare(bool): return only bare jids if True |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
423 @return (iter[jid.JID]): found special entities |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
424 """ |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
425 for entity in self._specials: |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
426 if bare and entity.resource: |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
427 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
428 if ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
429 special_type is not None |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
430 and self.getCache(entity, C.CONTACT_SPECIAL, default=None) != special_type |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
431 ): |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
432 continue |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
433 yield entity |
1428
0e518415d03a
display the resource in the chat dialog when printing a private MUC message
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
434 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
435 def disconnect(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
436 # for now we just clear contacts on disconnect |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
437 self.clear_contacts() |
1428
0e518415d03a
display the resource in the chat dialog when printing a private MUC message
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
438 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
439 def clear_contacts(self, keep_cache=False): |
1430
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
440 """Clear all the contact list |
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
441 |
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
442 @param keep_cache: if True, don't reset the cache |
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
443 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
444 self.select(None) |
1430
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
445 if not keep_cache: |
ba09cd879343
quick frontends (contact list): cache is not cleared anymore on QuickContactList.fill, avoiding the accidental removal of cached values like avatars
Goffi <goffi@goffi.org>
parents:
1429
diff
changeset
|
446 self._cache.clear() |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
447 self._groups.clear() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
448 self._specials.clear() |
1410
e2e75c3c7c7b
quick_frontend, primitivus: fixes a couple of issues:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
449 self._roster.clear() |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
450 self.update() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
451 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
452 def set_contact(self, entity, groups=None, attributes=None, in_roster=False): |
2828
08b54bf77c54
primitivus(contact list): fixed room not always appearing correctly in contact list
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
453 """Add a contact to the list if it doesn't exist, else update it. |
1000
6f1e03068b5f
primitivus: fixes contact group update
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
454 |
1058
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1009
diff
changeset
|
455 This method can be called with groups=None for the purpose of updating |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
456 the contact's attributes (e.g. nicknames). In that case, the groups |
1058
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1009
diff
changeset
|
457 attribute must not be set to the default group but ignored. If not, |
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1009
diff
changeset
|
458 you may move your contact from its actual group(s) to the default one. |
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1009
diff
changeset
|
459 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
460 None value for 'groups' has a different meaning than [None] |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
461 which is for the default group. |
1058
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1009
diff
changeset
|
462 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
463 @param entity (jid.JID): entity to add or replace |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
464 if entity is a full jid, attributes will be cached in for the full jid only |
1000
6f1e03068b5f
primitivus: fixes contact group update
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
465 @param groups (list): list of groups or None to ignore the groups membership. |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
466 @param attributes (dict): attibutes of the added jid or to update |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
467 @param in_roster (bool): True if contact is from roster |
1000
6f1e03068b5f
primitivus: fixes contact group update
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
468 """ |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
469 if attributes is None: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
470 attributes = {} |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
471 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
472 entity_bare = entity.bare |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
473 # we check if the entity is visible before changing anything |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
474 # this way we know if we need to do an UPDATE_ADD, UPDATE_MODIFY |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
475 # or an UPDATE_DELETE |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
476 was_visible = self.entity_visible(entity_bare) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
477 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
478 if in_roster: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
479 self._roster.add(entity_bare) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
480 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
481 cache = self._cache.setdefault( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
482 entity_bare, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
483 { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
484 C.CONTACT_RESOURCES: {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
485 C.CONTACT_MAIN_RESOURCE: None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
486 C.CONTACT_SELECTED: set(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
487 }, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
488 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
489 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
490 # we don't want forbidden data in attributes |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
491 assert not C.CONTACT_DATA_FORBIDDEN.intersection(attributes) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
492 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
493 # we set groups and fill self._groups accordingly |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
494 if groups is not None: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
495 if not groups: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
496 groups = [None] # [None] is the default group |
1306
789e86a8919d
quick_frontend: remove the contact from the groups it has been removed from
souliane <souliane@mailoo.org>
parents:
1305
diff
changeset
|
497 if C.CONTACT_GROUPS in cache: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
498 # XXX: don't use set(cache[C.CONTACT_GROUPS]).difference(groups) because |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
499 # it won't work in Pyjamas if None is in cache[C.CONTACT_GROUPS] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
500 for group in [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
501 group for group in cache[C.CONTACT_GROUPS] if group not in groups |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
502 ]: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
503 self._groups[group]["jids"].remove(entity_bare) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
504 cache[C.CONTACT_GROUPS] = groups |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
505 for group in groups: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
506 self._groups.setdefault(group, {}).setdefault("jids", set()).add( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
507 entity_bare |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
508 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
509 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
510 # special entities management |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
511 if C.CONTACT_SPECIAL in attributes: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
512 if attributes[C.CONTACT_SPECIAL] is None: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
513 del attributes[C.CONTACT_SPECIAL] |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
514 self._specials.remove(entity) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
515 else: |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
516 self._specials.add(entity) |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
517 cache[C.CONTACT_MAIN_RESOURCE] = None |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
518 if 'nicknames' in cache: |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
519 del cache['nicknames'] |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
520 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
521 # now the attributes we keep in cache |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
522 # XXX: if entity is a full jid, we store the value for the resource only |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
523 cache_attr = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
524 cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {}) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
525 if entity.resource |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
526 else cache |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
527 ) |
3028 | 528 for attribute, value in attributes.items(): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
529 if attribute == "nicknames" and self.is_special( |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
530 entity, C.CONTACT_SPECIAL_GROUP |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
531 ): |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
532 # we don't want to keep nicknames for MUC rooms |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
533 # FIXME: this is here as plugin XEP-0054 can link resource's nick |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
534 # with bare jid which in the case of MUC |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
535 # set the nick for the whole MUC |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
536 # resulting in bad name displayed in some frontends |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
537 # FIXME: with plugin XEP-0054 + plugin identity refactoring, this |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
538 # may not be needed anymore… |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
539 continue |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
540 cache_attr[attribute] = value |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
541 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
542 # we can update the display if needed |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
543 if self.entity_visible(entity_bare): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
544 # if the contact was not visible, we need to add a widget |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
545 # else we just update id |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
546 update_type = C.UPDATE_MODIFY if was_visible else C.UPDATE_ADD |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
547 self.update([entity], update_type, self.profile) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
548 elif was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
549 # the entity was visible and is not anymore, we remove it |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
550 self.update([entity], C.UPDATE_DELETE, self.profile) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
551 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
552 def entity_visible(self, entity, check_resource=False): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
553 """Tell if the contact should be showed or hidden. |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
554 |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
555 @param entity (jid.JID): jid of the contact |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
556 @param check_resource (bool): True if resource must be significant |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
557 @return (bool): True if that contact should be showed in the list |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
558 """ |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
559 try: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
560 show = self.getCache(entity, C.PRESENCE_SHOW) |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
561 except (exceptions.NotFound, KeyError): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
562 return False |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
563 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
564 if check_resource: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
565 selected = self._selected |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
566 else: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
567 selected = {selected.bare for selected in self._selected} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
568 return ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
569 (show is not None and show != C.PRESENCE_UNAVAILABLE) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
570 or self.show_disconnected |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
571 or entity in selected |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
572 or ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
573 self.show_entities_with_notifs |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
574 and next(self.host.get_notifs(entity.bare, profile=self.profile), None) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
575 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
576 or entity.resource is None and self.is_room(entity.bare) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
577 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
578 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
579 def any_entity_visible(self, entities, check_resources=False): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
580 """Tell if in a list of entities, at least one should be shown |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
581 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
582 @param entities (list[jid.JID]): list of jids |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
583 @param check_resources (bool): True if resources must be significant |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
584 @return (bool): True if a least one entity need to be shown |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
585 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
586 # FIXME: looks inefficient, really needed? |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
587 for entity in entities: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
588 if self.entity_visible(entity, check_resources): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
589 return True |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
590 return False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
591 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
592 def is_entity_in_group(self, entity, group): |
1302
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
593 """Tell if an entity is in a roster group |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
594 |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
595 @param entity(jid.JID): jid of the entity |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
596 @param group(unicode): group to check |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
597 @return (bool): True if the entity is in the group |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
598 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
599 return entity in self.get_group_data(group, "jids") |
1302
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
600 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
601 def remove_contact(self, entity): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
602 """remove a contact from the list |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
603 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
604 @param entity(jid.JID): jid of the entity to remove (bare jid is used) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
605 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
606 entity_bare = entity.bare |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
607 was_visible = self.entity_visible(entity_bare) |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
608 try: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
609 groups = self._cache[entity_bare].get(C.CONTACT_GROUPS, set()) |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
610 except KeyError: |
3028 | 611 log.error(_("Trying to delete an unknow entity [{}]").format(entity)) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
612 try: |
1738
baac0fc5e3ad
reverted patch 58ecc0e2e6fc as it may hide an other issue
Goffi <goffi@goffi.org>
parents:
1731
diff
changeset
|
613 self._roster.remove(entity_bare) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
614 except KeyError: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
615 pass |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
616 del self._cache[entity_bare] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
617 for group in groups: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
618 self._groups[group]["jids"].remove(entity_bare) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
619 if not self._groups[group]["jids"]: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
620 # FIXME: we use pop because of pyjamas: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
621 # http://wiki.goffi.org/wiki/Issues_with_Pyjamas/en |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
622 self._groups.pop(group) |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
623 for iterable in (self._selected, self._specials): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
624 to_remove = set() |
1658
683b76c1145d
quick_frontend, primitivus: display the number of alerts for each contact and not only a symbol (*)
souliane <souliane@mailoo.org>
parents:
1572
diff
changeset
|
625 for set_entity in iterable: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
626 if set_entity.bare == entity.bare: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
627 to_remove.add(set_entity) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
628 iterable.difference_update(to_remove) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
629 if was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
630 self.update([entity], C.UPDATE_DELETE, self.profile) |
504
65ecbb473cbb
core, quick frontend, plugin xep-0054, bridge: use of memory's entities data for vcard:
Goffi <goffi@goffi.org>
parents:
502
diff
changeset
|
631 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
632 def on_presence_update(self, entity, show, priority, statuses, profile): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
633 """Update entity's presence status |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
634 |
1339
18cd46a264e9
quick frontends, primitivus: fixed listener calls (kwargs where forgotten) + fixed presence listener + renamed updatePresence to onPresenceUpdate for consistency with oter listeners
Goffi <goffi@goffi.org>
parents:
1337
diff
changeset
|
635 @param entity(jid.JID): entity updated |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
636 @param show: availability |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
637 @parap priority: resource's priority |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
638 @param statuses: dict of statuses |
1339
18cd46a264e9
quick frontends, primitivus: fixed listener calls (kwargs where forgotten) + fixed presence listener + renamed updatePresence to onPresenceUpdate for consistency with oter listeners
Goffi <goffi@goffi.org>
parents:
1337
diff
changeset
|
639 @param profile: %(doc_profile)s |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
640 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
641 # FIXME: cache modification should be done with set_contact |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
642 # the resources/presence handling logic should be moved there |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
643 was_visible = self.entity_visible(entity.bare) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
644 cache = self.getCache(entity, create_if_not_found=True) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
645 if show == C.PRESENCE_UNAVAILABLE: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
646 if not entity.resource: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
647 cache[C.CONTACT_RESOURCES].clear() |
1391
1276e6a0716b
quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
648 cache[C.CONTACT_MAIN_RESOURCE] = None |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
649 else: |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
650 try: |
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
651 del cache[C.CONTACT_RESOURCES][entity.resource] |
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
652 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
653 log.error( |
3028 | 654 "Presence unavailable received " |
655 "for an unknown resource [{}]".format(entity) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
656 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
657 if not cache[C.CONTACT_RESOURCES]: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
658 cache[C.CONTACT_MAIN_RESOURCE] = None |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
659 else: |
1983
8c4087fd034a
quick_frontend: allow presence of entities without resource
Goffi <goffi@goffi.org>
parents:
1972
diff
changeset
|
660 if not entity.resource: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
661 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
662 _( |
3028 | 663 "received presence from entity " |
664 "without resource: {}".format(entity) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
665 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
666 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
667 resources_data = cache[C.CONTACT_RESOURCES] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
668 resource_data = resources_data.setdefault(entity.resource, {}) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
669 resource_data[C.PRESENCE_SHOW] = show |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
670 resource_data[C.PRESENCE_PRIORITY] = int(priority) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
671 resource_data[C.PRESENCE_STATUSES] = statuses |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
672 |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
673 if entity.bare not in self._specials: |
2082
e8cb9cc09485
quick frontend(contact_list): avoid crash when resource in cache has not priority
Goffi <goffi@goffi.org>
parents:
2065
diff
changeset
|
674 # we may have resources with no priority |
e8cb9cc09485
quick frontend(contact_list): avoid crash when resource in cache has not priority
Goffi <goffi@goffi.org>
parents:
2065
diff
changeset
|
675 # (when a cached value is added for a not connected resource) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
676 priority_resource = max( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
677 resources_data, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
678 key=lambda res: resources_data[res].get( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
679 C.PRESENCE_PRIORITY, -2 ** 32 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
680 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
681 ) |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
682 cache[C.CONTACT_MAIN_RESOURCE] = priority_resource |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
683 if self.entity_visible(entity.bare): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
684 update_type = C.UPDATE_MODIFY if was_visible else C.UPDATE_ADD |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
685 self.update([entity], update_type, self.profile) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
686 elif was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
687 self.update([entity], C.UPDATE_DELETE, self.profile) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
688 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
689 def on_nicknames_update(self, entity, nicknames, profile): |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
690 """Update entity's nicknames |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
691 |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
692 @param entity(jid.JID): entity updated |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
693 @param nicknames(list[unicode]): nicknames of the entity |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
694 @param profile: %(doc_profile)s |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
695 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
696 assert profile == self.profile |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
697 self.set_cache(entity, "nicknames", nicknames) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
698 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
699 def on_notification(self, entity, notif, profile): |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
700 """Update entity with notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
701 |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
702 @param entity(jid.JID): entity updated |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
703 @param notif(dict): notification data |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
704 @param profile: %(doc_profile)s |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
705 """ |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
706 assert profile == self.profile |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
707 if entity is not None and self.entity_visible(entity): |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
708 self.update([entity], C.UPDATE_MODIFY, profile) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
709 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
710 def unselect(self, entity): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
711 """Unselect an entity |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
712 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
713 @param entity(jid.JID): entity to unselect |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
714 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
715 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
716 cache = self._cache[entity.bare] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
717 except: |
3028 | 718 log.error("Try to unselect an entity not in cache") |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
719 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
720 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
721 cache[C.CONTACT_SELECTED].remove(entity.resource) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
722 except KeyError: |
3028 | 723 log.error("Try to unselect a not selected entity") |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
724 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
725 self._selected.remove(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
726 self.update([entity], C.UPDATE_SELECTION) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
727 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
728 def select(self, entity): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
729 """Select an entity |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
730 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
731 @param entity(jid.JID, None): entity to select (resource is significant) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
732 None to unselect all entities |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
733 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
734 if entity is None: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
735 self._selected.clear() |
3028 | 736 for cache in self._cache.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
737 cache[C.CONTACT_SELECTED].clear() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
738 self.update(type_=C.UPDATE_SELECTION, profile=self.profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
739 else: |
3028 | 740 log.debug("select %s" % entity) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
741 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
742 cache = self._cache[entity.bare] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
743 except: |
3028 | 744 log.error("Try to select an entity not in cache") |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
745 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
746 cache[C.CONTACT_SELECTED].add(entity.resource) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
747 self._selected.add(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
748 self.update([entity], C.UPDATE_SELECTION, profile=self.profile) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
749 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
750 def show_offline_contacts(self, show): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
751 """Tell if offline contacts should be shown |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
752 |
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
753 @param show(bool): True if offline contacts should be shown |
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
754 """ |
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
755 assert isinstance(show, bool) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
756 if self.show_disconnected == show: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
757 return |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
758 self.show_disconnected = show |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
759 self.update(type_=C.UPDATE_STRUCTURE, profile=self.profile) |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
760 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
761 def show_empty_groups(self, show): |
1333
7c2289090b9b
quick_frontends (contact list): use of intermediate method for showEmptyGroups and showOfflineMessages to convert bridge values to actual booleans
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
762 assert isinstance(show, bool) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
763 if self._show_empty_groups == show: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
764 return |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
765 self._show_empty_groups = show |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
766 self.update(type_=C.UPDATE_STRUCTURE, profile=self.profile) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
767 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
768 def show_resources(self, show): |
1572
6a6fe840c3a6
quick frontend: fixed resources display in quickContactList
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
769 assert isinstance(show, bool) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
770 if self.show_resources == show: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
771 return |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
772 self.show_resources = show |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
773 self.update(type_=C.UPDATE_STRUCTURE, profile=self.profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
774 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
775 def plug(self): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
776 handler.add_profile(self.profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
777 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
778 def unplug(self): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
779 handler.remove_profile(self.profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
780 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
781 def update(self, entities=None, type_=None, profile=None): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
782 handler.update(entities, type_, profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
783 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
784 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
785 class QuickContactListHandler(object): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
786 def __init__(self, host): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
787 super(QuickContactListHandler, self).__init__() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
788 self.host = host |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
789 global handler |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
790 if handler is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
791 raise exceptions.InternalError( |
3028 | 792 "QuickContactListHandler must be instanciated only once" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
793 ) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
794 handler = self |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
795 self._clist = {} # key: profile, value: ProfileContactList |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
796 self._widgets = set() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
797 self._update_locked = False # se to True to ignore updates |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
798 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
799 def __getitem__(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
800 """Return ProfileContactList instance for the requested profile""" |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
801 return self._clist[profile] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
802 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
803 def __contains__(self, entity): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
804 """Check if entity is in contact list |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
805 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
806 @param entity (jid.JID): jid of the entity (resource is not ignored, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
807 use bare jid if needed) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
808 """ |
3028 | 809 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
810 if entity in contact_list: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
811 return True |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
812 return False |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
813 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
814 @property |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
815 def roster(self): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
816 """Return all the bare JIDs of the roster entities. |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
817 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
818 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
819 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
820 entities = set() |
3028 | 821 for contact_list in self._clist.values(): |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
822 entities.update(contact_list.roster) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
823 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
824 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
825 @property |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
826 def roster_connected(self): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
827 """Return all the bare JIDs of the roster entities that are connected. |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
828 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
829 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
830 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
831 entities = set() |
3028 | 832 for contact_list in self._clist.values(): |
2032
d941fa9954f4
quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents:
2017
diff
changeset
|
833 entities.update(contact_list.roster_connected) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
834 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
835 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
836 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
837 def roster_entities_by_group(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
838 """Return a dictionary binding the roster groups to their entities bare |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
839 JIDs. This also includes the empty group (None key). |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
840 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
841 @return (dict[unicode,set(jid.JID)]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
842 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
843 groups = {} |
3028 | 844 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
845 groups.update(contact_list.roster_entities_by_group) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
846 return groups |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
847 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
848 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
849 def roster_groups_by_entities(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
850 """Return a dictionary binding the entities bare JIDs to their roster |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
851 groups. |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
852 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
853 @return (dict[jid.JID, set(unicode)]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
854 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
855 entities = {} |
3028 | 856 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
857 entities.update(contact_list.roster_groups_by_entities) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
858 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
859 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
860 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
861 def selected(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
862 """Return contacts currently selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
863 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
864 @return (set): set of selected entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
865 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
866 entities = set() |
3028 | 867 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
868 entities.update(contact_list.selected) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
869 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
870 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
871 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
872 def all_iter(self): |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
873 """Return item representation for all entities in cache |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
874 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
875 items are unordered |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
876 """ |
3028 | 877 for profile, contact_list in self._clist.items(): |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
878 for bare_jid, cache in contact_list.all_iter: |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
879 data = cache.copy() |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
880 data[C.CONTACT_PROFILE] = profile |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
881 yield bare_jid, data |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
882 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
883 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
884 def items(self): |
1943 | 885 """Return item representation for visible entities in cache |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
886 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
887 items are unordered |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
888 key: bare jid, value: data |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
889 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
890 items = {} |
3028 | 891 for profile, contact_list in self._clist.items(): |
892 for bare_jid, cache in contact_list.items.items(): | |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
893 data = cache.copy() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
894 items[bare_jid] = data |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
895 data[C.CONTACT_PROFILE] = profile |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
896 return items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
897 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
898 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
899 def items_sorted(self): |
1943 | 900 """Return item representation for visible entities in cache |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
901 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
902 items are ordered using self.items_sort |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
903 key: bare jid, value: data |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
904 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
905 return self.items_sort(self.items) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
906 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
907 def items_sort(self, items): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
908 """sort items |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
909 |
1943 | 910 @param items(dict): items to sort (will be emptied !) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
911 @return (OrderedDict): sorted items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
912 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
913 ordered_items = OrderedDict() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
914 bare_jids = sorted(items.keys()) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
915 for jid_ in bare_jids: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
916 ordered_items[jid_] = items.pop(jid_) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
917 return ordered_items |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
918 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
919 def register(self, widget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
920 """Register a QuickContactList widget |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
921 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
922 This method should only be used in QuickContactList |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
923 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
924 self._widgets.add(widget) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
925 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
926 def unregister(self, widget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
927 """Unregister a QuickContactList widget |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
928 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
929 This method should only be used in QuickContactList |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
930 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
931 self._widgets.remove(widget) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
932 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
933 def add_profiles(self, profiles): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
934 """Add a contact list for plugged profiles |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
935 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
936 @param profile(iterable[unicode]): plugged profiles |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
937 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
938 for profile in profiles: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
939 if profile not in self._clist: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
940 self._clist[profile] = ProfileContactList(profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
941 return [self._clist[profile] for profile in profiles] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
942 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
943 def add_profile(self, profile): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
944 return self.add_profiles([profile])[0] |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
945 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
946 def remove_profiles(self, profiles): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
947 """Remove given unplugged profiles from contact list |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
948 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
949 @param profile(iterable[unicode]): unplugged profiles |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
950 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
951 for profile in profiles: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
952 del self._clist[profile] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
953 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
954 def remove_profile(self, profile): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
955 self.remove_profiles([profile]) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
956 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
957 def get_special_extras(self, special_type=None): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
958 """Return special extras with given type |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
959 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
960 If special_type is None, return all special extras. |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
961 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
962 @param special_type(unicode, None): one of special type |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
963 (e.g. C.CONTACT_SPECIAL_GROUP) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
964 None to return all special extras. |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
965 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
966 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
967 entities = set() |
3028 | 968 for contact_list in self._clist.values(): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
969 entities.update(contact_list.get_special_extras(special_type)) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
970 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
971 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
972 def _contacts_filled(self, profile): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
973 self._to_fill.remove(profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
974 if not self._to_fill: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
975 del self._to_fill |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
976 # we need a full update when all contacts are filled |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
977 self.update() |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
978 self.host.call_listeners("contactsFilled", profile=profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
979 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
980 def fill(self, profile=None): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
981 """Get all contacts from backend, and fill the widget |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
982 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
983 Contacts will be cleared before refilling them |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
984 @param profile(unicode, None): profile to fill |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
985 None to fill all profiles |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
986 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
987 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
988 to_fill = self._to_fill |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
989 except AttributeError: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
990 to_fill = self._to_fill = set() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
991 |
2897
82d8243e6ad1
quick frontend (contact list): fixed profile filtering in fill()
Goffi <goffi@goffi.org>
parents:
2828
diff
changeset
|
992 # we check if profiles have already been filled |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
993 # to void filling them several times |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
994 filled = to_fill.copy() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
995 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
996 if profile is not None: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
997 assert profile in self._clist |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
998 to_fill.add(profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
999 else: |
3028 | 1000 to_fill.update(list(self._clist.keys())) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1001 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1002 remaining = to_fill.difference(filled) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1003 if remaining != to_fill: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1004 log.debug( |
3028 | 1005 "Not re-filling already filled contact list(s) for {}".format( |
1006 ", ".join(to_fill.intersection(filled)) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1007 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1008 ) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1009 for profile in remaining: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1010 self._clist[profile]._fill() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1011 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1012 def clear_contacts(self, keep_cache=False): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1013 """Clear all the contact list |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1014 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1015 @param keep_cache: if True, don't reset the cache |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1016 """ |
3028 | 1017 for contact_list in self._clist.values(): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1018 contact_list.clear_contacts(keep_cache) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1019 # we need a full update |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
1020 self.update() |
1332
0f92b6a150ff
quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents:
1328
diff
changeset
|
1021 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1022 def select(self, entity): |
3028 | 1023 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1024 contact_list.select(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1025 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1026 def unselect(self, entity): |
3028 | 1027 for contact_list in self._clist.values(): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1028 contact_list.select(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1029 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1030 def lock_update(self, locked=True, do_update=True): |
1939
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1031 """Forbid contact list updates |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1032 |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1033 Used mainly while profiles are plugged, as many updates can occurs, causing |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1034 an impact on performances |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1035 @param locked(bool): updates are forbidden if True |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1036 @param do_update(bool): if True, a full update is done after unlocking |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1037 if set to False, widget state can be inconsistent, be sure to know |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1038 what youa re doing! |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1039 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1040 log.debug( |
3028 | 1041 "Contact lists updates are now {}".format( |
1042 "LOCKED" if locked else "UNLOCKED" | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1043 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1044 ) |
1939
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1045 self._update_locked = locked |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1046 if not locked and do_update: |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1047 self.update() |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1048 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1049 def update(self, entities=None, type_=None, profile=None): |
1939
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1050 if not self._update_locked: |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1051 for widget in self._widgets: |
e68483c5a999
quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents:
1938
diff
changeset
|
1052 widget.update(entities, type_, profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1053 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1054 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1055 class QuickContactList(QuickWidget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1056 """This class manage the visual representation of contacts""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1057 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1058 SINGLE = False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1059 PROFILES_MULTIPLE = True |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1060 # Can be linked to no profile (e.g. at the early frontend start) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1061 PROFILES_ALLOW_NONE = True |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1062 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1063 def __init__(self, host, profiles): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1064 super(QuickContactList, self).__init__(host, None, profiles) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1065 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1066 # options |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1067 # for next values, None means use indivual value per profile |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1068 # True or False mean override these values for all profiles |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1069 self.show_disconnected = None # TODO |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1070 self._show_empty_groups = None # TODO |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1071 self.show_resources = None # TODO |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1072 self.show_status = None # TODO |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1073 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1074 def post_init(self): |
2017
7aa58b7a47e2
quick_frontend, primitivus (contact_list): ContactList widget must now call postInit() when ready, to avoid being registered before being constructed
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
1075 """Method to be called by frontend after widget is initialised""" |
7aa58b7a47e2
quick_frontend, primitivus (contact_list): ContactList widget must now call postInit() when ready, to avoid being registered before being constructed
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
1076 handler.register(self) |
7aa58b7a47e2
quick_frontend, primitivus (contact_list): ContactList widget must now call postInit() when ready, to avoid being registered before being constructed
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
1077 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1078 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1079 def all_iter(self): |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1080 return handler.all_iter |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1081 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1082 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1083 def items(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1084 return handler.items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1085 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1086 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1087 def items_sorted(self): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1088 return handler.items_sorted |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1089 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1090 def update(self, entities=None, type_=None, profile=None): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1091 """Update the display when something changed |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1092 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1093 @param entities(iterable[jid.JID], None): updated entities, |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1094 None to update the whole contact list |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1095 @param type_(unicode, None): update type, may be: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1096 - C.UPDATE_DELETE: entity deleted |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1097 - C.UPDATE_MODIFY: entity updated |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1098 - C.UPDATE_ADD: entity added |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1099 - C.UPDATE_SELECTION: selection modified |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
1100 - C.UPDATE_STRUCTURE: organisation of items is modified (not items |
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3189
diff
changeset
|
1101 themselves) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1102 or None for undefined update |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1103 Note that events correspond to addition, modification and deletion |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1104 of items on the whole contact list. If the contact is visible or not |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1105 has no influence on the type_. |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1106 @param profile(unicode, None): profile concerned with the update |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1107 None if all profiles need to be updated |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1108 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1109 raise NotImplementedError |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1110 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1111 def on_delete(self): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
1112 QuickWidget.on_delete(self) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1113 handler.unregister(self) |