Mercurial > libervia-desktop-kivy
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 |
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 | 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 | 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 | 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 | 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 | 40 from cagou import G |
134 | 41 |
42 log = logging.getLogger(__name__) | |
43 | |
312 | 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 | 49 |
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 | 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 | 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 | 145 host = G.host |
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 | 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 | 154 |
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 | 164 class Symbol(Label): |
165 symbol_map = None | |
166 symbol = properties.StringProperty() | |
167 | |
168 def __init__(self, **kwargs): | |
169 if self.symbol_map is None: | |
170 with open(G.host.app.expand('{media}/fonts/fontello/config.json')) as f: | |
171 fontello_conf = json.load(f) | |
172 Symbol.symbol_map = {g['css']:g['code'] for g in fontello_conf['glyphs']} | |
173 | |
174 super(Symbol, self).__init__(**kwargs) | |
175 | |
176 def on_symbol(self, instance, symbol): | |
177 try: | |
178 code = self.symbol_map[symbol] | |
179 except KeyError: | |
312 | 180 log.warning(_("Invalid symbol {symbol}").format(symbol=symbol)) |
134 | 181 else: |
312 | 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) |