quick_frontend, primitivus: handling of actionNew signal

This commit is contained in:
Goffi 2015-08-18 09:01:18 +02:00
commit 3312c3bf97
3 changed files with 52 additions and 44 deletions

View file

@ -280,7 +280,7 @@ class PrimitivusTopWidget(sat_widgets.FocusPile):
class PrimitivusApp(QuickApp, InputHistory):
def __init__(self):
QuickApp.__init__(self, create_bridge=DBusBridgeFrontend, check_options=quick_utils.check_options)
QuickApp.__init__(self, create_bridge=DBusBridgeFrontend, xmlui=xmlui, check_options=quick_utils.check_options)
## main loop setup ##
self.main_widget = ProfileManager(self)
@ -583,6 +583,13 @@ class PrimitivusApp(QuickApp, InputHistory):
log.error(_('unmanaged dialog type: %s'), type_)
self.showPopUp(popup)
def dialogFailure(self, failure):
"""Show a failure that has been returned by an asynchronous bridge method.
@param failure (defer.Failure): Failure instance
"""
self.showPopUp(sat_widgets.Alert(failure.classname, failure.message, ok_cb=self.removePopUp))
def onNotification(self, notif_bar):
"""Called when a new notification has been received"""
if not isinstance(self.main_widget, PrimitivusTopWidget):
@ -594,43 +601,8 @@ class PrimitivusApp(QuickApp, InputHistory):
else:
self.main_widget.show('notif_bar')
def launchAction(self, callback_id, data=None, callback=None, profile=C.PROF_KEY_NONE):
""" Launch a dynamic action
@param callback_id: id of the action to launch
@param data: data needed only for certain actions
@param callback: if not None and 'validated' key is present, it will be called with the following parameters:
- callback_id
- data
- profile
@param profile: %(doc_profile)s
"""
if data is None:
data = dict()
def action_cb(data):
if not data:
# action was a one shot, nothing to do
pass
elif "xmlui" in data:
ui = xmlui.create(self, xml_data=data['xmlui'], callback=callback, profile=profile)
ui.show()
elif 'validated' in data:
pass # this key is managed below
else:
self.showPopUp(sat_widgets.Alert(_("Error"), _(u"Unmanaged action result"), ok_cb=self.removePopUp))
if callback and 'validated' in data:
callback(callback_id, data, profile)
self.bridge.launchAction(callback_id, data, profile, callback=action_cb, errback=self.showFailure)
def showFailure(self, failure):
"""Show a failure that has been returned by an asynchronous bridge method.
@param failure (defer.Failure): Failure instance
"""
self.showPopUp(sat_widgets.Alert(failure.classname, failure.message, ok_cb=self.removePopUp))
def _actionManagerUnknownError(self):
self.showPopUp(sat_widgets.Alert(_("Error"), _(u"Unmanaged action"), ok_cb=self.removePopUp))
def askConfirmationHandler(self, confirmation_id, confirmation_type, data, profile):
answer_data = {}
@ -715,7 +687,7 @@ class PrimitivusApp(QuickApp, InputHistory):
def onJoinRoom(self, button, edit):
self.removePopUp()
room_jid = jid.JID(edit.get_edit_text())
self.bridge.joinMUC(room_jid, self.profiles[self.current_profile].whoami.node, {}, self.current_profile, callback=lambda dummy: None, errback=self.showFailure)
self.bridge.joinMUC(room_jid, self.profiles[self.current_profile].whoami.node, {}, self.current_profile, callback=lambda dummy: None, errback=self._notifyFailure)
#MENU EVENTS#
def onConnectRequest(self, menu):

View file

@ -199,12 +199,14 @@ class QuickApp(object):
"""This class contain the main methods needed for the frontend"""
MB_HANDLE = True # Set to false if the frontend doesn't manage microblog
def __init__(self, create_bridge, check_options=None):
def __init__(self, create_bridge, xmlui, check_options=None):
"""Create a frontend application
@param create_bridge: method to use to create the Bridge
@param xmlui: xmlui module
@param check_options: method to call to check options (usually command line arguments)
"""
self.xmlui = xmlui
self.menus = quick_menus.QuickMenusManager(self)
ProfileManager.host = self
self.profiles = ProfilesManager()
@ -238,6 +240,7 @@ class QuickApp(object):
ProfileManager.bridge = self.bridge
self.registerSignal("connected")
self.registerSignal("disconnected")
self.registerSignal("actionNew")
self.registerSignal("newContact")
self.registerSignal("newMessage")
self.registerSignal("newAlert")
@ -463,6 +466,9 @@ class QuickApp(object):
self.contact_lists[profile].clearContacts()
self.setPresenceStatus(C.PRESENCE_UNAVAILABLE, '', profile=profile)
def actionNewHandler(self, action_data, id_, profile):
self._actionManager(action_data, profile=profile)
def newContactHandler(self, jid_s, attributes, groups, profile):
entity = jid.JID(jid_s)
_groups = list(groups)
@ -672,6 +678,9 @@ class QuickApp(object):
def showAlert(self, message):
pass #FIXME
def dialogFailure(self, failure):
log.warning(u"Failure: {}".format(failure))
def updateAlertsCounter(self):
"""Update the over whole alerts counter
@ -713,18 +722,43 @@ class QuickApp(object):
def actionResultHandler(self, type, id, data, profile):
raise NotImplementedError
def _actionManagerUnknownError(self):
raise NotImplementedError
def _actionManager(self, action_data, callback=None, profile=C.PROF_KEY_NONE):
if "xmlui" in action_data:
ui = self.xmlui.create(self, xml_data=action_data['xmlui'], callback=callback, profile=profile)
ui.show()
else:
self._actionManagerUnknownError()
def launchAction(self, callback_id, data=None, callback=None, profile=C.PROF_KEY_NONE):
"""Launch a dynamic action
""" Launch a dynamic action
@param callback_id: id of the action to launch
@param data: data needed only for certain actions
@param callback: if not None and 'validated' key is present, it will be called with the following parameters:
- callback_id
- data
- profile_key
@param profile_key: %(doc_profile)s
- profile
@param profile: %(doc_profile)s
"""
raise NotImplementedError
if data is None:
data = dict()
def action_cb(data):
if not data:
# action was a one shot, nothing to do
pass
elif 'validated' in data:
if callback:
callback(callback_id, data, profile)
else:
self._actionManager(data, profile=profile)
self.bridge.launchAction(callback_id, data, profile, callback=action_cb, errback=self.dialogFailure)
def disconnect(self, profile):
log.info("disconnecting")

View file

@ -83,6 +83,8 @@ class StaticBlog(object):
@param profile: %(doc_profile)s
@return: dict
"""
# FIXME: "public_blog" key has been removed
# TODO: replace this with a more generic widget call with URIs
try:
user_jid = jid.JID(menu_data['jid'])
except KeyError: