annotate sat_frontends/quick_frontend/quick_contact_list.py @ 2845:42380a4f6433

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