annotate sat_frontends/quick_frontend/quick_contact_list.py @ 3195:29d72336a40d

changelog: update
author Goffi <goffi@goffi.org>
date Fri, 28 Feb 2020 18:10:58 +0100
parents 142ecb7f6338
children 6cf4bd6972c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3113
b067736d5099 quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents: 3065
diff changeset
1 #!/usr/bin/env python3
0
goffi@necton2
parents:
diff changeset
2
3113
b067736d5099 quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents: 3065
diff changeset
3 # helper class for making a SàT frontend contact lists
3136
9d0df638c8b4 dates update
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
4 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
9 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
14 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 588
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
18
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
19 """Contact List handling multi profiles at once,
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
20 should replace quick_contact_list module in the future"""
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
21
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 688
diff changeset
22 from sat.core.i18n import _
1009
d1084f7e56a5 quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents: 1000
diff changeset
23 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
24 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
25 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
26 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
27 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
28 from collections import OrderedDict
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
29
2978
bad0b4280b77 quick frontends (contact list): ignore roster entities with a resource:
Goffi <goffi@goffi.org>
parents: 2897
diff changeset
30 log = getLogger(__name__)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
31
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
32 try:
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
33 # FIXME: to be removed when an acceptable solution is here
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
34 str("") # XXX: unicode doesn't exist in pyjamas
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
35 except (TypeError, AttributeError): # Error raised is not the same depending on
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
36 # pyjsbuild options
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
37 # XXX: pyjamas' max doesn't support key argument, so we implement it ourself
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
38 pyjamas_max = max
1391
1276e6a0716b quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
39
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
40 def max(iterable, key):
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
41 iter_cpy = list(iterable)
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
42 iter_cpy.sort(key=key)
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
43 return pyjamas_max(iter_cpy)
0
goffi@necton2
parents:
diff changeset
44
2032
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
45 # next doesn't exist in pyjamas
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
46 def next(iterable, *args):
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
47 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
48 return iterable.__next__()
2032
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
49 except StopIteration as e:
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
50 if args:
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
51 return args[0]
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
52 raise e
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
53
d941fa9954f4 quick frontend (contact): fixed roster and roster_connected in handler + add a next function for pyjamas compatibility
Goffi <goffi@goffi.org>
parents: 2017
diff changeset
54
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
55 handler = None
0
goffi@necton2
parents:
diff changeset
56
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
57
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
58 class ProfileContactList(object):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
59 """Contact list data for a single profile"""
0
goffi@necton2
parents:
diff changeset
60
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
61 def __init__(self, profile):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
62 self.host = handler.host
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
63 self.profile = profile
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
64 # contain all jids in roster or not,
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
65 # bare jids as keys, resources are used in data
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
66 # XXX: we don't mutualise cache, as values may differ
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
67 # for different profiles (e.g. directed presence)
501
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 480
diff changeset
68 self._cache = {}
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
69
2015
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
70 # special entities (groupchat, gateways, etc)
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
71 # may be bare or full jid
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
72 self._specials = set()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
73
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
74 # group data contain jids in groups and misc frontend data
2582
2e6864b1d577 quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
75 # None key is used for jids with no group
1391
1276e6a0716b quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
76 self._groups = {} # groups to group data map
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
77
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
78 # contacts in roster (bare jids)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
79 self._roster = set()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
80
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
81 # selected entities, full jid
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
82 self._selected = set()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
83
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
84 # options
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
85 self.show_disconnected = False
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
86 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
87 self.show_resources = False
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
88 self.show_status = False
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
89 # do we show entities with notifications?
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
90 # if True, entities will be show even if they normally would not
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
91 # (e.g. not in contact list) if they have notifications attached
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
92 self.show_entities_with_notifs = True
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
93
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
94 self.host.bridge.asyncGetParamA(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
95 C.SHOW_EMPTY_GROUPS,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
96 "General",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
97 profile_key=profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
98 callback=self._showEmptyGroups,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
99 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
100
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
101 self.host.bridge.asyncGetParamA(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
102 C.SHOW_OFFLINE_CONTACTS,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
103 "General",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
104 profile_key=profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
105 callback=self._showOfflineContacts,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
106 )
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
107
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
108 # 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
109 # 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
110 # 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
111 self.presenceListener = self.onPresenceUpdate
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
112 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
113 self.nickListener = self.onNickUpdate
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
114 self.host.addListener("nick", self.nickListener, [self.profile])
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
115 self.notifListener = self.onNotification
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
116 self.host.addListener("notification", self.notifListener, [self.profile])
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
117 # 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
118 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
119
2686
ce1e15d59496 quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
120 @property
ce1e15d59496 quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
121 def whoami(self):
ce1e15d59496 quick frontend (contact list): use property to retrieve "whoami" in ProfileContactList:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
122 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
123
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
124 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
125 # Called only by __init__
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
126 # 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
127 # 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
128 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
129
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
130 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
131 # 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
132 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
133
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
134 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
135 """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
136
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
137 An entity can be in contact list even if not in roster
3189
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
138 use isInRoster to check if entity is 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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
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
c74015dc2785 quick_frontend: minor fixes
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
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
c74015dc2785 quick_frontend: minor fixes
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
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
c74015dc2785 quick_frontend: minor fixes
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
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
c74015dc2785 quick_frontend: minor fixes
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
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
c74015dc2785 quick_frontend: minor fixes
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
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
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 111
diff changeset
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
3189
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
368 def isInRoster(self, entity):
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
369 """Tell if an entity is in roster
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
370
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
371 @param entity(jid.JID): jid of the entity
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
372 the bare jid will be used
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
373 """
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
374 return entity.bare in self._roster
142ecb7f6338 quick frontend(contact list): new "isInRoster" method
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
375
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
376 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
377 """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
378
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 @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
380 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
381 @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
382 """
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 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
384 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
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 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
387 """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
388
df5cb9e7d0b7 quick frontend (contact list): added isSpecial and isRoom to quickly now if an entity is specific
Goffi <goffi@goffi.org>
parents: 2120
diff changeset
389 @param entity(jid.JID): jid of the 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
390 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
391 @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
392 @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
393 """
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
394 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
395
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
396 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
397 """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
398
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
399 @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
400 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
401 @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
402 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
403 """
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
404 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
405 self.setCache(entity, C.CONTACT_SPECIAL, special_type)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
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 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
408 """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
409
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
410 @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
411 (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
412 @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
413 @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
414 """
2015
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
415 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
416 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
417 continue
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
418 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
419 special_type is not None
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
420 and self.getCache(entity, C.CONTACT_SPECIAL) != special_type
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
421 ):
2015
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
422 continue
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
423 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
424
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
425 def disconnect(self):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
426 # 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
427 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
428
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
429 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
430 """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
431
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
432 @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
433 """
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
434 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
435 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
436 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
437 self._groups.clear()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
438 self._specials.clear()
1410
e2e75c3c7c7b quick_frontend, primitivus: fixes a couple of issues:
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
439 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
440 self.update()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
441
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
442 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
443 """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
444
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
445 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
446 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
447 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
448 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
449
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
450 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
451 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
452
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
453 @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
454 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
455 @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
456 @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
457 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
458 @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
459 """
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
460 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
461 attributes = {}
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
462
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
463 entity_bare = entity.bare
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
464 # 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
465 # 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
466 # or an UPDATE_DELETE
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
467 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
468
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
469 if in_roster:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
470 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
471
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
472 cache = self._cache.setdefault(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
473 entity_bare,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
474 {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
475 C.CONTACT_RESOURCES: {},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
476 C.CONTACT_MAIN_RESOURCE: None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
477 C.CONTACT_SELECTED: set(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
478 },
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
479 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
480
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
481 # we don't want forbidden data in attributes
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
482 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
483
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
484 # 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
485 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
486 if not groups:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
487 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
488 if C.CONTACT_GROUPS in cache:
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
489 # 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
490 # 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
491 for group in [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
492 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
493 ]:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
494 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
495 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
496 for group in groups:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
497 self._groups.setdefault(group, {}).setdefault("jids", set()).add(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
498 entity_bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
499 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
500
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
501 # special entities management
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
502 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
503 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
504 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
505 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
506 else:
2015
20fb71b656e3 quick_frontend, primitivus (contact_list): improved and simplified handling of "special" entities:
Goffi <goffi@goffi.org>
parents: 1983
diff changeset
507 self._specials.add(entity)
1393
50d5d6325f62 quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents: 1391
diff changeset
508 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
509 if 'nick' in cache:
8990ed9aad31 quick_frontend (contact list): fixed `nick` use for groupchat:
Goffi <goffi@goffi.org>
parents: 2978
diff changeset
510 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
511
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
512 # 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
513 # 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
514 cache_attr = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
515 cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {})
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
516 if entity.resource
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
517 else cache
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
518 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
519 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
520 if value is None:
2120
4d9aeae5d9d0 quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents: 2082
diff changeset
521 # 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
522 try:
4d9aeae5d9d0 quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents: 2082
diff changeset
523 cache_attr[attribute].pop(value)
4d9aeae5d9d0 quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents: 2082
diff changeset
524 except KeyError:
4d9aeae5d9d0 quick frontend (contact list): fixed cached key removal
Goffi <goffi@goffi.org>
parents: 2082
diff changeset
525 pass
2065
f3167c873e7b quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents: 2061
diff changeset
526 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
527 if attribute == "nick" and self.isSpecial(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
528 entity, C.CONTACT_SPECIAL_GROUP
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
529 ):
2582
2e6864b1d577 quick frontend (contact list): don't store "nick" for group contacts:
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
530 # 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
531 # 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
532 # with bare jid which in the case of MUC
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
533 # 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
534 # 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
535 continue
2065
f3167c873e7b quick frontend (contact list): better handling of cache with full jid:
Goffi <goffi@goffi.org>
parents: 2061
diff changeset
536 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
537
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
538 # we can update the display if needed
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
539 if self.entityVisible(entity_bare):
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
540 # 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
541 # else we just update id
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
542 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
543 self.update([entity], update_type, self.profile)
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
544 elif was_visible:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
545 # 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
546 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
547
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
548 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
549 """Tell if the contact should be showed or hidden.
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
550
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
551 @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
552 @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
553 @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
554 """
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
555 try:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
556 show = self.getCache(entity, C.PRESENCE_SHOW)
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
557 except exceptions.NotFound:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
558 return False
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
559
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
560 if check_resource:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
561 selected = self._selected
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
562 else:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
563 selected = {selected.bare for selected in self._selected}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
564 return (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
565 (show is not None and show != C.PRESENCE_UNAVAILABLE)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
566 or self.show_disconnected
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
567 or entity in selected
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
568 or (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
569 self.show_entities_with_notifs
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
570 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
571 )
2828
08b54bf77c54 primitivus(contact list): fixed room not always appearing correctly in contact list
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
572 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
573 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
574
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
575 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
576 """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
577
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
578 @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
579 @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
580 @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
581 """
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
582 # 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
583 for entity in entities:
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
584 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
585 return True
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
586 return False
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
587
1302
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
588 def isEntityInGroup(self, entity, group):
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
589 """Tell if an entity is in a roster group
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
590
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
591 @param entity(jid.JID): jid of the entity
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
592 @param group(unicode): group to check
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
593 @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
594 """
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
595 return entity in self.getGroupData(group, "jids")
447d28b1b4ec quick frontends (QuickContactList): added isEntityInGroup method
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
596
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
597 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
598 """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
599
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
600 @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
601 """
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
602 entity_bare = entity.bare
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
603 was_visible = self.entityVisible(entity_bare)
510
886754295efe quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents: 504
diff changeset
604 try:
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
605 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
606 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
607 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
608 try:
1738
baac0fc5e3ad reverted patch 58ecc0e2e6fc as it may hide an other issue
Goffi <goffi@goffi.org>
parents: 1731
diff changeset
609 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
610 except KeyError:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
611 pass
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
612 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
613 for group in groups:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
614 self._groups[group]["jids"].remove(entity_bare)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
615 if not self._groups[group]["jids"]:
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
616 # FIXME: we use pop because of pyjamas:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
617 # http://wiki.goffi.org/wiki/Issues_with_Pyjamas/en
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
618 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
619 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
620 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
621 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
622 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
623 to_remove.add(set_entity)
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
624 iterable.difference_update(to_remove)
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
625 if was_visible:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
626 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
627
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
628 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
629 """Update entity's presence status
510
886754295efe quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents: 504
diff changeset
630
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
631 @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
632 @param show: availability
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 480
diff changeset
633 @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
634 @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
635 @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
636 """
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
637 # FIXME: cache modification should be done with setContact
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
638 # the resources/presence handling logic should be moved there
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
639 was_visible = self.entityVisible(entity.bare)
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
640 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
641 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
642 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
643 cache[C.CONTACT_RESOURCES].clear()
1391
1276e6a0716b quick_frontend: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
644 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
645 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
646 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
647 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
648 except KeyError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
649 log.error(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
650 "Presence unavailable received "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
651 "for an unknown resource [{}]".format(entity)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
652 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
653 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
654 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
655 else:
1983
8c4087fd034a quick_frontend: allow presence of entities without resource
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
656 if not entity.resource:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
657 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
658 _(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
659 "received presence from entity "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
660 "without resource: {}".format(entity)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
661 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
662 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
663 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
664 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
665 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
666 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
667 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
668
1393
50d5d6325f62 quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents: 1391
diff changeset
669 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
670 # 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
671 # (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
672 priority_resource = max(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
673 resources_data,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
674 key=lambda res: resources_data[res].get(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
675 C.PRESENCE_PRIORITY, -2 ** 32
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
676 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
677 )
1393
50d5d6325f62 quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents: 1391
diff changeset
678 cache[C.CONTACT_MAIN_RESOURCE] = priority_resource
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
679 if self.entityVisible(entity.bare):
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
680 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
681 self.update([entity], update_type, self.profile)
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
682 elif was_visible:
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
683 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
684
1342
e31a07a5614d quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents: 1339
diff changeset
685 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
686 """Update entity's nick
e31a07a5614d quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents: 1339
diff changeset
687
e31a07a5614d quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents: 1339
diff changeset
688 @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
689 @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
690 @param profile: %(doc_profile)s
e31a07a5614d quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents: 1339
diff changeset
691 """
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
692 assert profile == self.profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
693 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
694
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
695 def onNotification(self, entity, notif, profile):
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
696 """Update entity with notification
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
697
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
698 @param entity(jid.JID): entity updated
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
699 @param notif(dict): notification data
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
700 @param profile: %(doc_profile)s
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
701 """
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
702 assert profile == self.profile
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
703 if entity is not None and self.entityVisible(entity):
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
704 self.update([entity], C.UPDATE_MODIFY, profile)
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
705
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
706 def unselect(self, entity):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
707 """Unselect an entity
1342
e31a07a5614d quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents: 1339
diff changeset
708
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
709 @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
710 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
711 try:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
712 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
713 except:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
714 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
715 else:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
716 try:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
717 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
718 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
719 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
720 else:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
721 self._selected.remove(entity)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
722 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
723
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
724 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
725 """Select an entity
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
726
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
727 @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
728 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
729 """
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
730 if entity is None:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
731 self._selected.clear()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
732 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
733 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
734 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
735 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
736 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
737 try:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
738 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
739 except:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
740 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
741 else:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
742 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
743 self._selected.add(entity)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
744 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
745
1229
03661d1b216a primitivus: implement "Show offline contacts" parameter (sync with "DISCONNECTED_HIDE" action key)
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
746 def showOfflineContacts(self, show):
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
747 """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
748
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
749 @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
750 """
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
751 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
752 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
753 return
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
754 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
755 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
756
1230
3abc6563a0d2 primitivus: implement parameter "Show empty groups"
souliane <souliane@mailoo.org>
parents: 1229
diff changeset
757 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
758 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
759 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
760 return
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
761 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
762 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
763
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
764 def showResources(self, show):
1572
6a6fe840c3a6 quick frontend: fixed resources display in quickContactList
Goffi <goffi@goffi.org>
parents: 1462
diff changeset
765 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
766 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
767 return
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1230
diff changeset
768 self.show_resources = show
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
769 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
770
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
771 def plug(self):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
772 handler.addProfile(self.profile)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
773
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
774 def unplug(self):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
775 handler.removeProfile(self.profile)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
776
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
777 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
778 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
779
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
780
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
781 class QuickContactListHandler(object):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
782 def __init__(self, host):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
783 super(QuickContactListHandler, self).__init__()
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
784 self.host = host
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
785 global handler
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
786 if handler is not None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
787 raise exceptions.InternalError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
788 "QuickContactListHandler must be instanciated only once"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
789 )
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
790 handler = self
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
791 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
792 self._widgets = set()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
793 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
794
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
795 def __getitem__(self, profile):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
796 """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
797 return self._clist[profile]
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
798
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
799 def __contains__(self, entity):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
800 """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
801
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
802 @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
803 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
804 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
805 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
806 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
807 return True
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
808 return False
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
809
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
810 @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
811 def roster(self):
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
812 """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
813
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
814 @return (set[jid.JID])
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
815 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
816 entities = set()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
817 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
818 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
819 return entities
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
820
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
821 @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
822 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
823 """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
824
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
825 @return (set[jid.JID])
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
826 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
827 entities = set()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
828 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
829 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
830 return entities
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
831
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
832 @property
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
833 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
834 """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
835 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
836
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
837 @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
838 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
839 groups = {}
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
840 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
841 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
842 return groups
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
843
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
844 @property
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
845 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
846 """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
847 groups.
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
848
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
849 @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
850 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
851 entities = {}
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
852 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
853 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
854 return entities
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
855
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
856 @property
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
857 def selected(self):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
858 """Return contacts currently selected
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
859
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
860 @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
861 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
862 entities = set()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
863 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
864 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
865 return entities
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
866
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
867 @property
2124
cf63e4209643 quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
868 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
869 """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
870
cf63e4209643 quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
871 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
872 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
873 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
874 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
875 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
876 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
877 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
878
cf63e4209643 quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
879 @property
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
880 def items(self):
1943
ccfe45302a5c minor doc fixes
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
881 """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
882
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
883 items are unordered
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
884 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
885 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
886 items = {}
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
887 for profile, contact_list in self._clist.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
888 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
889 data = cache.copy()
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
890 items[bare_jid] = data
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
891 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
892 return items
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
893
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
894 @property
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
895 def items_sorted(self):
1943
ccfe45302a5c minor doc fixes
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
896 """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
897
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
898 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
899 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
900 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
901 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
902
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
903 def items_sort(self, items):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
904 """sort items
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
905
1943
ccfe45302a5c minor doc fixes
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
906 @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
907 @return (OrderedDict): sorted items
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
908 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
909 ordered_items = OrderedDict()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
910 bare_jids = sorted(items.keys())
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
911 for jid_ in bare_jids:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
912 ordered_items[jid_] = items.pop(jid_)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
913 return ordered_items
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
914
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
915 def register(self, widget):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
916 """Register a QuickContactList widget
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
917
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
918 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
919 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
920 self._widgets.add(widget)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
921
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
922 def unregister(self, widget):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
923 """Unregister a QuickContactList widget
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
924
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
925 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
926 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
927 self._widgets.remove(widget)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
928
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
929 def addProfiles(self, profiles):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
930 """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
931
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
932 @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
933 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
934 for profile in profiles:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
935 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
936 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
937 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
938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
939 def addProfile(self, profile):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
940 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
941
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
942 def removeProfiles(self, profiles):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
943 """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
944
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
945 @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
946 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
947 for profile in profiles:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
948 del self._clist[profile]
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
949
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
950 def removeProfile(self, profile):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
951 self.removeProfiles([profile])
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
952
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
953 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
954 """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
955
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
956 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
957
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
958 @param special_type(unicode, None): one of special type
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
959 (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
960 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
961 @return (set[jid.JID])
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
962 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
963 entities = set()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
964 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
965 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
966 return entities
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
967
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
968 def _contactsFilled(self, profile):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
969 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
970 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
971 del self._to_fill
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
972 # 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
973 self.update()
3065
f8e3789912d0 quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
974 self.host.callListeners("contactsFilled", profile=profile)
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
975
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
976 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
977 """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
978
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
979 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
980 @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
981 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
982 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
983 try:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
984 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
985 except AttributeError:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
986 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
987
2897
82d8243e6ad1 quick frontend (contact list): fixed profile filtering in fill()
Goffi <goffi@goffi.org>
parents: 2828
diff changeset
988 # 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
989 # 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
990 filled = to_fill.copy()
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
991
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
992 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
993 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
994 to_fill.add(profile)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
995 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
996 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
997
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
998 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
999 if remaining != to_fill:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1000 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1001 "Not re-filling already filled contact list(s) for {}".format(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1002 ", ".join(to_fill.intersection(filled))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1003 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1004 )
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1005 for profile in remaining:
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1006 self._clist[profile]._fill()
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1007
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1008 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
1009 """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
1010
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1011 @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
1012 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1013 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
1014 contact_list.clearContacts(keep_cache)
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
1015 # 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
1016 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
1017
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1018 def select(self, entity):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1019 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
1020 contact_list.select(entity)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1021
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1022 def unselect(self, entity):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1023 for contact_list in self._clist.values():
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1024 contact_list.select(entity)
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1025
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
1026 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
1027 """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
1028
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
1029 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
1030 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
1031 @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
1032 @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
1033 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
1034 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
1035 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1036 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1037 "Contact lists updates are now {}".format(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2987
diff changeset
1038 "LOCKED" if locked else "UNLOCKED"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1039 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1040 )
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
1041 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
1042 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
1043 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
1044
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1045 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
1046 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
1047 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
1048 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
1049
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1050
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1051 class QuickContactList(QuickWidget):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1052 """This class manage the visual representation of contacts"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1053
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1054 SINGLE = False
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1055 PROFILES_MULTIPLE = True
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
1056 # 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
1057 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
1058
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1059 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
1060 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
1061
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1062 # options
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1063 # 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
1064 # 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
1065 self.show_disconnected = None # TODO
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1066 self.show_empty_groups = None # TODO
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1067 self.show_resources = None # TODO
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2617
diff changeset
1068 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
1069
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
1070 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
1071 """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
1072 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
1073
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1074 @property
2124
cf63e4209643 quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1075 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
1076 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
1077
cf63e4209643 quick frontend(contact list): added all_iter property to get all cached entities
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1078 @property
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1079 def items(self):
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1080 return handler.items
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1081
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1082 @property
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1083 def items_sorted(self):
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
1084 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
1085
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1086 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
1087 """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
1088
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1089 @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
1090 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
1091 @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
1092 - 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
1093 - 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
1094 - 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
1095 - 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
1096 or None for undefined update
2617
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
1097 Note that events correspond to addition, modification and deletion
81b70eeb710f quick_frontend(contact list): refactored update:
Goffi <goffi@goffi.org>
parents: 2582
diff changeset
1098 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
1099 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
1100 @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
1101 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
1102 """
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1103 raise NotImplementedError
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1104
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
1105 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
1106 QuickWidget.onDelete(self)
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1107 handler.unregister(self)