annotate cagou/core/common.py @ 488:beedff600d2b

blog: blog widget implementation: this patch implements a basic blog widget. The search bare can be used to change node (only node for now, will be improved to do search and all). Publication on current node can be done by pressing the pencil icon. A checkbox can be activated to use end-to-end encryption. No pagination or comments are supported for now. Due to lack of HTML rendering in Kivy, only simple formatting is supported. If item is end-2-end encrypted, a green closed locker is shown next to publication date. rel 380
author Goffi <goffi@goffi.org>
date Sat, 15 Oct 2022 20:20:10 +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)