Mercurial > libervia-desktop-kivy
diff libervia/desktop_kivy/plugins/plugin_transfer_file.py @ 514:d78728d7fd6a
plugin wid calls, core: implements WebRTC DataChannel file transfer:
- Add a new "file" icon in call UI to send a file via WebRTC.
- Handle new preflight mechanism, and WebRTC file transfer.
- Native file chooser handling has been moved to new `core.file_chooser` module, and now
supports "save" and "dir" modes (based on `plyer`).
rel 442
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 06 Apr 2024 13:37:27 +0200 |
parents | b3cedbee561d |
children |
line wrap: on
line diff
--- a/libervia/desktop_kivy/plugins/plugin_transfer_file.py Thu Jan 18 23:46:31 2024 +0100 +++ b/libervia/desktop_kivy/plugins/plugin_transfer_file.py Sat Apr 06 13:37:27 2024 +0200 @@ -1,7 +1,7 @@ #!/usr/bin/env python3 -#Libervia Desktop-Kivy +# Libervia Desktop-Kivy # Copyright (C) 2016-2021 Jérôme Poisson (goffi@goffi.org) # This program is free software: you can redistribute it and/or modify @@ -17,15 +17,15 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -import threading +from functools import partial import sys -from functools import partial + from libervia.backend.core import log as logging from libervia.backend.core.i18n import _ -from kivy.uix.boxlayout import BoxLayout + from kivy import properties -from kivy.clock import Clock -from plyer import filechooser, storagepath +from kivy.uix.boxlayout import BoxLayout +from libervia.desktop_kivy.core import file_chooser log = logging.getLogger(__name__) @@ -44,38 +44,23 @@ default_path = properties.StringProperty() -class FileTransmitter(BoxLayout): - callback = properties.ObjectProperty() - cancel_cb = properties.ObjectProperty() - native_filechooser = True - default_path = storagepath.get_home_dir() +class FileTransmitter(BoxLayout, file_chooser.FileChooser): + """Widget to transmit files""" def __init__(self, *args, **kwargs): - if sys.platform == 'android': + if sys.platform == "android": self.native_filechooser = False self.default_path = storagepath.get_downloads_dir() - super(FileTransmitter, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) if self.native_filechooser: - thread = threading.Thread(target=self._native_file_chooser) - thread.start() + self.open() else: - self.add_widget(FileChooserBox(default_path = self.default_path, - callback=self.on_files, - cancel_cb=partial(self.cancel_cb, self))) - - def _native_file_chooser(self, *args, **kwargs): - title=_("Please select a file to upload") - files = filechooser.open_file(title=title, - path=self.default_path, - multiple=False, - preview=True) - # we want to leave the thread when calling on_files, so we use Clock - Clock.schedule_once(lambda *args: self.on_files(files=files), 0) - - def on_files(self, files): - if files: - self.callback(files[0]) - else: - self.cancel_cb(self) + self.add_widget( + FileChooserBox( + default_path=self.default_path, + callback=self.on_files, + cancel_cb=partial(self.cancel_cb, self), + ) + )