Mercurial > libervia-backend
diff frontends/src/primitivus/primitivus @ 2098:e0066920a661
primitivus, jp: dynamic bridge + fixed D-Bus bridge:
Primitivus and jp can now load the bridge specified in sat.conf, but they are only working with D-Bus so far (need to change all sync calls to async).
Exit code 3 is used for Bridge init error.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 18 Dec 2016 16:28:51 +0100 |
parents | 4633cfcbcccb |
children | c42aab22c2c0 |
line wrap: on
line diff
--- a/frontends/src/primitivus/primitivus Sun Dec 18 16:28:46 2016 +0100 +++ b/frontends/src/primitivus/primitivus Sun Dec 18 16:28:51 2016 +0100 @@ -28,7 +28,6 @@ import urwid from urwid.util import is_wide_char from urwid_satext import sat_widgets -from sat_frontends.bridge.dbus_bridge import Bridge from sat_frontends.quick_frontend.quick_app import QuickApp from sat_frontends.quick_frontend import quick_utils from sat_frontends.quick_frontend import quick_chat @@ -41,9 +40,17 @@ from sat_frontends.primitivus.keys import action_key_map as a_key from sat_frontends.primitivus import config from sat_frontends.tools.misc import InputHistory +from sat.tools.common import dynamic_import from sat_frontends.tools import jid import signal import sys +## bridge handling +# we get bridge name from conf and initialise the right class accordingly +main_config = sat_config.parseMainConf() +bridge_name = sat_config.getConfig(main_config, '', 'bridge', 'dbus') +if 'dbus' not in bridge_name: + print(u"only D-Bus bridge is currently supported") + sys.exit(3) class EditBar(sat_widgets.ModalEdit): @@ -276,11 +283,18 @@ AVATAR_HANDLER = False def __init__(self): - QuickApp.__init__(self, create_bridge=Bridge, xmlui=xmlui, check_options=quick_utils.check_options) - + bridge_module = dynamic_import.bridge(bridge_name, 'sat_frontends.bridge') + if bridge_module is None: + log.error(u"Can't import {} bridge".format(bridge_name)) + sys.exit(3) + else: + log.debug(u"Loading {} bridge".format(bridge_name)) + QuickApp.__init__(self, bridge_factory=bridge_module.Bridge, xmlui=xmlui, check_options=quick_utils.check_options, connect_bridge=False) ## main loop setup ## - self.main_widget = ProfileManager(self) - self.loop = urwid.MainLoop(self.main_widget, C.PALETTE, event_loop=urwid.GLibEventLoop(), input_filter=self.inputFilter, unhandled_input=self.keyHandler) + event_loop = urwid.GLibEventLoop if 'dbus' in bridge_name else urwid.TwistedEventLoop + self.loop = urwid.MainLoop(urwid.SolidFill(), C.PALETTE, event_loop=event_loop(), input_filter=self.inputFilter, unhandled_input=self.keyHandler) + + def onBridgeConnected(self): ##misc setup## self._visible_widgets = set() @@ -302,6 +316,9 @@ sys.stdout.write("\033[?2004h") self._bracketed_mode_set = True + self.loop.widget = self.main_widget = ProfileManager(self) + self.postInit() + @property def visible_widgets(self): return self._visible_widgets @@ -343,8 +360,7 @@ pass def start(self): - self.i = 0 - self.loop.set_alarm_in(0,lambda a,b: self.postInit()) + self.connectBridge() self.loop.run() def postInit(self): @@ -813,5 +829,5 @@ else: log.warning(u"No ContactList widget found for profile {}".format(profile)) -sat = PrimitivusApp() -sat.start() +primitivus = PrimitivusApp() +primitivus.start()