Mercurial > libervia-desktop-kivy
annotate cagou/core/platform_/base.py @ 353:19422bbd9c8e
core (widgets handler): refactoring:
- CagouWidget now has class properties (to be overridden when needed) which indicate how
if the widget handle must add a wrapping ScreenManager (global_screen_manager) or show
all instances of the class in a Carousel (collection_carousel). If none of those
options is used, a ScrollView will be wrapping the widget, to be sure that the widget
will be resized correctly when necessary (without it, the widget could still be
drawn in the backround when the size is too small and overflow on the WidgetWrapper,
this would be the case with WidgetSelector)
- some helper methods/properties have been added to CagouWidget. Check docstrings for
details
- better handling of (in)visible widget in WidgetsHandler
- thanks to the new wrapping ScrollView, WidgetSelect will show scroll bars if the
available space is too small.
- bugs fixes
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 17 Jan 2020 18:44:35 +0100 |
parents | 83697218b9b2 |
children | 4d3a0c4f2430 |
rev | line source |
---|---|
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # Copyright (C) 2016-2019 Jérôme Poisson (goffi@goffi.org) |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
19 import webbrowser |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
20 from pathlib import Path |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
21 from urllib.parse import urlparse |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from kivy.config import Config as KivyConfig |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
23 from sat.core.log import getLogger |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
24 from sat.tools.common import files_utils |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
25 from sat_frontends.quick_frontend.quick_widgets import QuickWidget |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
26 from cagou import G |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
27 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
28 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
29 log = getLogger(__name__) |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 class Platform: |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 """Base class to handle platform specific behaviours""" |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 def init_platform(self): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 # we don't want multi-touch emulation with mouse |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 # this option doesn't make sense on Android and cause troubles, so we only activate |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 # it for other platforms (cf. https://github.com/kivy/kivy/issues/6229) |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 KivyConfig.set('input', 'mouse', 'mouse,disable_multitouch') |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 def on_app_build(self, wid): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 def on_host_init(self, host): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 def on_initFrontendState(self): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 def on_pause(self): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 def on_resume(self): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 def on_stop(self): |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 pass |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
59 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
60 def open_url(self, url, wid=None): |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
61 """Open an URL in the way appropriate for the platform |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
62 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
63 @param url(str): URL to open |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
64 @param wid(CagouWidget, None): widget requesting the opening |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
65 it may influence the way the URL is opened |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
66 """ |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
67 parsed_url = urlparse(url) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
68 if parsed_url.scheme == "aesgcm" and wid is not None: |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
69 # aesgcm files need to be decrypted first |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
70 # so we download them before opening |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
71 name = Path(parsed_url.path).name.strip() or "unnamed_file" |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
72 log.info(f"downloading/decrypting file {name!r}") |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
73 dest_path = files_utils.get_unique_name(Path(G.host.downloads_dir)/name) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
74 quick_widget = G.host.getAncestorWidget(wid, QuickWidget) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
75 if quick_widget is None: |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
76 log.error("Can't find ancestor QuickWidget") |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
77 return |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
78 profile = quick_widget.profile |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
79 G.host.bridge.fileDownloadComplete( |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
80 url, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
81 str(dest_path), |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
82 '', |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
83 profile, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
84 callback=webbrowser.open, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
85 errback=G.host.errback |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
86 ) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
87 else: |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
88 webbrowser.open(url) |