Mercurial > libervia-backend
comparison 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 |
comparison
equal
deleted
inserted
replaced
2097:4bc408b549cd | 2098:e0066920a661 |
---|---|
26 log = logging.getLogger(__name__) | 26 log = logging.getLogger(__name__) |
27 from sat.tools import config as sat_config | 27 from sat.tools import config as sat_config |
28 import urwid | 28 import urwid |
29 from urwid.util import is_wide_char | 29 from urwid.util import is_wide_char |
30 from urwid_satext import sat_widgets | 30 from urwid_satext import sat_widgets |
31 from sat_frontends.bridge.dbus_bridge import Bridge | |
32 from sat_frontends.quick_frontend.quick_app import QuickApp | 31 from sat_frontends.quick_frontend.quick_app import QuickApp |
33 from sat_frontends.quick_frontend import quick_utils | 32 from sat_frontends.quick_frontend import quick_utils |
34 from sat_frontends.quick_frontend import quick_chat | 33 from sat_frontends.quick_frontend import quick_chat |
35 from sat_frontends.primitivus.profile_manager import ProfileManager | 34 from sat_frontends.primitivus.profile_manager import ProfileManager |
36 from sat_frontends.primitivus.contact_list import ContactList | 35 from sat_frontends.primitivus.contact_list import ContactList |
39 from sat_frontends.primitivus.progress import Progress | 38 from sat_frontends.primitivus.progress import Progress |
40 from sat_frontends.primitivus.notify import Notify | 39 from sat_frontends.primitivus.notify import Notify |
41 from sat_frontends.primitivus.keys import action_key_map as a_key | 40 from sat_frontends.primitivus.keys import action_key_map as a_key |
42 from sat_frontends.primitivus import config | 41 from sat_frontends.primitivus import config |
43 from sat_frontends.tools.misc import InputHistory | 42 from sat_frontends.tools.misc import InputHistory |
43 from sat.tools.common import dynamic_import | |
44 from sat_frontends.tools import jid | 44 from sat_frontends.tools import jid |
45 import signal | 45 import signal |
46 import sys | 46 import sys |
47 ## bridge handling | |
48 # we get bridge name from conf and initialise the right class accordingly | |
49 main_config = sat_config.parseMainConf() | |
50 bridge_name = sat_config.getConfig(main_config, '', 'bridge', 'dbus') | |
51 if 'dbus' not in bridge_name: | |
52 print(u"only D-Bus bridge is currently supported") | |
53 sys.exit(3) | |
47 | 54 |
48 | 55 |
49 class EditBar(sat_widgets.ModalEdit): | 56 class EditBar(sat_widgets.ModalEdit): |
50 """ | 57 """ |
51 The modal edit bar where you would enter messages and commands. | 58 The modal edit bar where you would enter messages and commands. |
274 class PrimitivusApp(QuickApp, InputHistory): | 281 class PrimitivusApp(QuickApp, InputHistory): |
275 MB_HANDLER = False | 282 MB_HANDLER = False |
276 AVATAR_HANDLER = False | 283 AVATAR_HANDLER = False |
277 | 284 |
278 def __init__(self): | 285 def __init__(self): |
279 QuickApp.__init__(self, create_bridge=Bridge, xmlui=xmlui, check_options=quick_utils.check_options) | 286 bridge_module = dynamic_import.bridge(bridge_name, 'sat_frontends.bridge') |
280 | 287 if bridge_module is None: |
288 log.error(u"Can't import {} bridge".format(bridge_name)) | |
289 sys.exit(3) | |
290 else: | |
291 log.debug(u"Loading {} bridge".format(bridge_name)) | |
292 QuickApp.__init__(self, bridge_factory=bridge_module.Bridge, xmlui=xmlui, check_options=quick_utils.check_options, connect_bridge=False) | |
281 ## main loop setup ## | 293 ## main loop setup ## |
282 self.main_widget = ProfileManager(self) | 294 event_loop = urwid.GLibEventLoop if 'dbus' in bridge_name else urwid.TwistedEventLoop |
283 self.loop = urwid.MainLoop(self.main_widget, C.PALETTE, event_loop=urwid.GLibEventLoop(), input_filter=self.inputFilter, unhandled_input=self.keyHandler) | 295 self.loop = urwid.MainLoop(urwid.SolidFill(), C.PALETTE, event_loop=event_loop(), input_filter=self.inputFilter, unhandled_input=self.keyHandler) |
296 | |
297 def onBridgeConnected(self): | |
284 | 298 |
285 ##misc setup## | 299 ##misc setup## |
286 self._visible_widgets = set() | 300 self._visible_widgets = set() |
287 self.notif_bar = sat_widgets.NotificationBar() | 301 self.notif_bar = sat_widgets.NotificationBar() |
288 urwid.connect_signal(self.notif_bar, 'change', self.onNotification) | 302 urwid.connect_signal(self.notif_bar, 'change', self.onNotification) |
299 self._bracketed_paste = C.bool(sat_config.getConfig(sat_conf, C.SECTION_NAME, 'bracketed_paste', 'false')) | 313 self._bracketed_paste = C.bool(sat_config.getConfig(sat_conf, C.SECTION_NAME, 'bracketed_paste', 'false')) |
300 if self._bracketed_paste: | 314 if self._bracketed_paste: |
301 log.debug("setting bracketed paste mode as requested") | 315 log.debug("setting bracketed paste mode as requested") |
302 sys.stdout.write("\033[?2004h") | 316 sys.stdout.write("\033[?2004h") |
303 self._bracketed_mode_set = True | 317 self._bracketed_mode_set = True |
318 | |
319 self.loop.widget = self.main_widget = ProfileManager(self) | |
320 self.postInit() | |
304 | 321 |
305 @property | 322 @property |
306 def visible_widgets(self): | 323 def visible_widgets(self): |
307 return self._visible_widgets | 324 return self._visible_widgets |
308 | 325 |
341 self.loop.draw_screen() | 358 self.loop.draw_screen() |
342 except AttributeError: | 359 except AttributeError: |
343 pass | 360 pass |
344 | 361 |
345 def start(self): | 362 def start(self): |
346 self.i = 0 | 363 self.connectBridge() |
347 self.loop.set_alarm_in(0,lambda a,b: self.postInit()) | |
348 self.loop.run() | 364 self.loop.run() |
349 | 365 |
350 def postInit(self): | 366 def postInit(self): |
351 try: | 367 try: |
352 config.applyConfig(self) | 368 config.applyConfig(self) |
811 if contact_list_wid is not None: | 827 if contact_list_wid is not None: |
812 contact_list_wid.status_bar.setPresenceStatus(show, status) | 828 contact_list_wid.status_bar.setPresenceStatus(show, status) |
813 else: | 829 else: |
814 log.warning(u"No ContactList widget found for profile {}".format(profile)) | 830 log.warning(u"No ContactList widget found for profile {}".format(profile)) |
815 | 831 |
816 sat = PrimitivusApp() | 832 primitivus = PrimitivusApp() |
817 sat.start() | 833 primitivus.start() |