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()