comparison libervia/desktop_kivy/core/cagou_main.py @ 498:3b627382e681

core: support async methods and bridge
author Goffi <goffi@goffi.org>
date Mon, 02 Oct 2023 17:24:01 +0200
parents 232a723aae45
children bbef1a413515
comparison
equal deleted inserted replaced
497:232a723aae45 498:3b627382e681
15 15
16 # You should have received a copy of the GNU Affero General Public License 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/>. 17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 18
19 19
20 import asyncio
20 import os.path 21 import os.path
21 import glob 22 import glob
22 import sys 23 import sys
23 from pathlib import Path 24 from pathlib import Path
24 from urllib import parse as urlparse 25 from urllib import parse as urlparse
303 # we don't want default Kivy's behaviour of displaying 304 # we don't want default Kivy's behaviour of displaying
304 # a settings screen when pressing F1 or platform specific key 305 # a settings screen when pressing F1 or platform specific key
305 return 306 return
306 307
307 def build(self): 308 def build(self):
309 # we connect async bridge here as we must have a running loop
310 self.host.a_bridge.bridge_connect()
311
308 Window.bind(on_keyboard=self.key_input) 312 Window.bind(on_keyboard=self.key_input)
309 Window.bind(on_dropfile=self.on_dropfile) 313 Window.bind(on_dropfile=self.on_dropfile)
310 wid = LiberviaDesktopKivyRootWidget(Label(text=_("Loading please wait"))) 314 wid = LiberviaDesktopKivyRootWidget(Label(text=_("Loading please wait")))
311 local_platform.on_app_build(wid) 315 local_platform.on_app_build(wid)
312 return wid 316 return wid
416 if bridge_module is None: 420 if bridge_module is None:
417 log.error(f"Can't import {bridge_name} bridge") 421 log.error(f"Can't import {bridge_name} bridge")
418 sys.exit(3) 422 sys.exit(3)
419 else: 423 else:
420 log.debug(f"Loading {bridge_name} bridge") 424 log.debug(f"Loading {bridge_name} bridge")
421 super(LiberviaDesktopKivy, self).__init__(bridge_factory=bridge_module.bridge, 425 super(LiberviaDesktopKivy, self).__init__(
422 xmlui=xmlui, 426 bridge_factory=bridge_module.bridge,
423 check_options=quick_utils.check_options, 427 xmlui=xmlui,
424 connect_bridge=False) 428 check_options=quick_utils.check_options,
429 connect_bridge=False,
430 async_bridge_factory = bridge_module.AIOBridge
431 )
425 self._import_kv() 432 self._import_kv()
426 self.app = LiberviaDesktopKivyApp() 433 self.app = LiberviaDesktopKivyApp()
427 self.app.host = self 434 self.app.host = self
428 log_level = config.config_get( 435 log_level = config.config_get(
429 main_config, 436 main_config,
526 super(LiberviaDesktopKivy, self)._bridge_eb(failure) 533 super(LiberviaDesktopKivy, self)._bridge_eb(failure)
527 534
528 def run(self): 535 def run(self):
529 self.connect_bridge() 536 self.connect_bridge()
530 self.app.bind(on_stop=self.onStop) 537 self.app.bind(on_stop=self.onStop)
531 self.app.run() 538 loop = asyncio.get_event_loop()
539 loop.run_until_complete(
540 self.app.async_run("asyncio")
541 )
532 542
533 def onStop(self, obj): 543 def onStop(self, obj):
534 try: 544 try:
535 libervia_instance = self.libervia_backend 545 libervia_instance = self.libervia_backend
536 except AttributeError: 546 except AttributeError: