annotate cagou/core/common.py @ 475:c35aa683fa2d

/!\ package is being renamed to libervia-desktop following global name change /!\
author Goffi <goffi@goffi.org>
date Fri, 18 Jun 2021 16:36:39 +0200
parents 3c9ba4a694ef
children 203755bbe0fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
1 #!/usr/bin/env python3
26
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
2
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client
461
3c9ba4a694ef dates update
Goffi <goffi@goffi.org>
parents: 459
diff changeset
4 # Copyright (C) 2016-2021 Jérôme Poisson (goffi@goffi.org)
26
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
5
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
10
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
15
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
18
237
059c5b39032d plugin file sharing: moved common discovery widgets to new core.common_widgets module
Goffi <goffi@goffi.org>
parents: 220
diff changeset
19 """common simple widgets"""
26
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
20
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
21 import json
405
84ff5c917064 widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents: 404
diff changeset
22 from functools import partial, total_ordering
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
23 from kivy.uix.widget import Widget
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
24 from kivy.uix.label import Label
26
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from kivy.uix.behaviors import ButtonBehavior
193
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
26 from kivy.uix.behaviors import ToggleButtonBehavior
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
27 from kivy.uix.stacklayout import StackLayout
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
28 from kivy.uix.boxlayout import BoxLayout
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
29 from kivy.uix.scrollview import ScrollView
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
30 from kivy.event import EventDispatcher
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
31 from kivy.metrics import dp
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
32 from kivy import properties
458
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
33 from sat.core.i18n import _
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
34 from sat.core import log as logging
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
35 from sat.tools.common import data_format
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
36 from sat_frontends.quick_frontend import quick_chat
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
37 from .constants import Const as C
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
38 from .common_widgets import CategorySeparator
459
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
39 from .image import Image, AsyncImage
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
40 from cagou import G
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
41
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
42 log = logging.getLogger(__name__)
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
43
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
44 UNKNOWN_SYMBOL = 'Unknown symbol name'
26
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
45
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
46
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
47 class IconButton(ButtonBehavior, Image):
3efca1b10b2f common: first draft of a module were common widgets will be put
Goffi <goffi@goffi.org>
parents:
diff changeset
48 pass
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
49
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
50
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
51 class Avatar(Image):
459
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
52 data = properties.DictProperty(allownone=True)
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
53
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
54 def on_kv_post(self, __):
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
55 if not self.source:
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
56 self.source = G.host.getDefaultAvatar()
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
57
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
58 def on_data(self, __, data):
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
59 if data is None:
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
60 self.source = G.host.getDefaultAvatar()
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
61 else:
72290ebfaa8b core (common), contact_list: new `data` property:
Goffi <goffi@goffi.org>
parents: 458
diff changeset
62 self.source = data['path']
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
63
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
64
397
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
65 class NotifLabel(Label):
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
66 pass
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
67
405
84ff5c917064 widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents: 404
diff changeset
68 @total_ordering
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
69 class ContactItem(BoxLayout):
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
70 """An item from ContactList
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
71
397
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
72 The item will drawn as an icon (JID avatar) with its jid below.
458
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
73 If "badge_text" is set, a label with the text will be drawn above the avatar.
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
74 """
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
75 base_width = dp(150)
397
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
76 avatar_layout = properties.ObjectProperty()
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
77 avatar = properties.ObjectProperty()
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
78 badge = properties.ObjectProperty(allownone=True)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
79 badge_text = properties.StringProperty('')
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
80 profile = properties.StringProperty()
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
81 data = properties.DictProperty()
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
82 jid = properties.StringProperty('')
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
83
458
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
84 def on_kv_post(self, __):
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
85 if ((self.profile and self.jid and self.data is not None
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
86 and ('avatar' not in self.data or 'nicknames' not in self.data))):
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
87 G.host.bridge.identityGet(
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
88 self.jid, ['avatar', 'nicknames'], True, self.profile,
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
89 callback=self._identityGetCb,
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
90 errback=partial(
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
91 G.host.errback,
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
92 message=_("Can't retrieve identity for {jid}: {{msg}}").format(
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
93 jid=self.jid)
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
94 )
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
95 )
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
96
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
97 def _identityGetCb(self, identity_raw):
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
98 identity_data = data_format.deserialise(identity_raw)
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
99 self.data.update(identity_data)
1dd6db69406a core: update avatar handling following backend changes:
Goffi <goffi@goffi.org>
parents: 422
diff changeset
100
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
101 def on_badge_text(self, wid, text):
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
102 if text:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
103 if self.badge is not None:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
104 self.badge.text = text
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
105 else:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
106 self.badge = NotifLabel(
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
107 pos_hint={"right": 0.8, "y": 0},
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
108 text=text,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
109 )
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
110 self.avatar_layout.add_widget(self.badge)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
111 else:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
112 if self.badge is not None:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
113 self.avatar_layout.remove_widget(self.badge)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
114 self.badge = None
397
54f6a47cc60a core (common): added a notifications counter on ContactButton and use it in JidSelector:
Goffi <goffi@goffi.org>
parents: 389
diff changeset
115
405
84ff5c917064 widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents: 404
diff changeset
116 def __lt__(self, other):
84ff5c917064 widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents: 404
diff changeset
117 return self.jid < other.jid
84ff5c917064 widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents: 404
diff changeset
118
322
e2b51663d8b8 core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents: 312
diff changeset
119
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
120 class ContactButton(ButtonBehavior, ContactItem):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
121 pass
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
122
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
123
193
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
124 class JidItem(BoxLayout):
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
125 bg_color = properties.ListProperty([0.2, 0.2, 0.2, 1])
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
126 color = properties.ListProperty([1, 1, 1, 1])
256
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
127 jid = properties.StringProperty()
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
128 profile = properties.StringProperty()
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
129 nick = properties.StringProperty()
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
130 avatar = properties.ObjectProperty()
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
131
256
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
132 def on_avatar(self, wid, jid_):
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
133 if self.jid and self.profile:
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
134 self.getImage()
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
135
256
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
136 def on_jid(self, wid, jid_):
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
137 if self.profile and self.avatar:
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
138 self.getImage()
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
139
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
140 def on_profile(self, wid, profile):
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
141 if self.jid and self.avatar:
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
142 self.getImage()
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
143
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
144 def getImage(self):
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
145 host = G.host
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
146 if host.contact_lists[self.profile].isRoom(self.jid.bare):
256
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
147 self.avatar.opacity = 0
ba7b8cb7ddcd common: don't use anymore positional argument in JidItem
Goffi <goffi@goffi.org>
parents: 247
diff changeset
148 self.avatar.source = ""
107
f0cf44df8486 JidWidget: first draft
Goffi <goffi@goffi.org>
parents: 26
diff changeset
149 else:
273
0ef216091f2b core: removed forgotten debugging code
Goffi <goffi@goffi.org>
parents: 256
diff changeset
150 self.avatar.source = (
0ef216091f2b core: removed forgotten debugging code
Goffi <goffi@goffi.org>
parents: 256
diff changeset
151 host.getAvatar(self.jid, profile=self.profile)
0ef216091f2b core: removed forgotten debugging code
Goffi <goffi@goffi.org>
parents: 256
diff changeset
152 or host.getDefaultAvatar(self.jid)
0ef216091f2b core: removed forgotten debugging code
Goffi <goffi@goffi.org>
parents: 256
diff changeset
153 )
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
154
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
155
193
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
156 class JidButton(ButtonBehavior, JidItem):
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
157 pass
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
158
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
159
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
160 class JidToggle(ToggleButtonBehavior, JidItem):
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
161 selected_color = properties.ListProperty(C.COLOR_SEC_DARK)
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
162
284cb5c467b0 core (common): split JidItem in 3 classes:
Goffi <goffi@goffi.org>
parents: 179
diff changeset
163
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
164 class Symbol(Label):
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
165 symbol_map = None
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
166 symbol = properties.StringProperty()
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
167
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
168 def __init__(self, **kwargs):
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
169 if self.symbol_map is None:
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
170 with open(G.host.app.expand('{media}/fonts/fontello/config.json')) as f:
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
171 fontello_conf = json.load(f)
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
172 Symbol.symbol_map = {g['css']:g['code'] for g in fontello_conf['glyphs']}
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
173
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
174 super(Symbol, self).__init__(**kwargs)
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
175
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
176 def on_symbol(self, instance, symbol):
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
177 try:
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
178 code = self.symbol_map[symbol]
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
179 except KeyError:
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
180 log.warning(_("Invalid symbol {symbol}").format(symbol=symbol))
134
1cca97e27a69 core (common): new Symbol widget:
Goffi <goffi@goffi.org>
parents: 126
diff changeset
181 else:
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
182 self.text = chr(code)
135
091e288838e1 plugin chat: use new Symbol widget to display encryption button
Goffi <goffi@goffi.org>
parents: 134
diff changeset
183
091e288838e1 plugin chat: use new Symbol widget to display encryption button
Goffi <goffi@goffi.org>
parents: 134
diff changeset
184
091e288838e1 plugin chat: use new Symbol widget to display encryption button
Goffi <goffi@goffi.org>
parents: 134
diff changeset
185 class SymbolButton(ButtonBehavior, Symbol):
091e288838e1 plugin chat: use new Symbol widget to display encryption button
Goffi <goffi@goffi.org>
parents: 134
diff changeset
186 pass
178
11ff8cd93659 common: new ActionSymbol widget, which use a symbol to show an action
Goffi <goffi@goffi.org>
parents: 145
diff changeset
187
11ff8cd93659 common: new ActionSymbol widget, which use a symbol to show an action
Goffi <goffi@goffi.org>
parents: 145
diff changeset
188
416
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
189 class SymbolLabel(BoxLayout):
218
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
190 symbol = properties.StringProperty("")
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
191 text = properties.StringProperty("")
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
192 color = properties.ListProperty(C.COLOR_SEC)
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
193 bold = properties.BooleanProperty(True)
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
194 symbol_wid = properties.ObjectProperty()
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
195 label = properties.ObjectProperty()
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
196
30be583dbabc core (common): new SymbolLabel class to have a clickable area with a symbol and a label next to it.
Goffi <goffi@goffi.org>
parents: 193
diff changeset
197
416
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
198 class SymbolButtonLabel(ButtonBehavior, SymbolLabel):
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
199 pass
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
200
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
201
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
202 class SymbolToggleLabel(ToggleButtonBehavior, SymbolLabel):
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
203 pass
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
204
3e2333a11f61 common: implemented SymbolToggleLabel:
Goffi <goffi@goffi.org>
parents: 407
diff changeset
205
178
11ff8cd93659 common: new ActionSymbol widget, which use a symbol to show an action
Goffi <goffi@goffi.org>
parents: 145
diff changeset
206 class ActionSymbol(Symbol):
11ff8cd93659 common: new ActionSymbol widget, which use a symbol to show an action
Goffi <goffi@goffi.org>
parents: 145
diff changeset
207 pass
179
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
208
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
209
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
210 class ActionIcon(BoxLayout):
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
211 plugin_info = properties.DictProperty()
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
212
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
213 def on_plugin_info(self, instance, plugin_info):
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
214 self.clear_widgets()
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
215 try:
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
216 symbol = plugin_info['icon_symbol']
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
217 except KeyError:
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
218 icon_src = plugin_info['icon_medium']
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
219 icon_wid = Image(source=icon_src, allow_stretch=True)
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
220 self.add_widget(icon_wid)
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
221 else:
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
222 icon_wid = ActionSymbol(symbol=symbol)
7177fe2d9725 common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents: 178
diff changeset
223 self.add_widget(icon_wid)
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
224
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
225
422
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
226 class SizedImage(AsyncImage):
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
227 """AsyncImage sized according to C.IMG_MAX_WIDTH and C.IMG_MAX_HEIGHT"""
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
228 # following properties are desired height/width
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
229 # i.e. the ones specified in height/width attributes of <img>
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
230 # (or wanted for whatever reason)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
231 # set to None to ignore them
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
232 target_height = properties.NumericProperty(allownone=True)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
233 target_width = properties.NumericProperty(allownone=True)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
234
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
235 def __init__(self, **kwargs):
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
236 # best calculated size
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
237 self._best_width = self._best_height = 100
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
238 super().__init__(**kwargs)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
239
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
240 def on_texture(self, instance, texture):
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
241 """Adapt the size according to max size and target_*"""
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
242 if texture is None:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
243 return
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
244 max_width, max_height = dp(C.IMG_MAX_WIDTH), dp(C.IMG_MAX_HEIGHT)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
245 width, height = texture.size
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
246 if self.target_width:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
247 width = min(width, self.target_width)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
248 if width > max_width:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
249 width = C.IMG_MAX_WIDTH
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
250
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
251 height = width / self.image_ratio
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
252
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
253 if self.target_height:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
254 height = min(height, self.target_height)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
255
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
256 if height > max_height:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
257 height = max_height
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
258 width = height * self.image_ratio
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
259
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
260 self.width, self.height = self._best_width, self._best_height = width, height
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
261
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
262 def on_parent(self, instance, parent):
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
263 if parent is not None:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
264 parent.bind(width=self.on_parent_width)
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
265
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
266 def on_parent_width(self, instance, width):
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
267 if self._best_width > width:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
268 self.width = width
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
269 self.height = width / self.image_ratio
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
270 else:
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
271 self.width, self.height = self._best_width, self._best_height
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
272
efee0e0afb78 core (common): moved simple_xhtml's image code to a generic "SizedImage" widget
Goffi <goffi@goffi.org>
parents: 416
diff changeset
273
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
274 class JidSelectorCategoryLayout(StackLayout):
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
275 pass
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
276
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
277
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
278 class JidSelector(ScrollView, EventDispatcher):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
279 layout = properties.ObjectProperty(None)
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
280 # if item_class is changed, the properties must be the same as for ContactButton
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
281 # and ordering must be supported
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
282 item_class = properties.ObjectProperty(ContactButton)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
283 add_separators = properties.ObjectProperty(True)
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
284 # list of item to show, can be:
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
285 # - a well-known string which can be:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
286 # * "roster": all roster jids
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
287 # * "opened_chats": all opened chat widgets
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
288 # * "bookmarks": MUC bookmarks
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
289 # A layout will be created each time and stored in the attribute of the same
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
290 # name.
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
291 # If add_separators is True, a CategorySeparator will be added on top of each
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
292 # layout.
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
293 # - a kivy Widget, which will be added to the layout (notable useful with
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
294 # common_widgets.CategorySeparator)
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
295 # - a callable, which must return an iterable of kwargs for ContactButton
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
296 to_show = properties.ListProperty(['roster'])
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
297
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
298 # TODO: roster and bookmarks must be updated in real time, like for opened_chats
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
299
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
300
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
301 def __init__(self, **kwargs):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
302 self.register_event_type('on_select')
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
303 # list of layouts containing items
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
304 self.items_layouts = []
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
305 # jid to list of ContactButton instances map
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
306 self.items_map = {}
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
307 super().__init__(**kwargs)
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
308
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
309 def on_kv_post(self, wid):
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
310 self.update()
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
311
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
312 def on_select(self, wid):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
313 pass
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
314
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
315 def on_parent(self, wid, parent):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
316 if parent is None:
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
317 log.debug("removing listeners")
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
318 G.host.removeListener("contactsFilled", self.onContactsFilled)
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
319 G.host.removeListener("notification", self.onNotification)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
320 G.host.removeListener("notificationsClear", self.onNotificationsClear)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
321 G.host.removeListener(
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
322 "widgetNew", self.onWidgetNew, ignore_missing=True)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
323 G.host.removeListener(
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
324 "widgetDeleted", self.onWidgetDeleted, ignore_missing=True)
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
325 else:
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
326 log.debug("adding listeners")
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
327 G.host.addListener("contactsFilled", self.onContactsFilled)
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
328 G.host.addListener("notification", self.onNotification)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
329 G.host.addListener("notificationsClear", self.onNotificationsClear)
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
330
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
331 def onContactsFilled(self, profile):
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
332 log.debug("onContactsFilled event received")
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
333 self.update()
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
334
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
335 def onNotification(self, entity, notification_data, profile):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
336 for item in self.items_map.get(entity.bare, []):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
337 notifs = list(G.host.getNotifs(entity.bare, profile=profile))
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
338 item.badge_text = str(len(notifs))
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
339
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
340 def onNotificationsClear(self, entity, type_, profile):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
341 for item in self.items_map.get(entity.bare, []):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
342 item.badge_text = ''
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
343
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
344 def onWidgetNew(self, wid):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
345 if not isinstance(wid, quick_chat.QuickChat):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
346 return
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
347 item = self.getItemFromWid(wid)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
348 if item is None:
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
349 return
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
350 idx = 0
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
351 for child in self.opened_chats.children:
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
352 if isinstance(child, self.item_class) and child < item:
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
353 break
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
354 idx+=1
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
355 self.opened_chats.add_widget(item, index=idx)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
356
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
357 def onWidgetDeleted(self, wid):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
358 if not isinstance(wid, quick_chat.QuickChat):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
359 return
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
360
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
361 for child in self.opened_chats.children:
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
362 if not isinstance(child, self.item_class):
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
363 continue
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
364 if child.jid.bare == wid.target.bare:
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
365 self.opened_chats.remove_widget(child)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
366 break
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
367
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
368 def _createItem(self, **kwargs):
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
369 item = self.item_class(**kwargs)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
370 jid = kwargs['jid']
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
371 self.items_map.setdefault(jid, []).append(item)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
372 return item
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
373
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
374 def update(self):
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
375 log.debug("starting update")
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
376 self.layout.clear_widgets()
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
377 for item in self.to_show:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
378 if isinstance(item, str):
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
379 if item == 'roster':
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
380 self.addRosterItems()
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
381 elif item == 'bookmarks':
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
382 self.addBookmarksItems()
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
383 elif item == 'opened_chats':
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
384 self.addOpenedChatsItems()
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
385 else:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
386 log.error(f'unknown "to_show" magic string {item!r}')
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
387 elif isinstance(item, Widget):
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
388 self.layout.add_widget(item)
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
389 elif callable(item):
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
390 items_kwargs = item()
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
391 for item_kwargs in items_kwargs:
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
392 item = self._createItem(**items_kwargs)
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
393 item.bind(on_press=partial(self.dispatch, 'on_select'))
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
394 self.layout.add_widget(item)
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
395 else:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
396 log.error(f"unmanaged to_show item type: {item!r}")
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
397
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
398 def addCategoryLayout(self, label=None):
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
399 category_layout = JidSelectorCategoryLayout()
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
400
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
401 if label and self.add_separators:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
402 category_layout.add_widget(CategorySeparator(text=label))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
403
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
404 self.layout.add_widget(category_layout)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
405 self.items_layouts.append(category_layout)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
406 return category_layout
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
407
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
408 def getItemFromWid(self, wid):
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
409 """create JidSelector item from QuickChat widget"""
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
410 contact_list = G.host.contact_lists[wid.profile]
407
364d2c8eb476 core (common): Don't crash JidSelector when data for entity is missing from cache
Goffi <goffi@goffi.org>
parents: 406
diff changeset
411 try:
364d2c8eb476 core (common): Don't crash JidSelector when data for entity is missing from cache
Goffi <goffi@goffi.org>
parents: 406
diff changeset
412 data=contact_list.getItem(wid.target)
364d2c8eb476 core (common): Don't crash JidSelector when data for entity is missing from cache
Goffi <goffi@goffi.org>
parents: 406
diff changeset
413 except KeyError:
364d2c8eb476 core (common): Don't crash JidSelector when data for entity is missing from cache
Goffi <goffi@goffi.org>
parents: 406
diff changeset
414 log.warning(f"Can't find item data for {wid.target}")
364d2c8eb476 core (common): Don't crash JidSelector when data for entity is missing from cache
Goffi <goffi@goffi.org>
parents: 406
diff changeset
415 data={}
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
416 try:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
417 item = self._createItem(
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
418 jid=wid.target,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
419 data=data,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
420 profile=wid.profile,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
421 )
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
422 except Exception as e:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
423 log.warning(f"Can't add contact {wid.target}: {e}")
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
424 return
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
425 notifs = list(G.host.getNotifs(wid.target, profile=wid.profile))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
426 if notifs:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
427 item.badge_text = str(len(notifs))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
428 item.bind(on_press=partial(self.dispatch, 'on_select'))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
429 return item
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
430
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
431 def addOpenedChatsItems(self):
406
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
432 G.host.addListener("widgetNew", self.onWidgetNew)
03554ad70846 common (jidSelector): replace implitict_update mechanism by real-time update:
Goffi <goffi@goffi.org>
parents: 405
diff changeset
433 G.host.addListener("widgetDeleted", self.onWidgetDeleted)
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
434 self.opened_chats = category_layout = self.addCategoryLayout(_("Opened chats"))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
435 widgets = sorted(G.host.widgets.getWidgets(
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
436 quick_chat.QuickChat,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
437 profiles = G.host.profiles,
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
438 with_duplicates=False))
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
439
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
440 for wid in widgets:
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
441 item = self.getItemFromWid(wid)
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
442 if item is None:
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
443 continue
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
444 category_layout.add_widget(item)
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
445
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
446 def addRosterItems(self):
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
447 self.roster = category_layout = self.addCategoryLayout(_("Your contacts"))
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
448 for profile in G.host.profiles:
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
449 contact_list = G.host.contact_lists[profile]
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
450 for entity_jid in sorted(contact_list.roster):
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
451 item = self._createItem(
348
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
452 jid=entity_jid,
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
453 data=contact_list.getItem(entity_jid),
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
454 profile=profile,
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
455 )
38fd457b2158 core (common, share_widget): new JidSelector widget:
Goffi <goffi@goffi.org>
parents: 322
diff changeset
456 item.bind(on_press=partial(self.dispatch, 'on_select'))
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
457 category_layout.add_widget(item)
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
458
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
459 def addBookmarksItems(self):
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
460 self.bookmarks = category_layout = self.addCategoryLayout(_("Your chat rooms"))
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
461 for profile in G.host.profiles:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
462 profile_manager = G.host.profiles[profile]
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
463 try:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
464 bookmarks = profile_manager._bookmarks
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
465 except AttributeError:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
466 log.warning(f"no bookmark in cache for profile {profile}")
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
467 continue
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
468
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
469 contact_list = G.host.contact_lists[profile]
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
470 for entity_jid in bookmarks:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
471 try:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
472 cache = contact_list.getItem(entity_jid)
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
473 except KeyError:
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
474 cache = {}
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
475 item = self._createItem(
389
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
476 jid=entity_jid,
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
477 data=cache,
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
478 profile=profile,
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
479 )
442756495a96 core (common): improved flexibility of jid selector:
Goffi <goffi@goffi.org>
parents: 378
diff changeset
480 item.bind(on_press=partial(self.dispatch, 'on_select'))
404
f7476818f9fb core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents: 397
diff changeset
481 category_layout.add_widget(item)