# HG changeset patch # User Goffi # Date 1439881278 -7200 # Node ID 731fbed0b9cfc537be7773cd2ea55990d4726fd6 # Parent ceba6fd777394a0186b77b2249c299e316901a1e quick_frontend, primitivus: handling of actionNew signal diff -r ceba6fd77739 -r 731fbed0b9cf frontends/src/primitivus/primitivus --- a/frontends/src/primitivus/primitivus Tue Aug 18 09:01:18 2015 +0200 +++ b/frontends/src/primitivus/primitivus Tue Aug 18 09:01:18 2015 +0200 @@ -280,7 +280,7 @@ 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 @@ 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 @@ 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 @@ 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): diff -r ceba6fd77739 -r 731fbed0b9cf frontends/src/quick_frontend/quick_app.py --- a/frontends/src/quick_frontend/quick_app.py Tue Aug 18 09:01:18 2015 +0200 +++ b/frontends/src/quick_frontend/quick_app.py Tue Aug 18 09:01:18 2015 +0200 @@ -199,12 +199,14 @@ """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 @@ 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 @@ 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 @@ 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 @@ 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") diff -r ceba6fd77739 -r 731fbed0b9cf src/plugins/plugin_misc_static_blog.py --- a/src/plugins/plugin_misc_static_blog.py Tue Aug 18 09:01:18 2015 +0200 +++ b/src/plugins/plugin_misc_static_blog.py Tue Aug 18 09:01:18 2015 +0200 @@ -83,6 +83,8 @@ @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: