Mercurial > libervia-desktop-kivy
annotate cagou/core/platform_/base.py @ 412:7c6149c249c1
chat: attachment sending:
- files to send are not sent directly anymore, but added to attachment, and linked to the
message when it is sent, this is more user friendly and avoid the accidental sending of
wrong file
- user can remove the attachment before sending the message, using the "close" symbol
- new "Chat.addAtachment" method
- upload progress is shown on the AttachmentItem thanks to the "progress" property
- AttachmentItem stays in the attachments layout until uploaded or an error happens.
Messages can still be sent while the item is being uploaded.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 23 Feb 2020 15:39:03 +0100 |
parents | 355326a3501c |
children | c466678c57b2 |
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 |
378 | 4 # Copyright (C) 2016-2020 Jérôme Poisson (goffi@goffi.org) |
342
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 |
408
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
19 import sys |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
20 import webbrowser |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
21 from pathlib import Path |
408
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
22 import subprocess |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
23 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
|
24 from kivy.config import Config as KivyConfig |
408
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
25 from sat.core.i18n import _ |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
26 from sat.core.log import getLogger |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
27 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
|
28 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
|
29 from cagou import G |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
30 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
31 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
32 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
|
33 |
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 class Platform: |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 """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
|
37 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 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
|
39 # 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
|
40 |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
41 # this option doesn't make sense on Android and cause troubles, so we only |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
42 # activate it for other platforms (cf. https://github.com/kivy/kivy/issues/6229) |
342
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 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
|
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_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
|
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_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
|
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_initFrontendState(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 |
370
1a12bbd80943
android: autoconnect profile using the new `profileAutoconnectGet` backend method:
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
54 def do_postInit(self): |
1a12bbd80943
android: autoconnect profile using the new `profileAutoconnectGet` backend method:
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
55 return True |
1a12bbd80943
android: autoconnect profile using the new `profileAutoconnectGet` backend method:
Goffi <goffi@goffi.org>
parents:
357
diff
changeset
|
56 |
342
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_pause(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 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 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
|
61 pass |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 |
89799148f894
core: use classes and factory to handle platform specific behaviours in a generic way
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 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
|
64 pass |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
65 |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
66 def on_key_back_root(self): |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
67 """Back key is called while being on root widget""" |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
68 return True |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
69 |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
70 def on_key_back_share(self, share_widget): |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
71 """Back key is called while being on share widget""" |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
72 share_widget.close() |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
73 return True |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
344
diff
changeset
|
74 |
408
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
75 def _on_new_window(self): |
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
76 """Launch a new instance of Cagou to have an extra window""" |
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
77 subprocess.Popen(sys.argv) |
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
78 |
376 | 79 def on_extra_menu_init(self, extra_menu): |
408
355326a3501c
platform (base): added a menu item to create a new window
Goffi <goffi@goffi.org>
parents:
400
diff
changeset
|
80 extra_menu.addItem(_('new window'), self._on_new_window) |
376 | 81 |
372
1481f09c9175
settings (android): don't expose autoconnect parameters:
Goffi <goffi@goffi.org>
parents:
370
diff
changeset
|
82 def updateParamsExtra(self, extra): |
1481f09c9175
settings (android): don't expose autoconnect parameters:
Goffi <goffi@goffi.org>
parents:
370
diff
changeset
|
83 pass |
1481f09c9175
settings (android): don't expose autoconnect parameters:
Goffi <goffi@goffi.org>
parents:
370
diff
changeset
|
84 |
400
71f51198478c
android: handle runtime permissions:
Goffi <goffi@goffi.org>
parents:
378
diff
changeset
|
85 def check_plugin_permissions(self, plug_info, callback, errback): |
71f51198478c
android: handle runtime permissions:
Goffi <goffi@goffi.org>
parents:
378
diff
changeset
|
86 """Check that plugin permissions for this platform are granted""" |
71f51198478c
android: handle runtime permissions:
Goffi <goffi@goffi.org>
parents:
378
diff
changeset
|
87 callback() |
71f51198478c
android: handle runtime permissions:
Goffi <goffi@goffi.org>
parents:
378
diff
changeset
|
88 |
344
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
89 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
|
90 """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
|
91 |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
92 @param url(str): URL to open |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
93 @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
|
94 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
|
95 """ |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
96 parsed_url = urlparse(url) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
97 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
|
98 # 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
|
99 # so we download them before opening |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
100 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
|
101 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
|
102 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
|
103 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
|
104 if quick_widget is None: |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
105 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
|
106 return |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
107 profile = quick_widget.profile |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
108 G.host.bridge.fileDownloadComplete( |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
109 url, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
110 str(dest_path), |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
111 '', |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
112 profile, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
113 callback=webbrowser.open, |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
114 errback=G.host.errback |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
115 ) |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
116 else: |
83697218b9b2
core: handle URLs opening in a per-platform way:
Goffi <goffi@goffi.org>
parents:
342
diff
changeset
|
117 webbrowser.open(url) |