Mercurial > libervia-backend
annotate sat_frontends/quick_frontend/quick_contact_list.py @ 3060:730bbed77a89
plugin XEP-0045: join / MAM history improvements:
- fixed use of history_d deferred so MAM history is stored in database as soon as possible
and in right order
- get MAM history with pages of 20 messages instead of 100
- if a message can't be parsed, an error message is logged (with a dump of the stanza),
and the message is ignored, avoiding a crash and the impossibility the join the room at
all
- a new `mucRoomPrepareJoin` signal, containing room jid and profile, is sent when a room
joining is started, this allow better UX as the frontend can show the room immediately,
and lock it with a waiting message until it is fully available. The `mucRoomJoined` is
still sent when the room is fully joined/avaiable, meaning that the frontend can unlock
it and let the user interact with it
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 18 Oct 2019 14:45:07 +0200 |
parents | ab2696e34d29 |
children | f8e3789912d0 |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
1 #!/usr/bin/env python2 |
0 | 2 # -*- coding: utf-8 -*- |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
4 # helper class for making a SAT frontend |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
0 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
7 # 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
|
8 # 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
|
9 # 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
|
10 # (at your option) any later version. |
0 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
12 # 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
|
13 # 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
|
14 # 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
|
15 # GNU Affero General Public License for more details. |
0 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
588
diff
changeset
|
17 # 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
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 19 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
20 """Contact List handling multi profiles at once, |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
21 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
|
22 |
771 | 23 from sat.core.i18n import _ |
1009
d1084f7e56a5
quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
24 from sat.core.log import getLogger |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
25 from sat.core import exceptions |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
26 from sat_frontends.quick_frontend.quick_widgets import QuickWidget |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
27 from sat_frontends.quick_frontend.constants import Const as C |
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
|
28 from sat_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
|
29 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
|
30 |
2978
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
31 log = getLogger(__name__) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
32 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
33 try: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
34 # FIXME: to be removed when an acceptable solution is here |
3028 | 35 str("") # XXX: unicode doesn't exist in pyjamas |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
36 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
|
37 # pyjsbuild options |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
38 # 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
|
39 pyjamas_max = max |
1391
1276e6a0716b
quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
40 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
41 def max(iterable, key): |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
42 iter_cpy = list(iterable) |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
43 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
|
44 return pyjamas_max(iter_cpy) |
0 | 45 |
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
|
46 # 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
|
47 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
|
48 try: |
3028 | 49 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
|
50 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
|
51 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
|
52 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
|
53 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
|
54 |
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
|
55 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
56 handler = None |
0 | 57 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
58 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
59 class ProfileContactList(object): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
60 """Contact list data for a single profile""" |
0 | 61 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
62 def __init__(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 self.host = handler.host |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
64 self.profile = profile |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
65 # 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
|
66 # 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
|
67 # 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
|
68 # 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
|
69 self._cache = {} |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
70 |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
71 # 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
|
72 # 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
|
73 self._specials = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
74 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
75 # 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
|
76 # 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
|
77 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
|
78 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
79 # 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
|
80 self._roster = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
81 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
82 # 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
|
83 self._selected = set() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
84 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
85 # options |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
86 self.show_disconnected = False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
87 self.show_empty_groups = True |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
88 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
|
89 self.show_status = False |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
90 # do we show entities with notifications? |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
91 # 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
|
92 # (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
|
93 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
|
94 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
95 self.host.bridge.asyncGetParamA( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
96 C.SHOW_EMPTY_GROUPS, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
97 "General", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
98 profile_key=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
99 callback=self._showEmptyGroups, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
100 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
101 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
102 self.host.bridge.asyncGetParamA( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
103 C.SHOW_OFFLINE_CONTACTS, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
104 "General", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
105 profile_key=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
106 callback=self._showOfflineContacts, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
107 ) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
108 |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
109 # FIXME: workaround for a pyjamas issue: calling hash on a class method always |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
110 # return a different value if that method is defined directly within the |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
111 # class (with the "def" keyword) |
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
|
112 self.presenceListener = self.onPresenceUpdate |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
113 self.host.addListener("presence", self.presenceListener, [self.profile]) |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
114 self.nickListener = self.onNickUpdate |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
115 self.host.addListener("nick", self.nickListener, [self.profile]) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
116 self.notifListener = self.onNotification |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
117 self.host.addListener("notification", self.notifListener, [self.profile]) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
118 # notifListener only update the entity, so we can re-use it |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
119 self.host.addListener("notificationsClear", self.notifListener, [self.profile]) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
120 |
2686
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
121 @property |
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
122 def whoami(self): |
ce1e15d59496
quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
123 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
|
124 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
125 def _showEmptyGroups(self, show_str): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
126 # Called only by __init__ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
127 # 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
|
128 # handler when all profiles are ready |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
129 self.showEmptyGroups(C.bool(show_str)) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
130 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
131 def _showOfflineContacts(self, show_str): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
132 # same comments as for _showEmptyGroups |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
133 self.showOfflineContacts(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
|
134 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
135 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
|
136 """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
|
137 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
138 An entity can be in contact list even if not in roster |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
139 @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
|
140 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
|
141 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
142 if entity.resource: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
143 try: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
144 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
|
145 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
|
146 return False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
147 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
|
148 |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
149 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
150 def roster(self): |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
151 """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
|
152 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
153 @return (set[jid.JID]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
154 """ |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
155 return self._roster |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
156 |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
157 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
158 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
|
159 """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
|
160 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
161 @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
|
162 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
163 return set( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
164 [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
165 entity |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
166 for entity in self._roster |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
167 if self.getCache(entity, C.PRESENCE_SHOW) is not None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
168 ] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
169 ) |
1328
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
170 |
7a3a232d4938
quick_frontend (quick_contact_list): add property roster_entities_connected and method getSpecials
souliane <souliane@mailoo.org>
parents:
1306
diff
changeset
|
171 @property |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
172 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
|
173 """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
|
174 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
175 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
|
176 @return (dict[unicode,set(jid.JID)]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
177 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
178 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
|
179 |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
180 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
181 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
|
182 """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
|
183 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
184 @return (dict[jid.JID, set(unicode)]) |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
185 """ |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
186 result = {} |
3028 | 187 for group, data in self._groups.items(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
188 for entity in data["jids"]: |
1297
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
189 result.setdefault(entity, set()).add(group) |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
190 return result |
ef7e8e23b353
quick_frontend: add some properties for QuickContactList
souliane <souliane@mailoo.org>
parents:
1290
diff
changeset
|
191 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
192 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
193 def selected(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
194 """Return contacts currently selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
195 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
196 @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
|
197 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
198 return self._selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
199 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
200 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
201 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
|
202 """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
|
203 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
204 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
|
205 """ |
3028 | 206 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
|
207 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
208 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
209 def items(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
210 """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
|
211 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
212 entities are not sorted |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
213 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
|
214 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
215 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
216 jid_: cache |
3028 | 217 for jid_, cache in self._cache.items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
218 if self.entityVisible(jid_) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
219 } |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
220 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
221 def getItem(self, entity): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
222 """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
|
223 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
224 @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
|
225 @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
|
226 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
227 return self._cache[entity] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
228 |
1462 | 229 def _gotContacts(self, contacts): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
230 """Add contacts and notice parent that contacts are filled |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
231 |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
232 Called during initial contact list filling |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
233 @param contacts(tuple): all contacts |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
234 """ |
1462 | 235 for contact in contacts: |
2978
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
236 entity = jid.JID(contact[0]) |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
237 if entity.resource: |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
238 # 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
|
239 # will cause troubles |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
240 log.warning( |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
241 "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
|
242 .format(entity=entity)) |
bad0b4280b77
quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents:
2897
diff
changeset
|
243 continue |
1462 | 244 self.host.newContactHandler(*contact, profile=self.profile) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
245 handler._contactsFilled(self.profile) |
1462 | 246 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
247 def _fill(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
248 """Get all contacts from backend |
1429
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
249 |
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
250 Contacts will be cleared before refilling them |
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1428
diff
changeset
|
251 """ |
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
|
252 self.clearContacts(keep_cache=True) |
1462 | 253 self.host.bridge.getContacts(self.profile, callback=self._gotContacts) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
254 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
255 def fill(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
256 handler.fill(self.profile) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
257 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
258 def getCache(self, entity, name=None, bare_default=True, create_if_not_found=False): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
259 """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
|
260 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
261 @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
|
262 (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
|
263 if a resource specific information is requested: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
264 - 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
|
265 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
|
266 - 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
|
267 @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
|
268 @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
|
269 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
|
270 the requested resource. |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
271 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
|
272 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
|
273 @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
|
274 in cache |
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
|
275 @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
|
276 @raise NotFound: entity 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: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
288 self.setContact(entity) |
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: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
294 # 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
|
295 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
|
296 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
297 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
|
298 # 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
|
299 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
|
300 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
|
301 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
|
302 # 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
|
303 # 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
309 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
|
310 # TODO: manage main language for statuses |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
311 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
|
312 |
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
|
313 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
|
314 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
|
315 return cache[C.CONTACT_RESOURCES][entity.resource][name] |
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
|
316 except KeyError: |
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
|
317 if bare_default is None: |
3970ebcf8830
quick frontend (contact list): bare_default in getCache now default to True, plus added None:
Goffi <goffi@goffi.org>
parents:
2121
diff
changeset
|
318 bare_default = not self.isRoom(entity.bare) |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
319 if not bare_default: |
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
320 return 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
|
321 |
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
|
322 try: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
323 return cache[name] |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
324 except KeyError: |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
325 return None |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
326 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
327 def setCache(self, entity, name, value): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
328 """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
|
329 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
330 @param entity(JID): entity to update |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
331 @param name(unicode): value to set or update |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
332 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
333 self.setContact(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
|
334 |
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
|
335 def getFullJid(self, entity): |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
336 """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
|
337 |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
338 @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
|
339 @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
|
340 @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
|
341 """ |
15e177584d82
quick frontends(contact list): added a getFullJid method to add resource to a bare jid
Goffi <goffi@goffi.org>
parents:
1333
diff
changeset
|
342 if entity.resource: |
3028 | 343 raise ValueError("getFullJid 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
|
344 main_resource = self.getCache(entity, C.CONTACT_MAIN_RESOURCE) |
3028 | 345 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
|
346 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
347 def setGroupData(self, group, name, value): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
348 """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
|
349 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
350 @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
|
351 @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
|
352 @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
|
353 """ |
2828
08b54bf77c54
primitivus(contact list): fixed room not always appearing correctly in contact list
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
354 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
|
355 self._groups[group][name] = value |
124 | 356 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
357 def getGroupData(self, group, name=None): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
358 """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
|
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 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
|
362 @return: registered value |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
363 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
364 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
|
365 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
|
366 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
|
367 |
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
|
368 def isRoom(self, 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
|
369 """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
|
370 |
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
|
371 @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
|
372 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
|
373 @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
|
374 """ |
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
|
375 assert entity.resource is None # FIXME: this may change when MIX will be handled |
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
|
376 return self.isSpecial(entity, 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
|
377 |
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
|
378 def isSpecial(self, entity, 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
|
379 """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
|
380 |
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
|
381 @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
|
382 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
|
383 @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
|
384 @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
|
385 """ |
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
|
386 return self.getCache(entity, C.CONTACT_SPECIAL) == 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
|
387 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
388 def setSpecial(self, entity, special_type): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
389 """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
|
390 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
391 @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
|
392 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
|
393 @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
|
394 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
|
395 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
396 assert special_type in C.CONTACT_SPECIAL_ALLOWED + (None,) |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
397 self.setCache(entity, C.CONTACT_SPECIAL, special_type) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
398 |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
399 def getSpecials(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
|
400 """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
|
401 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
402 @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
|
403 (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
|
404 @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
|
405 @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
|
406 """ |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
407 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
|
408 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
|
409 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
410 if ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
411 special_type is not None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
412 and self.getCache(entity, C.CONTACT_SPECIAL) != special_type |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
413 ): |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
414 continue |
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
415 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
|
416 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
417 def disconnect(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
418 # for now we just clear contacts on disconnect |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
419 self.clearContacts() |
1428
0e518415d03a
display the resource in the chat dialog when printing a private MUC message
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
420 |
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
|
421 def clearContacts(self, keep_cache=False): |
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
|
422 """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
|
423 |
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
|
424 @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
|
425 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
426 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
|
427 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
|
428 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
|
429 self._groups.clear() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
430 self._specials.clear() |
1410
e2e75c3c7c7b
quick_frontend, primitivus: fixes a couple of issues:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
431 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
|
432 self.update() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
433 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
434 def setContact(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
|
435 """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
|
436 |
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
|
437 This method can be called with groups=None for the purpose of updating |
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
|
438 the contact's attributes (e.g. nickname). In that case, the groups |
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
|
439 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
|
440 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
|
441 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
442 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
|
443 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
|
444 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
445 @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
|
446 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
|
447 @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
|
448 @param attributes (dict): attibutes of the added jid or to update |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
449 if attribute value is None, it will be removed |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
450 @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
|
451 """ |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
452 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
|
453 attributes = {} |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
454 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
455 entity_bare = entity.bare |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
456 # 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
|
457 # 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
|
458 # or an UPDATE_DELETE |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
459 was_visible = self.entityVisible(entity_bare) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
460 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
461 if in_roster: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
462 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
|
463 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
464 cache = self._cache.setdefault( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
465 entity_bare, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
466 { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
467 C.CONTACT_RESOURCES: {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
468 C.CONTACT_MAIN_RESOURCE: None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
469 C.CONTACT_SELECTED: set(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
470 }, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
471 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
472 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
473 # we don't want forbidden data in attributes |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
474 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
|
475 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
476 # 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
|
477 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
|
478 if not groups: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
479 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
|
480 if C.CONTACT_GROUPS in cache: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
481 # 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
|
482 # 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
|
483 for group in [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
484 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
|
485 ]: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
486 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
|
487 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
|
488 for group in groups: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
489 self._groups.setdefault(group, {}).setdefault("jids", set()).add( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
490 entity_bare |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
491 ) |
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 # special entities management |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
494 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
|
495 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
|
496 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
|
497 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
|
498 else: |
2015
20fb71b656e3
quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents:
1983
diff
changeset
|
499 self._specials.add(entity) |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
500 cache[C.CONTACT_MAIN_RESOURCE] = None |
2987
8990ed9aad31
quick_frontend (contact list): fixed `nick` use for groupchat:
Goffi <goffi@goffi.org>
parents:
2978
diff
changeset
|
501 if 'nick' in cache: |
8990ed9aad31
quick_frontend (contact list): fixed `nick` use for groupchat:
Goffi <goffi@goffi.org>
parents:
2978
diff
changeset
|
502 del cache['nick'] |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
503 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
504 # 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
|
505 # 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
|
506 cache_attr = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
507 cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {}) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
508 if entity.resource |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
509 else cache |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
510 ) |
3028 | 511 for attribute, value in attributes.items(): |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
512 if value is None: |
2120
4d9aeae5d9d0
quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents:
2082
diff
changeset
|
513 # XXX: pyjamas hack: we need to use pop instead of del |
4d9aeae5d9d0
quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents:
2082
diff
changeset
|
514 try: |
4d9aeae5d9d0
quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents:
2082
diff
changeset
|
515 cache_attr[attribute].pop(value) |
4d9aeae5d9d0
quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents:
2082
diff
changeset
|
516 except KeyError: |
4d9aeae5d9d0
quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents:
2082
diff
changeset
|
517 pass |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
518 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
519 if attribute == "nick" and self.isSpecial( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
520 entity, C.CONTACT_SPECIAL_GROUP |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
521 ): |
2582
2e6864b1d577
quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
522 # we don't want to keep nick for MUC rooms |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
523 # FIXME: this is here as plugin XEP-0054 can link resource's nick |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
524 # with bare jid which in the case of MUC |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
525 # set the nick for the whole MUC |
2582
2e6864b1d577
quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
526 # resulting in bad name displayed in some frontends |
2e6864b1d577
quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
527 continue |
2065
f3167c873e7b
quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents:
2061
diff
changeset
|
528 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
|
529 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
530 # we can update the display if needed |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
531 if self.entityVisible(entity_bare): |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
532 # 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
|
533 # else we just update id |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
534 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
|
535 self.update([entity], update_type, self.profile) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
536 elif was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
537 # 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
|
538 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
|
539 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
540 def entityVisible(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
|
541 """Tell if the contact should be showed or hidden. |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
542 |
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
|
543 @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
|
544 @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
|
545 @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
|
546 """ |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
547 try: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
548 show = self.getCache(entity, C.PRESENCE_SHOW) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
549 except exceptions.NotFound: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
550 return False |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
551 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
552 if check_resource: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
553 selected = self._selected |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
554 else: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
555 selected = {selected.bare for selected in self._selected} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
556 return ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
557 (show is not None and show != C.PRESENCE_UNAVAILABLE) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
558 or self.show_disconnected |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
559 or entity in selected |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
560 or ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
561 self.show_entities_with_notifs |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
562 and next(self.host.getNotifs(entity.bare, profile=self.profile), None) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
563 ) |
2828
08b54bf77c54
primitivus(contact list): fixed room not always appearing correctly in contact list
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
564 or entity.resource is None and self.isRoom(entity.bare) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
565 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
566 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
567 def anyEntityVisible(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
|
568 """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
|
569 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
570 @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
|
571 @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
|
572 @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
|
573 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
574 # 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
|
575 for entity in entities: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
576 if self.entityVisible(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
|
577 return True |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
578 return False |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
579 |
1302
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
580 def isEntityInGroup(self, entity, group): |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
581 """Tell if an entity is in a roster group |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
582 |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
583 @param entity(jid.JID): jid of the entity |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
584 @param group(unicode): group to check |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
585 @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
|
586 """ |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
587 return entity in self.getGroupData(group, "jids") |
447d28b1b4ec
quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
588 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
589 def removeContact(self, entity): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
590 """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
|
591 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
592 @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
|
593 """ |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
594 entity_bare = entity.bare |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
595 was_visible = self.entityVisible(entity_bare) |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
596 try: |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
597 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
|
598 except KeyError: |
3028 | 599 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
|
600 try: |
1738
baac0fc5e3ad
reverted patch 58ecc0e2e6fc as it may hide an other issue
Goffi <goffi@goffi.org>
parents:
1731
diff
changeset
|
601 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
|
602 except KeyError: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
603 pass |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
604 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
|
605 for group in groups: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
606 self._groups[group]["jids"].remove(entity_bare) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
607 if not self._groups[group]["jids"]: |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
608 # FIXME: we use pop because of pyjamas: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
609 # http://wiki.goffi.org/wiki/Issues_with_Pyjamas/en |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
610 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
|
611 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
|
612 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
|
613 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
|
614 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
|
615 to_remove.add(set_entity) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
616 iterable.difference_update(to_remove) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
617 if was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
618 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
|
619 |
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
|
620 def onPresenceUpdate(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
|
621 """Update entity's presence status |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
622 |
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
|
623 @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
|
624 @param show: availability |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
625 @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
|
626 @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
|
627 @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
|
628 """ |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
629 # FIXME: cache modification should be done with setContact |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
630 # the resources/presence handling logic should be moved there |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
631 was_visible = self.entityVisible(entity.bare) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
632 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
|
633 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
|
634 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
|
635 cache[C.CONTACT_RESOURCES].clear() |
1391
1276e6a0716b
quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
636 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
|
637 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
|
638 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
|
639 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
|
640 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
641 log.error( |
3028 | 642 "Presence unavailable received " |
643 "for an unknown resource [{}]".format(entity) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
644 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
645 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
|
646 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
|
647 else: |
1983
8c4087fd034a
quick_frontend: allow presence of entities without resource
Goffi <goffi@goffi.org>
parents:
1972
diff
changeset
|
648 if not entity.resource: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
649 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
650 _( |
3028 | 651 "received presence from entity " |
652 "without resource: {}".format(entity) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
653 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
654 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
655 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
|
656 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
|
657 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
|
658 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
|
659 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
|
660 |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
661 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
|
662 # 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
|
663 # (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
|
664 priority_resource = max( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
665 resources_data, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
666 key=lambda res: resources_data[res].get( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
667 C.PRESENCE_PRIORITY, -2 ** 32 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
668 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
669 ) |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
670 cache[C.CONTACT_MAIN_RESOURCE] = priority_resource |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
671 if self.entityVisible(entity.bare): |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
672 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
|
673 self.update([entity], update_type, self.profile) |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
674 elif was_visible: |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
675 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
|
676 |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
677 def onNickUpdate(self, entity, new_nick, profile): |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
678 """Update entity's nick |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
679 |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
680 @param entity(jid.JID): entity updated |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
681 @param new_nick(unicode): new nick of the entity |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
682 @param profile: %(doc_profile)s |
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
683 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
684 assert profile == self.profile |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
685 self.setCache(entity, "nick", new_nick) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
686 |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
687 def onNotification(self, entity, notif, profile): |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
688 """Update entity with notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
689 |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
690 @param entity(jid.JID): entity updated |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
691 @param notif(dict): notification data |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
692 @param profile: %(doc_profile)s |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
693 """ |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
694 assert profile == self.profile |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
695 if entity is not None and self.entityVisible(entity): |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
696 self.update([entity], C.UPDATE_MODIFY, profile) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
697 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
698 def unselect(self, entity): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
699 """Unselect an entity |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
700 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
701 @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
|
702 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
703 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
704 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
|
705 except: |
3028 | 706 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
|
707 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
708 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
709 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
|
710 except KeyError: |
3028 | 711 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
|
712 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
713 self._selected.remove(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
714 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
|
715 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
716 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
|
717 """Select an entity |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
718 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
719 @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
|
720 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
|
721 """ |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
722 if entity is None: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
723 self._selected.clear() |
3028 | 724 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
|
725 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
|
726 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
|
727 else: |
3028 | 728 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
|
729 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
730 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
|
731 except: |
3028 | 732 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
|
733 else: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
734 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
|
735 self._selected.add(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
736 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
|
737 |
1229
03661d1b216a
primitivus: implement "Show offline contacts" parameter (sync with "DISCONNECTED_HIDE" action key)
souliane <souliane@mailoo.org>
parents:
1058
diff
changeset
|
738 def showOfflineContacts(self, show): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
739 """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
|
740 |
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
|
741 @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
|
742 """ |
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
|
743 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
|
744 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
|
745 return |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
746 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
|
747 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
|
748 |
1230
3abc6563a0d2
primitivus: implement parameter "Show empty groups"
souliane <souliane@mailoo.org>
parents:
1229
diff
changeset
|
749 def showEmptyGroups(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
|
750 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
|
751 if self.show_empty_groups == show: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
752 return |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
753 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
|
754 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
|
755 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
756 def showResources(self, show): |
1572
6a6fe840c3a6
quick frontend: fixed resources display in quickContactList
Goffi <goffi@goffi.org>
parents:
1462
diff
changeset
|
757 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
|
758 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
|
759 return |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1230
diff
changeset
|
760 self.show_resources = show |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
761 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
|
762 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
763 def plug(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
764 handler.addProfile(self.profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
765 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
766 def unplug(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
767 handler.removeProfile(self.profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
768 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
769 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
|
770 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
|
771 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
772 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
773 class QuickContactListHandler(object): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
774 def __init__(self, host): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
775 super(QuickContactListHandler, self).__init__() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
776 self.host = host |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
777 global handler |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
778 if handler is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
779 raise exceptions.InternalError( |
3028 | 780 "QuickContactListHandler must be instanciated only once" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
781 ) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
782 handler = self |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
783 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
|
784 self._widgets = set() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
785 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
|
786 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
787 def __getitem__(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
788 """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
|
789 return self._clist[profile] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
790 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
791 def __contains__(self, entity): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
792 """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
|
793 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
794 @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
|
795 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
|
796 """ |
3028 | 797 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
|
798 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
|
799 return True |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
800 return False |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
801 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
802 @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
|
803 def roster(self): |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
804 """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
|
805 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
806 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
807 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
808 entities = set() |
3028 | 809 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
|
810 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
|
811 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
812 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
813 @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
|
814 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
|
815 """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
|
816 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
817 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
818 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
819 entities = set() |
3028 | 820 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
|
821 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
|
822 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
823 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
824 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
825 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
|
826 """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
|
827 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
|
828 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
829 @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
|
830 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
831 groups = {} |
3028 | 832 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
|
833 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
|
834 return groups |
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_groups_by_entities(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 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
|
839 groups. |
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[jid.JID, set(unicode)]) |
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 entities = {} |
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 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
|
846 return entities |
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 selected(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
850 """Return contacts currently selected |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
851 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
852 @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
|
853 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
854 entities = set() |
3028 | 855 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
|
856 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
|
857 return entities |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
858 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
859 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
860 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
|
861 """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
|
862 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
863 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
|
864 """ |
3028 | 865 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
|
866 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
|
867 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
|
868 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
|
869 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
|
870 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
871 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
872 def items(self): |
1943 | 873 """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
|
874 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
875 items are unordered |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
876 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
|
877 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
878 items = {} |
3028 | 879 for profile, contact_list in self._clist.items(): |
880 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
|
881 data = cache.copy() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
882 items[bare_jid] = data |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
883 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
|
884 return items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
885 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
886 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
887 def items_sorted(self): |
1943 | 888 """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
|
889 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
890 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
|
891 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
|
892 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
893 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
|
894 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
895 def items_sort(self, items): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
896 """sort items |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
897 |
1943 | 898 @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
|
899 @return (OrderedDict): sorted items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
900 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
901 ordered_items = OrderedDict() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
902 bare_jids = sorted(items.keys()) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
903 for jid_ in bare_jids: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
904 ordered_items[jid_] = items.pop(jid_) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
905 return ordered_items |
1938
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 register(self, widget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
908 """Register a QuickContactList widget |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
909 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
910 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
|
911 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
912 self._widgets.add(widget) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
913 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
914 def unregister(self, widget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
915 """Unregister a QuickContactList widget |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
916 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
917 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
|
918 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
919 self._widgets.remove(widget) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
920 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
921 def addProfiles(self, profiles): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
922 """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
|
923 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
924 @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
|
925 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
926 for profile in profiles: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
927 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
|
928 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
|
929 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
|
930 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
931 def addProfile(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
932 return self.addProfiles([profile])[0] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
933 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
934 def removeProfiles(self, profiles): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
935 """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
|
936 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
937 @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
|
938 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
939 for profile in profiles: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
940 del self._clist[profile] |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
941 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
942 def removeProfile(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
943 self.removeProfiles([profile]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
944 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
945 def getSpecialExtras(self, special_type=None): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
946 """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
|
947 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
948 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
|
949 |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
950 @param special_type(unicode, None): one of special type |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
951 (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
|
952 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
|
953 @return (set[jid.JID]) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
954 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
955 entities = set() |
3028 | 956 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
|
957 entities.update(contact_list.getSpecialExtras(special_type)) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
958 return entities |
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 def _contactsFilled(self, profile): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
961 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
|
962 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
|
963 del self._to_fill |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
964 # 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
|
965 self.update() |
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 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
|
968 """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
|
969 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
970 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
|
971 @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
|
972 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
|
973 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
974 try: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
975 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
|
976 except AttributeError: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
977 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
|
978 |
2897
82d8243e6ad1
quick frontend (contact list): fixed profile filtering in fill()
Goffi <goffi@goffi.org>
parents:
2828
diff
changeset
|
979 # 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
|
980 # 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
|
981 filled = to_fill.copy() |
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 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
|
984 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
|
985 to_fill.add(profile) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
986 else: |
3028 | 987 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
|
988 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
989 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
|
990 if remaining != to_fill: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
991 log.debug( |
3028 | 992 "Not re-filling already filled contact list(s) for {}".format( |
993 ", ".join(to_fill.intersection(filled)) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
994 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
995 ) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
996 for profile in remaining: |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
997 self._clist[profile]._fill() |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
998 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
999 def clearContacts(self, keep_cache=False): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1000 """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
|
1001 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1002 @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
|
1003 """ |
3028 | 1004 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
|
1005 contact_list.clearContacts(keep_cache) |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1006 # 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
|
1007 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
|
1008 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1009 def select(self, entity): |
3028 | 1010 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
|
1011 contact_list.select(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1012 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1013 def unselect(self, entity): |
3028 | 1014 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
|
1015 contact_list.select(entity) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1016 |
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
|
1017 def lockUpdate(self, locked=True, do_update=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
|
1018 """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
|
1019 |
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
|
1020 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
|
1021 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
|
1022 @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
|
1023 @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
|
1024 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
|
1025 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
|
1026 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1027 log.debug( |
3028 | 1028 "Contact lists updates are now {}".format( |
1029 "LOCKED" if locked else "UNLOCKED" | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1030 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1031 ) |
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
|
1032 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
|
1033 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
|
1034 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
|
1035 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1036 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
|
1037 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
|
1038 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
|
1039 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
|
1040 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1041 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1042 class QuickContactList(QuickWidget): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1043 """This class manage the visual representation of contacts""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1044 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1045 SINGLE = False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1046 PROFILES_MULTIPLE = True |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1047 # 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
|
1048 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
|
1049 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1050 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
|
1051 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
|
1052 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1053 # options |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1054 # 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
|
1055 # 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
|
1056 self.show_disconnected = None # TODO |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1057 self.show_empty_groups = None # TODO |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1058 self.show_resources = None # TODO |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2617
diff
changeset
|
1059 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
|
1060 |
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
|
1061 def postInit(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
|
1062 """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
|
1063 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
|
1064 |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1065 @property |
2124
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1066 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
|
1067 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
|
1068 |
cf63e4209643
quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents:
2123
diff
changeset
|
1069 @property |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1070 def items(self): |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1071 return handler.items |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1072 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1073 @property |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1074 def items_sorted(self): |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1075 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
|
1076 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1077 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
|
1078 """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
|
1079 |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1080 @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
|
1081 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
|
1082 @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
|
1083 - 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
|
1084 - 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
|
1085 - 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
|
1086 - C.UPDATE_SELECTION: selection modified |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1087 or None for undefined update |
2617
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1088 Note that events correspond to addition, modification and deletion |
81b70eeb710f
quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents:
2582
diff
changeset
|
1089 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
|
1090 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
|
1091 @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
|
1092 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
|
1093 """ |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1094 raise NotImplementedError |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1095 |
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
|
1096 def onDelete(self): |
0f92b6a150ff
quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents:
1328
diff
changeset
|
1097 QuickWidget.onDelete(self) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1098 handler.unregister(self) |