Mercurial > libervia-desktop-kivy
annotate libervia/desktop_kivy/core/cagou_main.py @ 518:196483685a63 default tip
Use Font-Awesome instead of Fontello, following change in Libervia Media.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 26 Oct 2024 22:44:37 +0200 |
parents | 2ff26b4273df |
children |
rev | line source |
---|---|
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1 #!/usr/bin/env python3 |
0 | 2 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
3 #Libervia Desktop-Kivy |
461 | 4 # Copyright (C) 2016-2021 Jérôme Poisson (goffi@goffi.org) |
0 | 5 |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | |
19 | |
498
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
20 import asyncio |
285
3f7e227aab00
core: disable multitouch emulation with mouse
Goffi <goffi@goffi.org>
parents:
284
diff
changeset
|
21 import os.path |
3f7e227aab00
core: disable multitouch emulation with mouse
Goffi <goffi@goffi.org>
parents:
284
diff
changeset
|
22 import glob |
3f7e227aab00
core: disable multitouch emulation with mouse
Goffi <goffi@goffi.org>
parents:
284
diff
changeset
|
23 import sys |
414 | 24 from pathlib import Path |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
25 from typing import Callable |
420 | 26 from urllib import parse as urlparse |
388
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
27 from functools import partial |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
28 from libervia.backend.core.i18n import _ |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
29 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
30 # `do_hack` msut be run before any Kivy import! |
119
1bbbe26846f4
buildozer: moved sat.conf in a specific dir (platform/android), so it's not used on desktop
Goffi <goffi@goffi.org>
parents:
112
diff
changeset
|
31 from . import kivy_hack |
48
028a98983e46
core: avoid kivy arguments hijacking so QuickApp arguments parsing can be used
Goffi <goffi@goffi.org>
parents:
44
diff
changeset
|
32 kivy_hack.do_hack() |
312 | 33 from .constants import Const as C |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
34 from libervia.backend.core import log as logging |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
35 from libervia.backend.core import exceptions |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
36 from libervia.desktop_kivy.core.file_chooser import FileChooser |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
37 from libervia.frontends.quick_frontend.quick_app import QuickApp |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
38 from libervia.frontends.quick_frontend import quick_widgets |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
39 from libervia.frontends.quick_frontend import quick_chat |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
40 from libervia.frontends.quick_frontend import quick_utils |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
41 from libervia.frontends.tools import aio, jid |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
42 from libervia.backend.tools import utils as libervia_utils |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
43 from libervia.backend.tools import config |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
44 from libervia.backend.tools.common import data_format |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
45 from libervia.backend.tools.common import dynamic_import |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
46 from libervia.backend.tools.common import files_utils |
0 | 47 import kivy |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
48 kivy.require('1.11.0') |
0 | 49 import kivy.support |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
50 main_config = config.parse_main_conf(log_filenames=True) |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
51 bridge_name = config.config_get(main_config, '', 'bridge', 'dbus') |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
52 # FIXME: event loop is choosen according to bridge_name, a better way should be used |
63 | 53 if 'dbus' in bridge_name: |
54 kivy.support.install_gobject_iteration() | |
55 elif bridge_name in ('pb', 'embedded'): | |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
56 kivy.support.install_twisted_reactor() |
0 | 57 from kivy.app import App |
14 | 58 from kivy.lang import Builder |
29 | 59 from kivy import properties |
312 | 60 from . import xmlui |
61 from .profile_manager import ProfileManager | |
29 | 62 from kivy.clock import Clock |
63 from kivy.uix.label import Label | |
9 | 64 from kivy.uix.boxlayout import BoxLayout |
85
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
65 from kivy.uix.floatlayout import FloatLayout |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
66 from kivy.uix.screenmanager import (ScreenManager, Screen, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
67 FallOutTransition, RiseInTransition) |
29 | 68 from kivy.uix.dropdown import DropDown |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
69 from kivy.uix.behaviors import ButtonBehavior |
166
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
70 from kivy.core.window import Window |
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
71 from kivy.animation import Animation |
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
72 from kivy.metrics import dp |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
73 from .cagou_widget import LiberviaDesktopKivyWidget |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
74 from .share_widget import ShareWidget |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
75 from . import widgets_handler |
29 | 76 from .common import IconButton |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
77 from . import dialog |
14 | 78 from importlib import import_module |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
79 import libervia.backend |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
80 import libervia.desktop_kivy |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
81 import libervia.desktop_kivy.plugins |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
82 import libervia.desktop_kivy.kv |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
83 |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
84 |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
85 log = logging.getLogger(__name__) |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
86 |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
87 |
184
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
88 try: |
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
89 from plyer import notification |
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
90 except ImportError: |
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
91 notification = None |
312 | 92 log.warning(_("Can't import plyer, some features disabled")) |
131
36fc269e2a32
core: changed default background color to white
Goffi <goffi@goffi.org>
parents:
130
diff
changeset
|
93 |
286 | 94 |
95 ## platform specific settings ## | |
96 | |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
97 from . import platform_ |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
98 local_platform = platform_.create() |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
99 local_platform.init_platform() |
259
4601793b0dee
core: use new unix socket mechanism to set frontend state
Goffi <goffi@goffi.org>
parents:
250
diff
changeset
|
100 |
4601793b0dee
core: use new unix socket mechanism to set frontend state
Goffi <goffi@goffi.org>
parents:
250
diff
changeset
|
101 |
286 | 102 ## General Configuration ## |
103 | |
259
4601793b0dee
core: use new unix socket mechanism to set frontend state
Goffi <goffi@goffi.org>
parents:
250
diff
changeset
|
104 # we want white background by default |
4601793b0dee
core: use new unix socket mechanism to set frontend state
Goffi <goffi@goffi.org>
parents:
250
diff
changeset
|
105 Window.clearcolor = (1, 1, 1, 1) |
9 | 106 |
107 | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
108 class NotifsIcon(IconButton): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
109 notifs = properties.ListProperty() |
29 | 110 |
111 def on_release(self): | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
112 callback, args, kwargs = self.notifs.pop(0) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
113 callback(*args, **kwargs) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
114 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
115 def add_notif(self, callback, *args, **kwargs): |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
116 self.notifs.append((callback, args, kwargs)) |
29 | 117 |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
118 def del_notif(self, callback, *args, **kwargs): |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
119 try: |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
120 self.notifs.remove((callback, args, kwargs)) |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
121 except ValueError: |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
122 log.debug("The notification to delete doesn't exist anymore.") |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
123 |
29 | 124 |
125 class Note(Label): | |
126 title = properties.StringProperty() | |
127 message = properties.StringProperty() | |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
128 level = properties.OptionProperty(C.XMLUI_DATA_LVL_DEFAULT, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
129 options=list(C.XMLUI_DATA_LVLS)) |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
130 symbol = properties.StringProperty() |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
131 action = properties.ObjectProperty() |
29 | 132 |
133 | |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
134 class NoteDrop(ButtonBehavior, BoxLayout): |
208 | 135 title = properties.StringProperty() |
136 message = properties.StringProperty() | |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
137 level = properties.OptionProperty(C.XMLUI_DATA_LVL_DEFAULT, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
138 options=list(C.XMLUI_DATA_LVLS)) |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
139 symbol = properties.StringProperty() |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
140 action = properties.ObjectProperty() |
518
196483685a63
Use Font-Awesome instead of Fontello, following change in Libervia Media.
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
141 level2symbol = { |
196483685a63
Use Font-Awesome instead of Fontello, following change in Libervia Media.
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
142 C.XMLUI_DATA_LVL_INFO: "circle-info", |
196483685a63
Use Font-Awesome instead of Fontello, following change in Libervia Media.
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
143 C.XMLUI_DATA_LVL_WARNING: "triangle-exclamation", |
196483685a63
Use Font-Awesome instead of Fontello, following change in Libervia Media.
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
144 C.XMLUI_DATA_LVL_ERROR: "circle-exclamation" |
196483685a63
Use Font-Awesome instead of Fontello, following change in Libervia Media.
Goffi <goffi@goffi.org>
parents:
515
diff
changeset
|
145 } |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
146 |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
147 def on_press(self): |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
148 if self.action is not None: |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
149 self.parent.parent.select(self.action) |
29 | 150 |
151 | |
152 class NotesDrop(DropDown): | |
153 clear_btn = properties.ObjectProperty() | |
154 | |
155 def __init__(self, notes): | |
156 super(NotesDrop, self).__init__() | |
157 self.notes = notes | |
158 | |
159 def open(self, widget): | |
160 self.clear_widgets() | |
161 for n in self.notes: | |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
162 kwargs = { |
312 | 163 'title': n.title, |
164 'message': n.message, | |
165 'level': n.level | |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
166 } |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
167 if n.symbol is not None: |
312 | 168 kwargs['symbol'] = n.symbol |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
169 if n.action is not None: |
312 | 170 kwargs['action'] = n.action |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
171 self.add_widget(NoteDrop(title=n.title, message=n.message, level=n.level, |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
172 symbol=n.symbol, action=n.action)) |
29 | 173 self.add_widget(self.clear_btn) |
174 super(NotesDrop, self).open(widget) | |
175 | |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
176 def on_select(self, action_kwargs): |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
177 app = App.get_running_app() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
178 app.host.do_action(**action_kwargs) |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
179 |
29 | 180 |
181 class RootHeadWidget(BoxLayout): | |
182 """Notifications widget""" | |
183 manager = properties.ObjectProperty() | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
184 notifs_icon = properties.ObjectProperty() |
29 | 185 notes = properties.ListProperty() |
172
7103655647aa
core: hide notifications header on M-n
Goffi <goffi@goffi.org>
parents:
166
diff
changeset
|
186 HEIGHT = dp(35) |
29 | 187 |
188 def __init__(self): | |
189 super(RootHeadWidget, self).__init__() | |
190 self.notes_last = None | |
191 self.notes_event = None | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
192 self.notes_drop = NotesDrop(self.notes) |
29 | 193 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
194 def add_notif(self, callback, *args, **kwargs): |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
195 """add a notification with a callback attached |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
196 |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
197 when notification is pressed, callback is called |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
198 @param *args, **kwargs: arguments of callback |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
199 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
200 self.notifs_icon.add_notif(callback, *args, **kwargs) |
29 | 201 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
202 def add_note(self, title, message, level, symbol, action): |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
203 kwargs = { |
312 | 204 'title': title, |
205 'message': message, | |
206 'level': level | |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
207 } |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
208 if symbol is not None: |
312 | 209 kwargs['symbol'] = symbol |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
210 if action is not None: |
312 | 211 kwargs['action'] = action |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
212 note = Note(**kwargs) |
29 | 213 self.notes.append(note) |
214 if self.notes_event is None: | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
215 self.notes_event = Clock.schedule_interval(self._display_next_note, 5) |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
216 self._display_next_note() |
29 | 217 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
218 def add_notif_ui(self, ui): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
219 self.notifs_icon.add_notif(ui.show, force=True) |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
220 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
221 def add_notif_widget(self, widget): |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
222 app = App.get_running_app() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
223 self.notifs_icon.add_notif(app.host.show_extra_ui, widget=widget) |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
224 |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
225 def del_notif_widget(self, widget): |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
226 app = App.get_running_app() |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
227 self.notifs_icon.del_notif(app.host.show_extra_ui, widget=widget) |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
228 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
229 def _display_next_note(self, __=None): |
29 | 230 screen = Screen() |
231 try: | |
232 idx = self.notes.index(self.notes_last) + 1 | |
233 except ValueError: | |
234 idx = 0 | |
235 try: | |
236 note = self.notes_last = self.notes[idx] | |
237 except IndexError: | |
238 self.notes_event.cancel() | |
239 self.notes_event = None | |
240 else: | |
241 screen.add_widget(note) | |
242 self.manager.switch_to(screen) | |
243 | |
244 | |
85
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
245 class RootBody(BoxLayout): |
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
246 pass |
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
247 |
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
248 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
249 class LiberviaDesktopKivyRootWidget(FloatLayout): |
85
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
250 root_body = properties.ObjectProperty |
9 | 251 |
29 | 252 def __init__(self, main_widget): |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
253 super(LiberviaDesktopKivyRootWidget, self).__init__() |
29 | 254 # header |
172
7103655647aa
core: hide notifications header on M-n
Goffi <goffi@goffi.org>
parents:
166
diff
changeset
|
255 self.head_widget = RootHeadWidget() |
7103655647aa
core: hide notifications header on M-n
Goffi <goffi@goffi.org>
parents:
166
diff
changeset
|
256 self.root_body.add_widget(self.head_widget) |
29 | 257 # body |
258 self._manager = ScreenManager() | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
259 # main widgets |
29 | 260 main_screen = Screen(name='main') |
261 main_screen.add_widget(main_widget) | |
262 self._manager.add_widget(main_screen) | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
263 # backend XMLUI (popups, forms, etc) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
264 xmlui_screen = Screen(name='xmlui') |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
265 self._manager.add_widget(xmlui_screen) |
78 | 266 # extra (file chooser, audio record, etc) |
267 extra_screen = Screen(name='extra') | |
268 self._manager.add_widget(extra_screen) | |
85
c2a7234d13d2
menu: use of garden's contextmenu for menus
Goffi <goffi@goffi.org>
parents:
78
diff
changeset
|
269 self.root_body.add_widget(self._manager) |
29 | 270 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
271 def change_widget(self, widget, screen_name="main"): |
29 | 272 """change main widget""" |
52
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
273 if self._manager.transition.is_active: |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
274 # FIXME: workaround for what seems a Kivy bug |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
275 # TODO: report this upstream |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
276 self._manager.transition.stop() |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
277 screen = self._manager.get_screen(screen_name) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
278 screen.clear_widgets() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
279 screen.add_widget(widget) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
280 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
281 def show(self, screen="main"): |
52
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
282 if self._manager.transition.is_active: |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
283 # FIXME: workaround for what seems a Kivy bug |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
284 # TODO: report this upstream |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
285 self._manager.transition.stop() |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
286 if self._manager.current == screen: |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
287 return |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
288 if screen == "main": |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
289 self._manager.transition = FallOutTransition() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
290 else: |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
291 self._manager.transition = RiseInTransition() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
292 self._manager.current = screen |
29 | 293 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
294 def new_action(self, handler, action_data, id_, security_limit, profile): |
29 | 295 """Add a notification for an action""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
296 self.head_widget.add_notif(handler, action_data, id_, security_limit, profile) |
29 | 297 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
298 def add_note(self, title, message, level, symbol, action): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
299 self.head_widget.add_note(title, message, level, symbol, action) |
0 | 300 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
301 def add_notif_ui(self, ui): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
302 self.head_widget.add_notif_ui(ui) |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
303 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
304 def add_notif_widget(self, widget): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
305 self.head_widget.add_notif_widget(widget) |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
306 |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
307 def del_notif_widget(self, widget): |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
308 self.head_widget.del_notif_widget(widget) |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
309 |
0 | 310 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
311 class LiberviaDesktopKivyApp(App): |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
312 """Kivy App for LiberviaDesktopKivy""" |
176
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
313 c_prim = properties.ListProperty(C.COLOR_PRIM) |
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
314 c_prim_light = properties.ListProperty(C.COLOR_PRIM_LIGHT) |
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
315 c_prim_dark = properties.ListProperty(C.COLOR_PRIM_DARK) |
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
316 c_sec = properties.ListProperty(C.COLOR_SEC) |
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
317 c_sec_light = properties.ListProperty(C.COLOR_SEC_LIGHT) |
2cfef8fbfd4e
core: moved main colors to constants
Goffi <goffi@goffi.org>
parents:
174
diff
changeset
|
318 c_sec_dark = properties.ListProperty(C.COLOR_SEC_DARK) |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
319 connected = properties.BooleanProperty(False) |
274 | 320 # we have to put those constants here and not in core/constants.py |
321 # because of the use of dp(), which would import Kivy too early | |
322 # and prevent the log hack | |
323 MARGIN_LEFT = MARGIN_RIGHT = dp(10) | |
0 | 324 |
152
b9fd83292fc4
core: disabled Kivy's default behaviour of displaying settings on F1
Goffi <goffi@goffi.org>
parents:
143
diff
changeset
|
325 def _install_settings_keys(self, window): |
b9fd83292fc4
core: disabled Kivy's default behaviour of displaying settings on F1
Goffi <goffi@goffi.org>
parents:
143
diff
changeset
|
326 # we don't want default Kivy's behaviour of displaying |
b9fd83292fc4
core: disabled Kivy's default behaviour of displaying settings on F1
Goffi <goffi@goffi.org>
parents:
143
diff
changeset
|
327 # a settings screen when pressing F1 or platform specific key |
b9fd83292fc4
core: disabled Kivy's default behaviour of displaying settings on F1
Goffi <goffi@goffi.org>
parents:
143
diff
changeset
|
328 return |
b9fd83292fc4
core: disabled Kivy's default behaviour of displaying settings on F1
Goffi <goffi@goffi.org>
parents:
143
diff
changeset
|
329 |
0 | 330 def build(self): |
498
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
331 # we connect async bridge here as we must have a running loop |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
332 self.host.a_bridge.bridge_connect() |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
333 |
143
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
334 Window.bind(on_keyboard=self.key_input) |
414 | 335 Window.bind(on_dropfile=self.on_dropfile) |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
336 wid = LiberviaDesktopKivyRootWidget(Label(text=_("Loading please wait"))) |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
337 local_platform.on_app_build(wid) |
166
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
338 return wid |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
339 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
340 def show_profile_manager(self): |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
341 self._profile_manager = ProfileManager() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
342 self.root.change_widget(self._profile_manager) |
0 | 343 |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
344 def expand(self, path, *args, **kwargs): |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
345 """expand path and replace known values |
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
346 |
32 | 347 useful in kv. Values which can be used: |
348 - {media}: media dir | |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
349 @param path(unicode): path to expand |
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
350 @param *args: additional arguments used in format |
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
351 @param **kwargs: additional keyword arguments used in format |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
352 """ |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
353 return os.path.expanduser(path).format(*args, media=self.host.media_dir, **kwargs) |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
354 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
355 def init_frontend_state(self): |
259
4601793b0dee
core: use new unix socket mechanism to set frontend state
Goffi <goffi@goffi.org>
parents:
250
diff
changeset
|
356 """Init state to handle paused/stopped/running on mobile OSes""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
357 local_platform.on_init_frontend_state() |
73
674b1fa3c945
core: use memory map on a file to indicate pause/resume status, so backend can now it
Goffi <goffi@goffi.org>
parents:
72
diff
changeset
|
358 |
65
1c738621bc8d
core: on_pause/on_resume handling (needed for Android)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
359 def on_pause(self): |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
360 return local_platform.on_pause() |
65
1c738621bc8d
core: on_pause/on_resume handling (needed for Android)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
361 |
1c738621bc8d
core: on_pause/on_resume handling (needed for Android)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
362 def on_resume(self): |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
363 return local_platform.on_resume() |
73
674b1fa3c945
core: use memory map on a file to indicate pause/resume status, so backend can now it
Goffi <goffi@goffi.org>
parents:
72
diff
changeset
|
364 |
674b1fa3c945
core: use memory map on a file to indicate pause/resume status, so backend can now it
Goffi <goffi@goffi.org>
parents:
72
diff
changeset
|
365 def on_stop(self): |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
366 return local_platform.on_stop() |
65
1c738621bc8d
core: on_pause/on_resume handling (needed for Android)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
367 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
368 def show_head_widget(self, show=None, animation=True): |
423
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
369 """Show/Hide the head widget |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
370 |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
371 @param show(bool, None): True to show, False to hide, None to switch |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
372 @param animation(bool): animate the show/hide if True |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
373 """ |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
374 head = self.root.head_widget |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
375 if bool(self.root.head_widget.height) == show: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
376 return |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
377 if head.height: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
378 if animation: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
379 Animation(height=0, opacity=0, duration=0.3).start(head) |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
380 else: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
381 head.height = head.opacity = 0 |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
382 else: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
383 if animation: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
384 Animation(height=head.HEIGHT, opacity=1, duration=0.3).start(head) |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
385 else: |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
386 head.height = head.HEIGHT |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
387 head.opacity = 1 |
f8ba934ea462
core: new showHeadWidget method to show/hide notifications header.
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
388 |
143
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
389 def key_input(self, window, key, scancode, codepoint, modifier): |
349
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
390 |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
391 # we first check if selected widget handles the key |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
392 if ((self.host.selected_widget is not None |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
393 and hasattr(self.host.selected_widget, 'key_input') |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
394 and self.host.selected_widget.key_input(window, key, scancode, codepoint, |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
395 modifier))): |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
396 return True |
33244f944bd8
core: "key_input" method is now checked and used if suitable in selected widget.
Goffi <goffi@goffi.org>
parents:
346
diff
changeset
|
397 |
143
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
398 if key == 27: |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
399 if ((self.host.selected_widget is None |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
400 or self.host.selected_widget.__class__ == self.host.default_class)): |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
401 # we are on root widget, or nothing is selected |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
402 return local_platform.on_key_back_root() |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
403 |
166
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
404 # we disable [esc] handling, because default action is to quit app |
143
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
405 return True |
165 | 406 elif key == 292: |
166
37220459e93d
core: hide/show menu on M-m + disable menu on Android
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
407 # F11: full screen |
165 | 408 if not Window.fullscreen: |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
409 Window.fullscreen = 'auto' |
165 | 410 else: |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
411 Window.fullscreen = False |
165 | 412 return True |
375
ae9059b791fe
core: fixed handling of M-n if other modifier (e.g. numlock) are present
Goffi <goffi@goffi.org>
parents:
373
diff
changeset
|
413 elif key == 110 and 'alt' in modifier: |
172
7103655647aa
core: hide notifications header on M-n
Goffi <goffi@goffi.org>
parents:
166
diff
changeset
|
414 # M-n we hide/show notifications |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
415 self.show_head_widget() |
172
7103655647aa
core: hide notifications header on M-n
Goffi <goffi@goffi.org>
parents:
166
diff
changeset
|
416 return True |
143
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
417 else: |
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
418 return False |
05d602be0120
core: [esc] key handling is disabled (for now)
Goffi <goffi@goffi.org>
parents:
142
diff
changeset
|
419 |
414 | 420 def on_dropfile(self, __, file_path): |
421 if self.host.selected_widget is not None: | |
422 try: | |
423 on_drop_file = self.host.selected_widget.on_drop_file | |
424 except AttributeError: | |
425 log.info( | |
426 f"Select widget {self.host.selected_widget} doesn't handle file " | |
427 f"dropping") | |
428 else: | |
429 on_drop_file(Path(file_path.decode())) | |
430 | |
0 | 431 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
432 class LiberviaDesktopKivy(QuickApp): |
0 | 433 MB_HANDLE = False |
265
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
434 AUTO_RESYNC = False |
0 | 435 |
436 def __init__(self): | |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
437 if bridge_name == 'embedded': |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
438 from libervia.backend.core import main |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
439 self.libervia_backend = main.LiberviaBackend() |
64
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
440 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
441 bridge_module = dynamic_import.bridge(bridge_name, 'libervia.frontends.bridge') |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
442 if bridge_module is None: |
316
86566968837a
android (p4a): updated P4A option to use Python 3:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
443 log.error(f"Can't import {bridge_name} bridge") |
72
1a324c682d8a
core: use onBridgeConnected and exit code 3 when bridge can't be imported
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
444 sys.exit(3) |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
445 else: |
316
86566968837a
android (p4a): updated P4A option to use Python 3:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
446 log.debug(f"Loading {bridge_name} bridge") |
498
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
447 super(LiberviaDesktopKivy, self).__init__( |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
448 bridge_factory=bridge_module.bridge, |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
449 xmlui=xmlui, |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
450 check_options=quick_utils.check_options, |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
451 connect_bridge=False, |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
452 async_bridge_factory = bridge_module.AIOBridge |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
453 ) |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
454 self._import_kv() |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
455 self.app = LiberviaDesktopKivyApp() |
29 | 456 self.app.host = self |
497
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
457 log_level = config.config_get( |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
458 main_config, |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
459 C.CONFIG_SECTION, |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
460 "log_level", |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
461 "INFO" |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
462 ).strip().upper() |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
463 root_logger = logging.getLogger() |
232a723aae45
core: set log level according to configuration
Goffi <goffi@goffi.org>
parents:
493
diff
changeset
|
464 root_logger.setLevel(log_level) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
465 self.media_dir = self.app.media_dir = config.config_get(main_config, '', |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
466 'media_dir') |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
467 self.downloads_dir = self.app.downloads_dir = config.config_get(main_config, '', |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
468 'downloads_dir') |
188
0abd24ab81b1
core: retrieve downloads_dir on startup
Goffi <goffi@goffi.org>
parents:
184
diff
changeset
|
469 if not os.path.exists(self.downloads_dir): |
0abd24ab81b1
core: retrieve downloads_dir on startup
Goffi <goffi@goffi.org>
parents:
184
diff
changeset
|
470 try: |
0abd24ab81b1
core: retrieve downloads_dir on startup
Goffi <goffi@goffi.org>
parents:
184
diff
changeset
|
471 os.makedirs(self.downloads_dir) |
0abd24ab81b1
core: retrieve downloads_dir on startup
Goffi <goffi@goffi.org>
parents:
184
diff
changeset
|
472 except OSError as e: |
312 | 473 log.warnings(_("Can't create downloads dir: {reason}").format(reason=e)) |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
474 self.app.default_avatar = os.path.join(self.media_dir, "misc/default_avatar.png") |
487 | 475 self.app.icon = os.path.join( |
476 self.media_dir, "icons/muchoslava/png/cagou_profil_bleu_96.png" | |
477 ) | |
478 self.app.title = C.APP_NAME | |
360
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
479 # main widgets plugins |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
480 self._plg_wids = [] |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
481 # transfer widgets plugins |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
482 self._plg_wids_transfer = [] |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
483 |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
484 Clock.schedule_once(lambda __: self._import_plugins(), 0) |
360
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
485 # visible widgets by classes |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
486 self._visible_widgets = {} |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
487 # used to keep track of last selected widget in "main" screen when changing |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
488 # root screen |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
489 self._selected_widget_main = None |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
490 self.backend_version = libervia.backend.__version__ # will be replaced by version_get() |
302
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
491 if C.APP_VERSION.endswith('D'): |
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
492 self.version = "{} {}".format( |
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
493 C.APP_VERSION, |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
494 libervia_utils.get_repository_data(libervia.desktop_kivy) |
302
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
495 ) |
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
496 else: |
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
497 self.version = C.APP_VERSION |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
498 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
499 self.tls_validation = not C.bool(config.config_get(main_config, |
281
ef77423ce500
core: store tls_validation flag in host and use if for file upload.
Goffi <goffi@goffi.org>
parents:
280
diff
changeset
|
500 C.CONFIG_SECTION, |
ef77423ce500
core: store tls_validation flag in host and use if for file upload.
Goffi <goffi@goffi.org>
parents:
280
diff
changeset
|
501 'no_certificate_validation', |
ef77423ce500
core: store tls_validation flag in host and use if for file upload.
Goffi <goffi@goffi.org>
parents:
280
diff
changeset
|
502 C.BOOL_FALSE)) |
ef77423ce500
core: store tls_validation flag in host and use if for file upload.
Goffi <goffi@goffi.org>
parents:
280
diff
changeset
|
503 if not self.tls_validation: |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
504 from libervia.desktop_kivy.core import patches |
438
58d3ea442f9c
core (patches): renamed `apply` to `disable_tls_validation` which suits better
Goffi <goffi@goffi.org>
parents:
423
diff
changeset
|
505 patches.disable_tls_validation() |
312 | 506 log.warning("SSL certificate validation is disabled, this is unsecure!") |
280
b0461363bc65
core: certificate validation can be disabled:
Goffi <goffi@goffi.org>
parents:
276
diff
changeset
|
507 |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
331
diff
changeset
|
508 local_platform.on_host_init(self) |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
509 |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
510 @property |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
511 def visible_widgets(self): |
312 | 512 for w_list in self._visible_widgets.values(): |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
513 for w in w_list: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
514 yield w |
0 | 515 |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
516 @property |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
517 def default_class(self): |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
518 if self.default_wid is None: |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
519 return None |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
520 return self.default_wid['main'] |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
521 |
265
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
522 @QuickApp.sync.setter |
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
523 def sync(self, state): |
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
524 QuickApp.sync.fset(self, state) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
525 # widget are resynchronised in on_visible event, |
265
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
526 # so we must call resync for widgets which are already visible |
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
527 if state: |
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
528 for w in self.visible_widgets: |
272
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
529 try: |
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
530 resync = w.resync |
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
531 except AttributeError: |
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
532 pass |
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
533 else: |
c4990a7d5dbd
core: check if resync exist in widget before calling it
Goffi <goffi@goffi.org>
parents:
267
diff
changeset
|
534 resync() |
291
04e4cd7c9351
core: refill contact lists on resync
Goffi <goffi@goffi.org>
parents:
290
diff
changeset
|
535 self.contact_lists.fill() |
265
805c4103dac5
core: resync widgets only when they are visible:
Goffi <goffi@goffi.org>
parents:
264
diff
changeset
|
536 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
537 def config_get(self, section, name, default=None): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
538 return config.config_get(main_config, section, name, default) |
381
eb3f622d8791
android: create/clean a temporary directory on startup:
Goffi <goffi@goffi.org>
parents:
378
diff
changeset
|
539 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
540 def on_bridge_connected(self): |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
541 super(LiberviaDesktopKivy, self).on_bridge_connected() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
542 self.register_signal("otr_state", iface="plugin") |
63 | 543 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
544 def _bridge_eb(self, failure): |
64
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
545 if bridge_name == "pb" and sys.platform == "android": |
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
546 try: |
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
547 self.retried += 1 |
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
548 except AttributeError: |
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
549 self.retried = 1 |
317
4b0fa73caad4
core: bridge are now raising generic BridgeExceptionNoService
Goffi <goffi@goffi.org>
parents:
316
diff
changeset
|
550 if ((isinstance(failure, exceptions.BridgeExceptionNoService) |
4b0fa73caad4
core: bridge are now raising generic BridgeExceptionNoService
Goffi <goffi@goffi.org>
parents:
316
diff
changeset
|
551 and self.retried < 100)): |
64
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
552 if self.retried % 20 == 0: |
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
553 log.debug("backend not ready, retrying ({})".format(self.retried)) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
554 Clock.schedule_once(lambda __: self.connect_bridge(), 0.05) |
64
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
555 return |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
556 super(LiberviaDesktopKivy, self)._bridge_eb(failure) |
64
8e16abcadbb8
core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
Goffi <goffi@goffi.org>
parents:
63
diff
changeset
|
557 |
0 | 558 def run(self): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
559 self.connect_bridge() |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
560 self.app.bind(on_stop=self.onStop) |
498
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
561 loop = asyncio.get_event_loop() |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
562 loop.run_until_complete( |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
563 self.app.async_run("asyncio") |
3b627382e681
core: support async methods and bridge
Goffi <goffi@goffi.org>
parents:
497
diff
changeset
|
564 ) |
0 | 565 |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
566 def onStop(self, obj): |
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
567 try: |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
568 libervia_instance = self.libervia_backend |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
569 except AttributeError: |
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
570 pass |
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
571 else: |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
572 libervia_instance.stopService() |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
573 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
574 def _get_version_cb(self, version): |
302
f55b60659ec1
core (about): improved "about" popup:
Goffi <goffi@goffi.org>
parents:
298
diff
changeset
|
575 self.backend_version = version |
246 | 576 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
577 def on_backend_ready(self): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
578 super().on_backend_ready() |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
579 self.app.show_profile_manager() |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
580 self.bridge.version_get(callback=self._get_version_cb) |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
581 self.app.init_frontend_state() |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
582 if local_platform.do_post_init(): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
583 self.post_init() |
60
35abe494e6c7
core: bridge selection + improvments for android
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
584 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
585 def post_init(self, __=None): |
276 | 586 # FIXME: resize doesn't work with SDL2 on android, so we use below_target for now |
61 | 587 self.app.root_window.softinput_mode = "below_target" |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
588 profile_manager = self.app._profile_manager |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
589 del self.app._profile_manager |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
590 super(LiberviaDesktopKivy, self).post_init(profile_manager) |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
591 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
592 def profile_plugged(self, profile): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
593 super().profile_plugged(profile) |
439
12d188cb1206
core: use of new profileConnected method:
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
594 # FIXME: this won't work with multiple profiles |
12d188cb1206
core: use of new profileConnected method:
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
595 self.app.connected = self.profiles[profile].connected |
12d188cb1206
core: use of new profileConnected method:
Goffi <goffi@goffi.org>
parents:
438
diff
changeset
|
596 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
597 def _bookmarks_list_cb(self, bookmarks_dict, profile): |
388
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
598 bookmarks = set() |
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
599 for data in bookmarks_dict.values(): |
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
600 bookmarks.update({jid.JID(k) for k in data.keys()}) |
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
601 self.profiles[profile]._bookmarks = sorted(bookmarks) |
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
602 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
603 def profile_connected(self, profile): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
604 self.bridge.bookmarks_list( |
388
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
605 "muc", "all", profile, |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
606 callback=partial(self._bookmarks_list_cb, profile=profile), |
388
de066b72f5a8
core: cache MUC bookmarks on startup
Goffi <goffi@goffi.org>
parents:
385
diff
changeset
|
607 errback=partial(self.errback, title=_("Bookmark error"))) |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
608 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
609 def _default_factory_main(self, plugin_info, target, profiles): |
86 | 610 """default factory used to create main widgets instances |
611 | |
612 used when PLUGIN_INFO["factory"] is not set | |
613 @param plugin_info(dict): plugin datas | |
614 @param target: QuickWidget target | |
615 @param profiles(iterable): list of profiles | |
616 """ | |
14 | 617 main_cls = plugin_info['main'] |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
618 return self.widgets.get_or_create_widget(main_cls, |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
619 target, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
620 on_new_widget=None, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
621 profiles=iter(self.profiles)) |
14 | 622 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
623 def _default_factory_transfer(self, plugin_info, callback, cancel_cb, profiles): |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
624 """default factory used to create transfer widgets instances |
86 | 625 |
626 @param plugin_info(dict): plugin datas | |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
627 @param callback(callable): method to call with path to file to transfer |
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
628 @param cancel_cb(callable): call when transfer is cancelled |
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
629 transfer widget must be used as first argument |
86 | 630 @param profiles(iterable): list of profiles |
631 None if not specified | |
632 """ | |
633 main_cls = plugin_info['main'] | |
634 return main_cls(callback=callback, cancel_cb=cancel_cb) | |
635 | |
29 | 636 ## plugins & kv import ## |
637 | |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
638 def _import_kv(self): |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
639 """import all kv files in libervia.desktop_kivy.kv""" |
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
640 path = os.path.dirname(libervia.desktop_kivy.kv.__file__) |
130
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
641 kv_files = glob.glob(os.path.join(path, "*.kv")) |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
642 # we want to be sure that base.kv is loaded first |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
643 # as it override some Kivy widgets properties |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
644 for kv_file in kv_files: |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
645 if kv_file.endswith('base.kv'): |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
646 kv_files.remove(kv_file) |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
647 kv_files.insert(0, kv_file) |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
648 break |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
649 else: |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
650 raise exceptions.InternalError("base.kv is missing") |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
651 |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
652 for kv_file in kv_files: |
0ec3c3c0ed92
core (kv): new base.kv to handle default properties overriding on Kivy widgets
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
653 Builder.load_file(kv_file) |
316
86566968837a
android (p4a): updated P4A option to use Python 3:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
654 log.debug(f"kv file {kv_file} loaded") |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
655 |
14 | 656 def _import_plugins(self): |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
657 """import all plugins""" |
14 | 658 self.default_wid = None |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
659 plugins_path = os.path.dirname(libervia.desktop_kivy.plugins.__file__) |
312 | 660 plugin_glob = "plugin*." + C.PLUGIN_EXT |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
661 plug_lst = [os.path.splitext(p)[0] for p in |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
662 map(os.path.basename, glob.glob(os.path.join(plugins_path, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
663 plugin_glob)))] |
61 | 664 |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
665 imported_names_main = set() # used to avoid loading 2 times |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
666 # plugin with same import name |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
667 imported_names_transfer = set() |
14 | 668 for plug in plug_lst: |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
669 plugin_path = 'libervia.desktop_kivy.plugins.' + plug |
86 | 670 |
671 # we get type from plugin name | |
672 suff = plug[7:] | |
312 | 673 if '_' not in suff: |
674 log.error("invalid plugin name: {}, skipping".format(plug)) | |
86 | 675 continue |
312 | 676 plugin_type = suff[:suff.find('_')] |
86 | 677 |
678 # and select the variable to use according to type | |
679 if plugin_type == C.PLUG_TYPE_WID: | |
680 imported_names = imported_names_main | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
681 default_factory = self._default_factory_main |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
682 elif plugin_type == C.PLUG_TYPE_TRANSFER: |
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
683 imported_names = imported_names_transfer |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
684 default_factory = self._default_factory_transfer |
86 | 685 else: |
312 | 686 log.error("unknown plugin type {type_} for plugin {file_}, skipping" |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
687 .format( |
86 | 688 type_ = plugin_type, |
689 file_ = plug | |
690 )) | |
691 continue | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
692 plugins_set = self._get_plugins_set(plugin_type) |
86 | 693 |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
694 mod = import_module(plugin_path) |
14 | 695 try: |
696 plugin_info = mod.PLUGIN_INFO | |
697 except AttributeError: | |
698 plugin_info = {} | |
699 | |
86 | 700 plugin_info['plugin_file'] = plug |
701 plugin_info['plugin_type'] = plugin_type | |
702 | |
703 if 'platforms' in plugin_info: | |
704 if sys.platform not in plugin_info['platforms']: | |
312 | 705 log.info("{plugin_file} is not used on this platform, skipping" |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
706 .format(**plugin_info)) |
86 | 707 continue |
708 | |
14 | 709 # import name is used to differentiate plugins |
710 if 'import_name' not in plugin_info: | |
711 plugin_info['import_name'] = plug | |
86 | 712 if plugin_info['import_name'] in imported_names: |
312 | 713 log.warning(_("there is already a plugin named {}, " |
714 "ignoring new one").format(plugin_info['import_name'])) | |
14 | 715 continue |
716 if plugin_info['import_name'] == C.WID_SELECTOR: | |
86 | 717 if plugin_type != C.PLUG_TYPE_WID: |
312 | 718 log.error("{import_name} import name can only be used with {type_} " |
719 "type, skipping {name}".format(type_=C.PLUG_TYPE_WID, | |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
720 **plugin_info)) |
86 | 721 continue |
14 | 722 # if WidgetSelector exists, it will be our default widget |
723 self.default_wid = plugin_info | |
724 | |
725 # we want everything optional, so we use plugin file name | |
726 # if actual name is not found | |
727 if 'name' not in plugin_info: | |
86 | 728 name_start = 8 + len(plugin_type) |
729 plugin_info['name'] = plug[name_start:] | |
14 | 730 |
731 # we need to load the kv file | |
732 if 'kv_file' not in plugin_info: | |
312 | 733 plugin_info['kv_file'] = '{}.kv'.format(plug) |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
734 kv_path = os.path.join(plugins_path, plugin_info['kv_file']) |
89
d249df379fa3
core: kv files are not mandatory anymore for plugins
Goffi <goffi@goffi.org>
parents:
87
diff
changeset
|
735 if not os.path.exists(kv_path): |
312 | 736 log.debug("no kv found for {plugin_file}".format(**plugin_info)) |
89
d249df379fa3
core: kv files are not mandatory anymore for plugins
Goffi <goffi@goffi.org>
parents:
87
diff
changeset
|
737 else: |
d249df379fa3
core: kv files are not mandatory anymore for plugins
Goffi <goffi@goffi.org>
parents:
87
diff
changeset
|
738 Builder.load_file(kv_path) |
14 | 739 |
740 # what is the main class ? | |
741 main_cls = getattr(mod, plugin_info['main']) | |
742 plugin_info['main'] = main_cls | |
743 | |
744 # factory is used to create the instance | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
745 # if not found, we use a defaut one with get_or_create_widget |
14 | 746 if 'factory' not in plugin_info: |
86 | 747 plugin_info['factory'] = default_factory |
14 | 748 |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
749 # icons |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
750 for size in ('small', 'medium'): |
312 | 751 key = 'icon_{}'.format(size) |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
752 try: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
753 path = plugin_info[key] |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
754 except KeyError: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
755 path = C.DEFAULT_WIDGET_ICON.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
756 else: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
757 path = path.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
758 if not os.path.isfile(path): |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
759 path = C.DEFAULT_WIDGET_ICON.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
760 plugin_info[key] = path |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
761 |
86 | 762 plugins_set.append(plugin_info) |
14 | 763 if not self._plg_wids: |
312 | 764 log.error(_("no widget plugin found")) |
14 | 765 return |
766 | |
767 # we want widgets sorted by names | |
768 self._plg_wids.sort(key=lambda p: p['name'].lower()) | |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
769 self._plg_wids_transfer.sort(key=lambda p: p['name'].lower()) |
14 | 770 |
771 if self.default_wid is None: | |
772 # we have no selector widget, we use the first widget as default | |
773 self.default_wid = self._plg_wids[0] | |
774 | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
775 def _get_plugins_set(self, type_): |
86 | 776 if type_ == C.PLUG_TYPE_WID: |
777 return self._plg_wids | |
97
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
778 elif type_ == C.PLUG_TYPE_TRANSFER: |
5d2289127bb7
menu (upload): better menu using dedicated widget:
Goffi <goffi@goffi.org>
parents:
91
diff
changeset
|
779 return self._plg_wids_transfer |
86 | 780 else: |
312 | 781 raise KeyError("{} plugin type is unknown".format(type_)) |
86 | 782 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
783 def get_plugged_widgets(self, type_=C.PLUG_TYPE_WID, except_cls=None): |
14 | 784 """get available widgets plugin infos |
785 | |
86 | 786 @param type_(unicode): type of widgets to get |
787 one of C.PLUG_TYPE_* constant | |
14 | 788 @param except_cls(None, class): if not None, |
789 widgets from this class will be excluded | |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
790 @return (iter[dict]): available widgets plugin infos |
14 | 791 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
792 plugins_set = self._get_plugins_set(type_) |
86 | 793 for plugin_data in plugins_set: |
19
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
794 if plugin_data['main'] == except_cls: |
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
795 continue |
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
796 yield plugin_data |
14 | 797 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
798 def get_plugin_info(self, type_=C.PLUG_TYPE_WID, **kwargs): |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
799 """get first plugin info corresponding to filters |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
800 |
86 | 801 @param type_(unicode): type of widgets to get |
802 one of C.PLUG_TYPE_* constant | |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
803 @param **kwargs: filter(s) to use, each key present here must also |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
804 exist and be of the same value in requested plugin info |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
805 @return (dict, None): found plugin info or None |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
806 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
807 plugins_set = self._get_plugins_set(type_) |
86 | 808 for plugin_info in plugins_set: |
312 | 809 for k, w in kwargs.items(): |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
810 try: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
811 if plugin_info[k] != w: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
812 continue |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
813 except KeyError: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
814 continue |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
815 return plugin_info |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
816 |
29 | 817 ## widgets handling |
9 | 818 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
819 def new_widget(self, widget): |
312 | 820 log.debug("new widget created: {}".format(widget)) |
43
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
821 if isinstance(widget, quick_chat.QuickChat) and widget.type == C.CHAT_GROUP: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
822 self.add_note("", _("room {} has been joined").format(widget.target)) |
43
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
823 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
824 def switch_widget(self, old, new=None): |
11
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
825 """Replace old widget by new one |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
826 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
827 @param old(LiberviaDesktopKivyWidget, None): LiberviaDesktopKivyWidget instance or a child |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
828 None to select automatically widget to switch |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
829 @param new(LiberviaDesktopKivyWidget): new widget instance |
350
1ac40d3121f6
core (Cagou): "new" arg can be None in switchWidget, in which case default widget is used.
Goffi <goffi@goffi.org>
parents:
349
diff
changeset
|
830 None to use default widget |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
831 @return (LiberviaDesktopKivyWidget): new widget |
11
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
832 """ |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
833 if old is None: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
834 old = self.get_widget_to_switch() |
350
1ac40d3121f6
core (Cagou): "new" arg can be None in switchWidget, in which case default widget is used.
Goffi <goffi@goffi.org>
parents:
349
diff
changeset
|
835 if new is None: |
1ac40d3121f6
core (Cagou): "new" arg can be None in switchWidget, in which case default widget is used.
Goffi <goffi@goffi.org>
parents:
349
diff
changeset
|
836 factory = self.default_wid['factory'] |
358
8efed1d47d9f
core: don't crash when a widget without profiles switch to default widget
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
837 try: |
8efed1d47d9f
core: don't crash when a widget without profiles switch to default widget
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
838 profiles = old.profiles |
8efed1d47d9f
core: don't crash when a widget without profiles switch to default widget
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
839 except AttributeError: |
8efed1d47d9f
core: don't crash when a widget without profiles switch to default widget
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
840 profiles = None |
8efed1d47d9f
core: don't crash when a widget without profiles switch to default widget
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
841 new = factory(self.default_wid, None, profiles=profiles) |
14 | 842 to_change = None |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
843 if isinstance(old, LiberviaDesktopKivyWidget): |
14 | 844 to_change = old |
845 else: | |
846 for w in old.walk_reverse(): | |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
847 if isinstance(w, LiberviaDesktopKivyWidget): |
14 | 848 to_change = w |
849 break | |
850 | |
851 if to_change is None: | |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
852 raise exceptions.InternalError("no LiberviaDesktopKivyWidget found when " |
312 | 853 "trying to switch widget") |
154 | 854 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
855 # selected_widget can be modified in change_widget, so we need to set it before |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
856 self.selected_widget = new |
445
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
857 if to_change == new: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
858 log.debug("switch_widget called with old==new, nothing to do") |
445
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
859 return new |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
860 to_change.whwrapper.change_widget(new) |
385
6dacaf81339a
core: return newly switched widget in switchWidget and doAction
Goffi <goffi@goffi.org>
parents:
381
diff
changeset
|
861 return new |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
862 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
863 def _add_visible_widget(self, widget): |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
864 """declare a widget visible |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
865 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
866 for internal use only! |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
867 """ |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
868 assert isinstance(widget, LiberviaDesktopKivyWidget) |
352
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
869 log.debug(f"Visible widget: {widget}") |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
870 self._visible_widgets.setdefault(widget.__class__, set()).add(widget) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
871 log.debug(f"visible widgets list: {self.get_visible_list(None)}") |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
872 widget.on_visible() |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
873 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
874 def _remove_visible_widget(self, widget, ignore_missing=False): |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
875 """declare a widget not visible anymore |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
876 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
877 for internal use only! |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
878 """ |
352
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
879 log.debug(f"Widget not visible anymore: {widget}") |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
880 try: |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
881 self._visible_widgets[widget.__class__].remove(widget) |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
882 except KeyError as e: |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
883 if not ignore_missing: |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
884 log.error(f"trying to remove a not visible widget ({widget}): {e}") |
434f770fe55b
core (Cagou): add debug log for widget visibility + ignore_missing:
Goffi <goffi@goffi.org>
parents:
351
diff
changeset
|
885 return |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
886 log.debug(f"visible widgets list: {self.get_visible_list(None)}") |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
887 if isinstance(widget, LiberviaDesktopKivyWidget): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
888 widget.on_not_visible() |
264
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
262
diff
changeset
|
889 if isinstance(widget, quick_widgets.QuickWidget): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
890 self.widgets.delete_widget(widget) |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
891 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
892 def get_visible_list(self, cls): |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
893 """get list of visible widgets for a given class |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
894 |
248
b6e33b35538b
core, widgets handler: visible_widgets now keep all CagouWidgets, not only QuickWidgets. visible_quick_widgets can be used if only QuickWidgets are desired.
Goffi <goffi@goffi.org>
parents:
247
diff
changeset
|
895 @param cls(type): type of widgets to get |
351
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
896 None to get all visible widgets |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
897 @return (set[type]): visible widgets of this class |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
898 """ |
351
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
899 if cls is None: |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
900 ret = set() |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
901 for widgets in self._visible_widgets.values(): |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
902 for w in widgets: |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
903 ret.add(w) |
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
904 return ret |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
905 try: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
906 return self._visible_widgets[cls] |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
907 except KeyError: |
351
e9d3c3793f94
core (Cagou): "None" can be used in getVisibleList's cls to get all visible widgets
Goffi <goffi@goffi.org>
parents:
350
diff
changeset
|
908 return set() |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
909 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
910 def delete_unused_widget_instances(self, widget): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
911 """Delete instance of this widget which are not attached to a WHWrapper |
260
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
912 |
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
913 @param widget(quick_widgets.QuickWidget): reference widget |
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
914 other instance of this widget will be deleted if they have no parent |
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
915 """ |
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
916 to_delete = [] |
267
896f78760b63
core: fixed crash when calling deleteUnusedWidgetInstances on widgets not inheriting from QuickWidget
Goffi <goffi@goffi.org>
parents:
266
diff
changeset
|
917 if isinstance(widget, quick_widgets.QuickWidget): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
918 for w in self.widgets.get_widget_instances(widget): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
919 if w.whwrapper is None and w != widget: |
267
896f78760b63
core: fixed crash when calling deleteUnusedWidgetInstances on widgets not inheriting from QuickWidget
Goffi <goffi@goffi.org>
parents:
266
diff
changeset
|
920 to_delete.append(w) |
896f78760b63
core: fixed crash when calling deleteUnusedWidgetInstances on widgets not inheriting from QuickWidget
Goffi <goffi@goffi.org>
parents:
266
diff
changeset
|
921 for w in to_delete: |
312 | 922 log.debug("cleaning widget: {wid}".format(wid=w)) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
923 self.widgets.delete_widget(w) |
260
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
924 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
925 def get_or_clone(self, widget, **kwargs): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
926 """Get a QuickWidget if it is not in a WHWrapper, else clone it |
260
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
927 |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
928 if an other instance of this widget exist without being in a WHWrapper |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
929 (i.e. if it is not already in use) it will be used. |
260
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
930 """ |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
931 if widget.whwrapper is None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
932 if widget.parent is not None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
933 widget.parent.remove_widget(widget) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
934 self.delete_unused_widget_instances(widget) |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
935 return widget |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
936 for w in self.widgets.get_widget_instances(widget): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
937 if w.whwrapper is None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
938 if w.parent is not None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
939 w.parent.remove_widget(w) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
940 self.delete_unused_widget_instances(w) |
260
145c29b5f2b5
core: improved getOrClone + use in chat and widgets_handler:
Goffi <goffi@goffi.org>
parents:
259
diff
changeset
|
941 return w |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
942 targets = list(widget.targets) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
943 w = self.widgets.get_or_create_widget(widget.__class__, |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
944 targets[0], |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
945 on_new_widget=None, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
946 on_existing_widget=C.WIDGET_RECREATE, |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
947 profiles=widget.profiles, |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
948 **kwargs) |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
949 for t in targets[1:]: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
950 w.add_target(t) |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
951 return w |
29 | 952 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
953 def get_widget_to_switch(self): |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
954 """Choose best candidate when we need to switch widget and old is not specified |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
955 |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
956 @return (LiberviaDesktopKivyWidget): widget to switch |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
957 """ |
385
6dacaf81339a
core: return newly switched widget in switchWidget and doAction
Goffi <goffi@goffi.org>
parents:
381
diff
changeset
|
958 if (self._selected_widget_main is not None |
6dacaf81339a
core: return newly switched widget in switchWidget and doAction
Goffi <goffi@goffi.org>
parents:
381
diff
changeset
|
959 and self._selected_widget_main.whwrapper is not None): |
363
816a0c880f52
core: use selected widget from main screen in getWidgetToSwitch:
Goffi <goffi@goffi.org>
parents:
360
diff
changeset
|
960 # we are not on the main screen, we want to switch a widget from main screen |
816a0c880f52
core: use selected widget from main screen in getWidgetToSwitch:
Goffi <goffi@goffi.org>
parents:
360
diff
changeset
|
961 return self._selected_widget_main |
385
6dacaf81339a
core: return newly switched widget in switchWidget and doAction
Goffi <goffi@goffi.org>
parents:
381
diff
changeset
|
962 elif (self.selected_widget is not None |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
963 and isinstance(self.selected_widget, LiberviaDesktopKivyWidget) |
385
6dacaf81339a
core: return newly switched widget in switchWidget and doAction
Goffi <goffi@goffi.org>
parents:
381
diff
changeset
|
964 and self.selected_widget.whwrapper is not None): |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
965 return self.selected_widget |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
966 # no widget is selected we check if we have any default widget |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
356
diff
changeset
|
967 default_cls = self.default_class |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
968 for w in self.visible_widgets: |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
969 if isinstance(w, default_cls): |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
970 return w |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
971 |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
972 # no default widget found, we return the first widget |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
973 return next(iter(self.visible_widgets)) |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
974 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
975 def do_action(self, action, target, profiles): |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
976 """Launch an action handler by a plugin |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
977 |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
978 @param action(unicode): action to do, can be: |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
979 - chat: open a chat widget |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
980 @param target(unicode): target of the action |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
981 @param profiles(list[unicode]): profiles to use |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
982 @return (LiberviaDesktopKivyWidget, None): new widget |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
983 """ |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
984 try: |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
985 # FIXME: Q&D way to get chat plugin, should be replaced by a clean method |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
986 # in host |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
987 plg_infos = [p for p in self.get_plugged_widgets() |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
988 if action in p['import_name']][0] |
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
989 except IndexError: |
312 | 990 log.warning("No plugin widget found to do {action}".format(action=action)) |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
991 else: |
445
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
992 try: |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
993 # does the widget already exist? |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
994 wid = next(self.widgets.get_widgets( |
445
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
995 plg_infos['main'], |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
996 target=target, |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
997 profiles=profiles)) |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
998 except StopIteration: |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
999 # no, let's create a new one |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
1000 factory = plg_infos['factory'] |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
1001 wid = factory(plg_infos, target=target, profiles=profiles) |
9b73a1879989
core: fixed doAction when new widget is already existing and visible:
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
1002 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1003 return self.switch_widget(None, wid) |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
1004 |
122
dcd6fbb3f010
chat: handle new OTR state signal and change encryption icon consequently
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
1005 ## bridge handlers ## |
dcd6fbb3f010
chat: handle new OTR state signal and change encryption icon consequently
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
1006 |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1007 async def _on_webrtc_file( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1008 self, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1009 action_data: dict, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1010 action_id: str|None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1011 profile: str |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1012 ) -> None: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1013 assert action_id is not None |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1014 try: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1015 xmlui_data = action_data["xmlui"] |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1016 except KeyError: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1017 raise exceptions.InternalError("Missing XMLUI in file action.") |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1018 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1019 try: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1020 from_jid = jid.JID(action_data["from_jid"]) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1021 except KeyError: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1022 raise exceptions.InternalError( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1023 f"Missing 'from_jid' key: {action_data!r}" |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1024 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1025 from libervia.frontends.tools.webrtc_file import WebRTCFileReceiver |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1026 confirm_msg = WebRTCFileReceiver.format_confirm_msg(action_data, from_jid) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1027 |
515
2ff26b4273df
core: use `pre_accepted` following change in backend.
Goffi <goffi@goffi.org>
parents:
514
diff
changeset
|
1028 pre_accepted = action_data.get("pre_accepted", False) |
2ff26b4273df
core: use `pre_accepted` following change in backend.
Goffi <goffi@goffi.org>
parents:
514
diff
changeset
|
1029 if pre_accepted: |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1030 accepted = True |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1031 else: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1032 accepted = await self.ask_confirmation(confirm_msg, _("File Request")) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1033 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1034 xmlui_data = {"answer": C.bool_const(accepted)} |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1035 if accepted: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1036 file_data = action_data.get("file_data") or {} |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1037 file_name = file_data.get("name", "received_file") |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1038 dest_path_s = await FileChooser.a_open( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1039 mode="save", |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1040 title=_("Please select the destination for file {file_name!r}.").format( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1041 file_name=file_name |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1042 ), |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1043 # FIXME: It doesn't seem to be a way to specify destination file name, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1044 # ``path`` doesn't work this way, at least on Linux/KDE. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1045 default_path=f"./{file_name}" |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1046 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1047 if dest_path_s is None: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1048 accepted = False |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1049 else: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1050 dest_path = Path(dest_path_s) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1051 try: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1052 session_id = action_data["session_id"] |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1053 except KeyError: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1054 raise exceptions.InternalError("'session_id' is missing.") |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1055 file_receiver = WebRTCFileReceiver( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1056 self.a_bridge, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1057 profile, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1058 on_close_cb=lambda: self.add_note( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1059 _("File Received"), |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1060 _('The file "{file_name}" has been successfuly received.').format( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1061 file_name = file_data.get("name", "") |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1062 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1063 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1064 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1065 await file_receiver.receive_file_webrtc( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1066 from_jid, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1067 session_id, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1068 dest_path, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1069 file_data |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1070 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1071 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1072 await self.a_bridge.action_launch( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1073 action_id, data_format.serialise(xmlui_data), profile_key=profile |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1074 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1075 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1076 def action_manager( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1077 self, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1078 action_data: dict, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1079 callback: Callable|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1080 ui_show_cb: Callable|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1081 user_action: bool = True, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1082 action_id: str|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1083 progress_cb: Callable|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1084 progress_eb: Callable|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1085 profile: str = C.PROF_KEY_NONE |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1086 ) -> None: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1087 if ( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1088 action_data.get("type") == C.META_TYPE_FILE |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1089 and action_data.get("webrtc", False) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1090 ): |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1091 aio.run_async(self._on_webrtc_file(action_data, action_id, profile)) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1092 else: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1093 super().action_manager( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1094 action_data, callback, ui_show_cb, user_action, action_id, progress_cb, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1095 progress_eb, profile |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1096 ) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1097 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1098 def otr_state_handler(self, state, dest_jid, profile): |
122
dcd6fbb3f010
chat: handle new OTR state signal and change encryption icon consequently
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
1099 """OTR state has changed for on destinee""" |
dcd6fbb3f010
chat: handle new OTR state signal and change encryption icon consequently
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
1100 # XXX: this method could be in QuickApp but it's here as |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
1101 # it's only used by LiberviaDesktopKivy so far |
244
5bd94bc08f5c
plugin chat: fixed OTR State filtering + removed some legacy code
Goffi <goffi@goffi.org>
parents:
240
diff
changeset
|
1102 dest_jid = jid.JID(dest_jid) |
5bd94bc08f5c
plugin chat: fixed OTR State filtering + removed some legacy code
Goffi <goffi@goffi.org>
parents:
240
diff
changeset
|
1103 bare_jid = dest_jid.bare |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1104 for widget in self.widgets.get_widgets(quick_chat.QuickChat, profiles=(profile,)): |
244
5bd94bc08f5c
plugin chat: fixed OTR State filtering + removed some legacy code
Goffi <goffi@goffi.org>
parents:
240
diff
changeset
|
1105 if widget.type == C.CHAT_ONE2ONE and widget.target == bare_jid: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1106 widget.on_otr_state(state, dest_jid, profile) |
122
dcd6fbb3f010
chat: handle new OTR state signal and change encryption icon consequently
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
1107 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1108 def _debug_handler(self, action, parameters, profile): |
312 | 1109 if action == "visible_widgets_dump": |
266
b3f97729e983
core (debug): added "visible_widgets_dump" action to new _debug signal
Goffi <goffi@goffi.org>
parents:
265
diff
changeset
|
1110 from pprint import pformat |
312 | 1111 log.info("Visible widgets dump:\n{data}".format( |
266
b3f97729e983
core (debug): added "visible_widgets_dump" action to new _debug signal
Goffi <goffi@goffi.org>
parents:
265
diff
changeset
|
1112 data=pformat(self._visible_widgets))) |
b3f97729e983
core (debug): added "visible_widgets_dump" action to new _debug signal
Goffi <goffi@goffi.org>
parents:
265
diff
changeset
|
1113 else: |
493
b3cedbee561d
refactoring: rename `cagou` to `libervia.desktop_kivy` + update imports and names following backend changes
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
1114 return super(LiberviaDesktopKivy, self)._debug_handler(action, parameters, profile) |
266
b3f97729e983
core (debug): added "visible_widgets_dump" action to new _debug signal
Goffi <goffi@goffi.org>
parents:
265
diff
changeset
|
1115 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1116 def connected_handler(self, jid_s, profile): |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1117 # FIXME: this won't work with multiple profiles |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1118 super().connected_handler(jid_s, profile) |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1119 self.app.connected = True |
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1120 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1121 def disconnected_handler(self, profile): |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1122 # FIXME: this won't work with multiple profiles |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1123 super().disconnected_handler(profile) |
346
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1124 self.app.connected = False |
7b9a0e57df53
core: new "connected" property in CagouApp
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
1125 |
29 | 1126 ## misc ## |
1127 | |
1128 def plugging_profiles(self): | |
356
307c2501d8b2
chat: keep as many instances of opened chat as there are active WHWrapper, instead of just one:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
1129 self.widgets_handler = widgets_handler.WidgetsHandler() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1130 self.app.root.change_widget(self.widgets_handler) |
29 | 1131 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1132 def set_presence_status(self, show='', status=None, profile=C.PROF_KEY_NONE): |
312 | 1133 log.info("Profile presence status set to {show}/{status}".format(show=show, |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1134 status=status)) |
29 | 1135 |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1136 def errback(self, failure_, title=_('error'), |
312 | 1137 message=_('error while processing: {msg}')): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1138 self.add_note(title, message.format(msg=failure_), level=C.XMLUI_DATA_LVL_WARNING) |
190
33ac2d2ce5d7
core: new errback method which can be use as a generic way to show error as notes
Goffi <goffi@goffi.org>
parents:
189
diff
changeset
|
1139 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1140 def add_note(self, title, message, level=C.XMLUI_DATA_LVL_INFO, symbol=None, |
250
ff1efdeff53f
core: notifs can now have a custom icon and be clickable:
Goffi <goffi@goffi.org>
parents:
249
diff
changeset
|
1141 action=None): |
29 | 1142 """add a note (message which disappear) to root widget's header""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1143 self.app.root.add_note(title, message, level, symbol, action) |
29 | 1144 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1145 def add_notif_ui(self, ui): |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1146 """add a notification with a XMLUI attached |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1147 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1148 @param ui(xmlui.XMLUIPanel): XMLUI instance to show when notification is selected |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1149 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1150 self.app.root.add_notif_ui(ui) |
29 | 1151 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1152 def add_notif_widget(self, widget): |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1153 """add a notification with a Kivy widget attached |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1154 |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1155 @param widget(kivy.uix.Widget): widget to attach to notification |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1156 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1157 self.app.root.add_notif_widget(widget) |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1158 |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1159 def del_notif_widget(self, widget): |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1160 """del a notification with a Kivy widget attached |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1161 |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1162 @param widget(kivy.uix.Widget): widget to attach to notification |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1163 """ |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1164 if self.selected_widget == widget: |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1165 self.close_ui() |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1166 else: |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1167 self.app.root.del_notif_widget(widget) |
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1168 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1169 def show_ui(self, ui): |
78 | 1170 """show a XMLUI""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1171 self.app.root.change_widget(ui, "xmlui") |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1172 self.app.root.show("xmlui") |
360
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1173 self._selected_widget_main = self.selected_widget |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1174 self.selected_widget = ui |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1175 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1176 def show_extra_ui(self, widget): |
78 | 1177 """show any extra widget""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1178 self.app.root.change_widget(widget, "extra") |
78 | 1179 self.app.root.show("extra") |
360
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1180 self._selected_widget_main = self.selected_widget |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1181 self.selected_widget = widget |
78 | 1182 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1183 def close_ui(self): |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1184 """Close current UI in extra screen""" |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
1185 self.app.root.show() |
360
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1186 self.selected_widget = self._selected_widget_main |
a77386b73e55
core: change selected_widget when root screen widget is changed
Goffi <goffi@goffi.org>
parents:
358
diff
changeset
|
1187 self._selected_widget_main = None |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1188 screen = self.app.root._manager.get_screen("extra") |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1189 screen.clear_widgets() |
44
7819e9efa250
chat: avatar and nick are now displayed, need further aesthetic improvments
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
1190 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1191 def get_default_avatar(self, entity=None): |
44
7819e9efa250
chat: avatar and nick are now displayed, need further aesthetic improvments
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
1192 return self.app.default_avatar |
61 | 1193 |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1194 def _dialog_cb(self, cb, *args, **kwargs): |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1195 """generic dialog callback |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1196 |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1197 close dialog then call the callback with given arguments |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1198 """ |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1199 def callback(): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1200 self.close_ui() |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1201 cb(*args, **kwargs) |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1202 return callback |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1203 |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1204 def show_dialog( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1205 self, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1206 message: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1207 title: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1208 type: str = "info", |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1209 answer_cb: Callable|None = None, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1210 answer_data: dict|None = None |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1211 ): |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1212 """Show a dialog to the user. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1213 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1214 @param message: The main text of the dialog. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1215 @param title: Title of the dialog. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1216 @param type: Type of dialog (info, warning, error, yes/no). |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1217 @param answer_cb: A callback that will be called when the user answers to the dialog. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1218 You can pass an asynchronous function as well. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1219 @param answer_data: Additional data for the dialog. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1220 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1221 """ |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1222 if type in ('info', 'warning', 'error'): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1223 self.add_note(title, message, type) |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1224 elif type == "yes/no": |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1225 wid = dialog.ConfirmDialog(title=title, message=message, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1226 yes_cb=self._dialog_cb(answer_cb, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1227 True, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1228 answer_data), |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1229 no_cb=self._dialog_cb(answer_cb, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1230 False, |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1231 answer_data) |
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1232 ) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1233 self.add_notif_widget(wid) |
505
bbef1a413515
core (main): add methods to deleted notifications:
Goffi <goffi@goffi.org>
parents:
498
diff
changeset
|
1234 return wid |
220
24f8ab7c08be
core: implemented showDialog so message/dialogs from QuickFrontend are displayed
Goffi <goffi@goffi.org>
parents:
208
diff
changeset
|
1235 else: |
312 | 1236 log.warning(_("unknown dialog type: {dialog_type}").format(dialog_type=type)) |
184
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
1237 |
514
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1238 async def a_show_dialog( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1239 self, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1240 message: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1241 title: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1242 type: str = "info", |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1243 answer_data: dict|None = None |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1244 ) -> bool|None: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1245 """Shows a dialog asynchronously and returns the user's response for 'yes/no' dialogs. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1246 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1247 This method wraps the synchronous ``show_dialog`` method to work in an |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1248 asynchronous context. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1249 It is specifically useful for 'yes/no' type dialogs, returning True for 'yes' and |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1250 False for 'no'. For other types, it returns None immediately after showing the |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1251 dialog. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1252 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1253 See [show_dialog] for params. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1254 @return: True if the user clicked 'yes', False if 'no', and None for other dialog types. |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1255 """ |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1256 future = asyncio.Future() |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1257 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1258 def answer_cb(answer: bool, data: dict): |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1259 if not future.done(): |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1260 future.set_result(answer) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1261 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1262 if type == "yes/no": |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1263 self.show_dialog(message, title, type, answer_cb, answer_data) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1264 return await future |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1265 else: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1266 self.show_dialog(message, title, type) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1267 return None |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1268 |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1269 async def ask_confirmation( |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1270 self, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1271 message: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1272 title: str, |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1273 answer_data: dict|None = None |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1274 ) -> bool: |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1275 ret = await self.a_show_dialog(message, title, "yes/no", answer_data) |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1276 assert ret is bool |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1277 return ret |
d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1278 |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1279 def share(self, media_type, data): |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1280 share_wid = ShareWidget(media_type=media_type, data=data) |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1281 try: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1282 self.show_extra_ui(share_wid) |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1283 except Exception as e: |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1284 log.error(e) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1285 self.close_ui() |
184
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
1286 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1287 def download_url( |
420 | 1288 self, url, callback, errback=None, options=None, dest=C.FILE_DEST_DOWNLOAD, |
1289 profile=C.PROF_KEY_NONE): | |
1290 """Download an URL (decrypt it if necessary) | |
1291 | |
1292 @param url(str, parse.SplitResult): url to download | |
1293 @param callback(callable): method to call when download is complete | |
1294 @param errback(callable, None): method to call in case of error | |
1295 if None, default errback will be called | |
1296 @param dest(str): where the file should be downloaded: | |
1297 - C.FILE_DEST_DOWNLOAD: in platform download directory | |
1298 - C.FILE_DEST_CACHE: in SàT cache | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1299 @param options(dict, None): options to pass to bridge.file_download_complete |
420 | 1300 """ |
1301 if not isinstance(url, urlparse.ParseResult): | |
1302 url = urlparse.urlparse(url) | |
1303 if errback is None: | |
1304 errback = partial( | |
1305 self.errback, | |
1306 title=_("Download error"), | |
1307 message=_("Error while downloading {url}: {{msg}}").format(url=url.geturl())) | |
1308 name = Path(url.path).name.strip() or C.FILE_DEFAULT_NAME | |
1309 log.info(f"downloading/decrypting file {name!r}") | |
1310 if dest == C.FILE_DEST_DOWNLOAD: | |
1311 dest_path = files_utils.get_unique_name(Path(self.downloads_dir)/name) | |
1312 elif dest == C.FILE_DEST_CACHE: | |
1313 dest_path = '' | |
1314 else: | |
1315 raise exceptions.InternalError(f"Invalid dest_path: {dest_path!r}") | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1316 self.bridge.file_download_complete( |
486
f826ebb7f605
code: update `fileDownloadComplete` bridge call, following backend change
Goffi <goffi@goffi.org>
parents:
463
diff
changeset
|
1317 data_format.serialise({"uri": url.geturl()}), |
420 | 1318 str(dest_path), |
1319 '' if not options else data_format.serialise(options), | |
1320 profile, | |
1321 callback=callback, | |
1322 errback=errback | |
1323 ) | |
1324 | |
396
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1325 def notify(self, type_, entity=None, message=None, subject=None, callback=None, |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1326 cb_args=None, widget=None, profile=C.PROF_KEY_NONE): |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1327 super().notify( |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1328 type_=type_, entity=entity, message=message, subject=subject, |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1329 callback=callback, cb_args=cb_args, widget=widget, profile=profile) |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1330 self.desktop_notif(message, title=subject) |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1331 |
419
b047d14e4be5
notifs: fixed desktop notification duration
Goffi <goffi@goffi.org>
parents:
414
diff
changeset
|
1332 def desktop_notif(self, message, title='', duration=5): |
312 | 1333 global notification |
184
c63922860f80
chat: show desktop notification and/or note when suitable
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
1334 if notification is not None: |
229
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1335 try: |
396
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1336 log.debug( |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1337 f"sending desktop notification (duration: {duration}):\n" |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1338 f"{title}\n" |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1339 f"{message}" |
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1340 ) |
229
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1341 notification.notify(title=title, |
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1342 message=message, |
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1343 app_name=C.APP_NAME, |
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1344 app_icon=self.app.icon, |
396
ae6f7fd1cb0e
chat: use QuickApp.notify and clear notifications when selected.
Goffi <goffi@goffi.org>
parents:
388
diff
changeset
|
1345 timeout=duration) |
229
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1346 except Exception as e: |
312 | 1347 log.warning(_("Can't use notifications, disabling: {msg}").format( |
229
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1348 msg = e)) |
ab523cc967bb
core(notification): display a warning and disable notifications if something is going wrong
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
1349 notification = None |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1350 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1351 def get_parent_wh_wrapper(self, wid): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1352 """Retrieve parent WHWrapper instance managing a widget |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1353 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1354 @param wid(Widget): widget to check |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1355 @return (WHWrapper, None): found instance if any, else None |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1356 """ |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1357 wh = self.get_ancestor_widget(wid, widgets_handler.WHWrapper) |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1358 if wh is None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1359 # we may have a screen |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1360 try: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1361 sm = wid.screen_manager |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1362 except (exceptions.InternalError, exceptions.NotFound): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1363 return None |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1364 else: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1365 wh = self.get_ancestor_widget(sm, widgets_handler.WHWrapper) |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1366 return wh |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
352
diff
changeset
|
1367 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
1368 def get_ancestor_widget(self, wid, cls): |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1369 """Retrieve an ancestor of given class |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1370 |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1371 @param wid(Widget): current widget |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1372 @param cls(type): class of the ancestor to retrieve |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1373 @return (Widget, None): found instance or None |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1374 """ |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1375 parent = wid.parent |
331
d36040493434
core: fixed handling of classes with multiple inheritances in getAncestorWidget
Goffi <goffi@goffi.org>
parents:
323
diff
changeset
|
1376 while parent and not isinstance(parent, cls): |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1377 parent = parent.parent |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
318
diff
changeset
|
1378 return parent |