Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2010-02-08 17:08:40 +0300
committerÉric Araujo <merwok@netwok.org>2010-02-08 17:08:40 +0300
commitfedd7dc8e22950f0dbe297443860662368c249d1 (patch)
treea6426601d50b3020348fd6574107c9fd6f9dfb0e /src/adhoc_commands.py
parent1a69ea93f1316e9f98d50ac8a212498b42d3cf60 (diff)
convert tabs to spaces in source code thanks to reindent.py
holy diff batman!
Diffstat (limited to 'src/adhoc_commands.py')
-rw-r--r--src/adhoc_commands.py1028
1 files changed, 513 insertions, 515 deletions
diff --git a/src/adhoc_commands.py b/src/adhoc_commands.py
index a657b8203..29cc65f2d 100644
--- a/src/adhoc_commands.py
+++ b/src/adhoc_commands.py
@@ -35,537 +35,535 @@ import dialogs
import dataforms_widget
class CommandWindow:
- """
- Class for a window for single ad-hoc commands session
-
- Note, that there might be more than one for one account/jid pair in one
- moment.
-
- TODO: Maybe put this window into MessageWindow? consider this when it will
- be possible to manage more than one window of one.
- TODO: Account/jid pair in MessageWindowMgr.
- TODO: GTK 2.10 has a special wizard-widget, consider using it...
- """
-
- def __init__(self, account, jid, commandnode=None):
- """
- Create new window
- """
-
- # an account object
- self.account = gajim.connections[account]
- self.jid = jid
-
- self.pulse_id=None # to satisfy self.setup_pulsing()
- self.commandlist=None # a list of (commandname, commanddescription)
-
- # command's data
- self.commandnode = commandnode
- self.sessionid = None
- self.dataform = None
- self.allow_stage3_close = False
-
- # retrieving widgets from xml
- self.xml = gtkgui_helpers.get_gtk_builder('adhoc_commands_window.ui')
- self.window = self.xml.get_object('adhoc_commands_window')
- self.window.connect('delete-event', self.on_adhoc_commands_window_delete_event)
- for name in ('back_button', 'forward_button',
- 'execute_button','close_button','stages_notebook',
- 'retrieving_commands_stage_vbox',
- 'command_list_stage_vbox','command_list_vbox',
- 'sending_form_stage_vbox','sending_form_progressbar',
- 'notes_label','no_commands_stage_vbox','error_stage_vbox',
- 'error_description_label'):
- self.__dict__[name] = self.xml.get_object(name)
-
- # creating data forms widget
- self.data_form_widget = dataforms_widget.DataFormWidget()
- self.data_form_widget.show()
- self.sending_form_stage_vbox.pack_start(self.data_form_widget)
-
- if self.commandnode:
- # Execute command
- self.stage3()
- else:
- # setting initial stage
- self.stage1()
-
- # displaying the window
- self.xml.connect_signals(self)
- self.window.show_all()
-
- # These functions are set up by appropriate stageX methods.
- def stage_finish(self, *anything):
- pass
-
- def stage_back_button_clicked(self, *anything):
- assert False
-
- def stage_forward_button_clicked(self, *anything):
- assert False
-
- def stage_execute_button_clicked(self, *anything):
- assert False
-
- def stage_close_button_clicked(self, *anything):
- assert False
-
- def stage_adhoc_commands_window_delete_event(self, *anything):
- assert False
-
- def do_nothing(self, *anything):
- return False
-
- # Widget callbacks...
- def on_back_button_clicked(self, *anything):
- return self.stage_back_button_clicked(*anything)
-
- def on_forward_button_clicked(self, *anything):
- return self.stage_forward_button_clicked(*anything)
-
- def on_execute_button_clicked(self, *anything):
- return self.stage_execute_button_clicked(*anything)
-
- def on_close_button_clicked(self, *anything):
- return self.stage_close_button_clicked(*anything)
-
- def on_adhoc_commands_window_destroy(self, *anything):
- # TODO: do all actions that are needed to remove this object from memory...
- self.remove_pulsing()
-
- def on_adhoc_commands_window_delete_event(self, *anything):
- return self.stage_adhoc_commands_window_delete_event(self.window)
-
- def __del__(self):
- print 'Object has been deleted.'
+ """
+ Class for a window for single ad-hoc commands session
+
+ Note, that there might be more than one for one account/jid pair in one
+ moment.
+
+ TODO: Maybe put this window into MessageWindow? consider this when it will
+ be possible to manage more than one window of one.
+ TODO: Account/jid pair in MessageWindowMgr.
+ TODO: GTK 2.10 has a special wizard-widget, consider using it...
+ """
+
+ def __init__(self, account, jid, commandnode=None):
+ """
+ Create new window
+ """
+
+ # an account object
+ self.account = gajim.connections[account]
+ self.jid = jid
+
+ self.pulse_id=None # to satisfy self.setup_pulsing()
+ self.commandlist=None # a list of (commandname, commanddescription)
+
+ # command's data
+ self.commandnode = commandnode
+ self.sessionid = None
+ self.dataform = None
+ self.allow_stage3_close = False
+
+ # retrieving widgets from xml
+ self.xml = gtkgui_helpers.get_gtk_builder('adhoc_commands_window.ui')
+ self.window = self.xml.get_object('adhoc_commands_window')
+ self.window.connect('delete-event', self.on_adhoc_commands_window_delete_event)
+ for name in ('back_button', 'forward_button',
+ 'execute_button','close_button','stages_notebook',
+ 'retrieving_commands_stage_vbox',
+ 'command_list_stage_vbox','command_list_vbox',
+ 'sending_form_stage_vbox','sending_form_progressbar',
+ 'notes_label','no_commands_stage_vbox','error_stage_vbox',
+ 'error_description_label'):
+ self.__dict__[name] = self.xml.get_object(name)
+
+ # creating data forms widget
+ self.data_form_widget = dataforms_widget.DataFormWidget()
+ self.data_form_widget.show()
+ self.sending_form_stage_vbox.pack_start(self.data_form_widget)
+
+ if self.commandnode:
+ # Execute command
+ self.stage3()
+ else:
+ # setting initial stage
+ self.stage1()
+
+ # displaying the window
+ self.xml.connect_signals(self)
+ self.window.show_all()
+
+ # These functions are set up by appropriate stageX methods.
+ def stage_finish(self, *anything):
+ pass
+
+ def stage_back_button_clicked(self, *anything):
+ assert False
+
+ def stage_forward_button_clicked(self, *anything):
+ assert False
+
+ def stage_execute_button_clicked(self, *anything):
+ assert False
+
+ def stage_close_button_clicked(self, *anything):
+ assert False
+
+ def stage_adhoc_commands_window_delete_event(self, *anything):
+ assert False
+
+ def do_nothing(self, *anything):
+ return False
+
+ # Widget callbacks...
+ def on_back_button_clicked(self, *anything):
+ return self.stage_back_button_clicked(*anything)
+
+ def on_forward_button_clicked(self, *anything):
+ return self.stage_forward_button_clicked(*anything)
+
+ def on_execute_button_clicked(self, *anything):
+ return self.stage_execute_button_clicked(*anything)
+
+ def on_close_button_clicked(self, *anything):
+ return self.stage_close_button_clicked(*anything)
+
+ def on_adhoc_commands_window_destroy(self, *anything):
+ # TODO: do all actions that are needed to remove this object from memory...
+ self.remove_pulsing()
+
+ def on_adhoc_commands_window_delete_event(self, *anything):
+ return self.stage_adhoc_commands_window_delete_event(self.window)
+
+ def __del__(self):
+ print 'Object has been deleted.'
# stage 1: waiting for command list
- def stage1(self):
- """
- Prepare the first stage. Request command list, set appropriate state of
- widgets
- """
- # close old stage...
- self.stage_finish()
-
- # show the stage
- self.stages_notebook.set_current_page(
- self.stages_notebook.page_num(
- self.retrieving_commands_stage_vbox))
-
- # set widgets' state
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(False)
- self.execute_button.set_sensitive(False)
-
- # request command list
- self.request_command_list()
- self.setup_pulsing(
- self.xml.get_object('retrieving_commands_progressbar'))
-
- # setup the callbacks
- self.stage_finish = self.stage1_finish
- self.stage_close_button_clicked = self.stage1_close_button_clicked
- self.stage_adhoc_commands_window_delete_event = self.stage1_adhoc_commands_window_delete_event
-
- def stage1_finish(self):
- self.remove_pulsing()
-
- def stage1_close_button_clicked(self, widget):
- # cancelling in this stage is not critical, so we don't
- # show any popups to user
- self.stage1_finish()
- self.window.destroy()
-
- def stage1_adhoc_commands_window_delete_event(self, widget):
- self.stage1_finish()
- return True
+ def stage1(self):
+ """
+ Prepare the first stage. Request command list, set appropriate state of
+ widgets
+ """
+ # close old stage...
+ self.stage_finish()
+
+ # show the stage
+ self.stages_notebook.set_current_page(
+ self.stages_notebook.page_num(
+ self.retrieving_commands_stage_vbox))
+
+ # set widgets' state
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(False)
+ self.execute_button.set_sensitive(False)
+
+ # request command list
+ self.request_command_list()
+ self.setup_pulsing(
+ self.xml.get_object('retrieving_commands_progressbar'))
+
+ # setup the callbacks
+ self.stage_finish = self.stage1_finish
+ self.stage_close_button_clicked = self.stage1_close_button_clicked
+ self.stage_adhoc_commands_window_delete_event = self.stage1_adhoc_commands_window_delete_event
+
+ def stage1_finish(self):
+ self.remove_pulsing()
+
+ def stage1_close_button_clicked(self, widget):
+ # cancelling in this stage is not critical, so we don't
+ # show any popups to user
+ self.stage1_finish()
+ self.window.destroy()
+
+ def stage1_adhoc_commands_window_delete_event(self, widget):
+ self.stage1_finish()
+ return True
# stage 2: choosing the command to execute
- def stage2(self):
- """
- Populate the command list vbox with radiobuttons
-
- FIXME: If there is more commands, maybe some kind of list, set widgets
- state
- """
- # close old stage
- self.stage_finish()
-
- assert len(self.commandlist)>0
-
- self.stages_notebook.set_current_page(
- self.stages_notebook.page_num(
- self.command_list_stage_vbox))
-
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(True)
- self.execute_button.set_sensitive(False)
-
- # build the commands list radiobuttons
- first_radio = None
- for (commandnode, commandname) in self.commandlist:
- radio = gtk.RadioButton(first_radio, label=commandname)
- radio.connect("toggled", self.on_command_radiobutton_toggled, commandnode)
- if not first_radio:
- first_radio = radio
- self.commandnode = commandnode
- self.command_list_vbox.pack_start(radio, expand=False)
- self.command_list_vbox.show_all()
-
- self.stage_finish = self.stage2_finish
- self.stage_close_button_clicked = self.stage2_close_button_clicked
- self.stage_forward_button_clicked = self.stage2_forward_button_clicked
- self.stage_adhoc_commands_window_delete_event = self.do_nothing
-
- def stage2_finish(self):
- """
- Remove widgets we created. Not needed when the window is destroyed
- """
- def remove_widget(widget):
- self.command_list_vbox.remove(widget)
- self.command_list_vbox.foreach(remove_widget)
-
- def stage2_close_button_clicked(self, widget):
- self.stage_finish()
- self.window.destroy()
-
- def stage2_forward_button_clicked(self, widget):
- self.stage3()
-
- def on_command_radiobutton_toggled(self, widget, commandnode):
- self.commandnode = commandnode
-
- def on_check_commands_1_button_clicked(self, widget):
- self.stage1()
+ def stage2(self):
+ """
+ Populate the command list vbox with radiobuttons
+
+ FIXME: If there is more commands, maybe some kind of list, set widgets
+ state
+ """
+ # close old stage
+ self.stage_finish()
+
+ assert len(self.commandlist)>0
+
+ self.stages_notebook.set_current_page(
+ self.stages_notebook.page_num(
+ self.command_list_stage_vbox))
+
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(True)
+ self.execute_button.set_sensitive(False)
+
+ # build the commands list radiobuttons
+ first_radio = None
+ for (commandnode, commandname) in self.commandlist:
+ radio = gtk.RadioButton(first_radio, label=commandname)
+ radio.connect("toggled", self.on_command_radiobutton_toggled, commandnode)
+ if not first_radio:
+ first_radio = radio
+ self.commandnode = commandnode
+ self.command_list_vbox.pack_start(radio, expand=False)
+ self.command_list_vbox.show_all()
+
+ self.stage_finish = self.stage2_finish
+ self.stage_close_button_clicked = self.stage2_close_button_clicked
+ self.stage_forward_button_clicked = self.stage2_forward_button_clicked
+ self.stage_adhoc_commands_window_delete_event = self.do_nothing
+
+ def stage2_finish(self):
+ """
+ Remove widgets we created. Not needed when the window is destroyed
+ """
+ def remove_widget(widget):
+ self.command_list_vbox.remove(widget)
+ self.command_list_vbox.foreach(remove_widget)
+
+ def stage2_close_button_clicked(self, widget):
+ self.stage_finish()
+ self.window.destroy()
+
+ def stage2_forward_button_clicked(self, widget):
+ self.stage3()
+
+ def on_command_radiobutton_toggled(self, widget, commandnode):
+ self.commandnode = commandnode
+
+ def on_check_commands_1_button_clicked(self, widget):
+ self.stage1()
# stage 3: command invocation
- def stage3(self):
- # close old stage
- self.stage_finish()
-
- assert isinstance(self.commandnode, unicode)
-
- self.form_status = None
-
- self.stages_notebook.set_current_page(
- self.stages_notebook.page_num(
- self.sending_form_stage_vbox))
-
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(False)
- self.execute_button.set_sensitive(False)
-
- self.stage3_submit_form()
-
- self.stage_finish = self.stage3_finish
- self.stage_back_button_clicked = self.stage3_back_button_clicked
- self.stage_forward_button_clicked = self.stage3_forward_button_clicked
- self.stage_execute_button_clicked = self.stage3_execute_button_clicked
- self.stage_close_button_clicked = self.stage3_close_button_clicked
- self.stage_adhoc_commands_window_delete_event = self.stage3_close_button_clicked
-
- def stage3_finish(self):
- pass
-
- def stage3_close_button_clicked(self, widget):
- """
- We are in the middle of executing command. Ask user if he really want to
- cancel the process, then cancel it
- """
- # this works also as a handler for window_delete_event, so we have to return appropriate
- # values
- if self.form_status == 'completed':
- if widget!=self.window:
- self.window.destroy()
- return False
-
- if self.allow_stage3_close:
- return False
-
- def on_yes(button):
- self.send_cancel()
- self.allow_stage3_close = True
- self.window.destroy()
-
- dialog = dialogs.HigDialog(self.window, gtk.DIALOG_DESTROY_WITH_PARENT | \
- gtk.DIALOG_MODAL, gtk.BUTTONS_YES_NO, _('Cancel confirmation'),
- _('You are in process of executing command. Do you really want to '
- 'cancel it?'), on_response_yes=on_yes)
- dialog.popup()
- return True # Block event, don't close window
-
- def stage3_back_button_clicked(self, widget):
- self.stage3_submit_form('prev')
-
- def stage3_forward_button_clicked(self, widget):
- self.stage3_submit_form('next')
-
- def stage3_execute_button_clicked(self, widget):
- self.stage3_submit_form('execute')
-
- def stage3_submit_form(self, action='execute'):
- self.data_form_widget.set_sensitive(False)
- if self.data_form_widget.get_data_form():
- self.data_form_widget.data_form.type='submit'
- else:
- self.data_form_widget.hide()
-
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(False)
- self.execute_button.set_sensitive(False)
-
- self.sending_form_progressbar.show()
- self.setup_pulsing(self.sending_form_progressbar)
- self.send_command(action)
-
- def stage3_next_form(self, command):
- if not isinstance(command, xmpp.Node):
- self.stage5(error=_('Service sent malformed data'), senderror=True)
- return
-
- self.remove_pulsing()
- self.sending_form_progressbar.hide()
-
- if not self.sessionid:
- self.sessionid = command.getAttr('sessionid')
- elif self.sessionid != command.getAttr('sessionid'):
- self.stage5(error=_('Service changed the session identifier.'),
- senderror=True)
- return
-
- self.form_status = command.getAttr('status')
-
- self.commandnode = command.getAttr('node')
- if command.getTag('x'):
- self.dataform = dataforms.ExtendForm(node=command.getTag('x'))
-
- self.data_form_widget.set_sensitive(True)
- try:
- self.data_form_widget.data_form=self.dataform
- except dataforms.Error:
- self.stage5(error=_('Service sent malformed data'), senderror=True)
- return
- self.data_form_widget.show()
- if self.data_form_widget.title:
- self.window.set_title('%s - Ad-hoc Commands - Gajim' % \
- self.data_form_widget.title)
- else:
- self.data_form_widget.hide()
-
- actions = command.getTag('actions')
- if actions:
- # actions, actions, actions...
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(actions.getTag('prev') is not None)
- self.forward_button.set_sensitive(actions.getTag('next') is not None)
- self.execute_button.set_sensitive(True)
- else:
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(False)
- self.execute_button.set_sensitive(True)
-
- if self.form_status == 'completed':
- self.close_button.set_sensitive(True)
- self.back_button.hide()
- self.forward_button.hide()
- self.execute_button.hide()
- self.close_button.show()
- self.stage_adhoc_commands_window_delete_event = self.stage3_close_button_clicked
-
- note = command.getTag('note')
- if note:
- self.notes_label.set_text(note.getData().decode('utf-8'))
- self.notes_label.set_no_show_all(False)
- self.notes_label.show()
- else:
- self.notes_label.set_no_show_all(True)
- self.notes_label.hide()
+ def stage3(self):
+ # close old stage
+ self.stage_finish()
+
+ assert isinstance(self.commandnode, unicode)
+
+ self.form_status = None
+
+ self.stages_notebook.set_current_page(
+ self.stages_notebook.page_num(
+ self.sending_form_stage_vbox))
+
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(False)
+ self.execute_button.set_sensitive(False)
+
+ self.stage3_submit_form()
+
+ self.stage_finish = self.stage3_finish
+ self.stage_back_button_clicked = self.stage3_back_button_clicked
+ self.stage_forward_button_clicked = self.stage3_forward_button_clicked
+ self.stage_execute_button_clicked = self.stage3_execute_button_clicked
+ self.stage_close_button_clicked = self.stage3_close_button_clicked
+ self.stage_adhoc_commands_window_delete_event = self.stage3_close_button_clicked
+
+ def stage3_finish(self):
+ pass
+
+ def stage3_close_button_clicked(self, widget):
+ """
+ We are in the middle of executing command. Ask user if he really want to
+ cancel the process, then cancel it
+ """
+ # this works also as a handler for window_delete_event, so we have to return appropriate
+ # values
+ if self.form_status == 'completed':
+ if widget!=self.window:
+ self.window.destroy()
+ return False
+
+ if self.allow_stage3_close:
+ return False
+
+ def on_yes(button):
+ self.send_cancel()
+ self.allow_stage3_close = True
+ self.window.destroy()
+
+ dialog = dialogs.HigDialog(self.window, gtk.DIALOG_DESTROY_WITH_PARENT | \
+ gtk.DIALOG_MODAL, gtk.BUTTONS_YES_NO, _('Cancel confirmation'),
+ _('You are in process of executing command. Do you really want to '
+ 'cancel it?'), on_response_yes=on_yes)
+ dialog.popup()
+ return True # Block event, don't close window
+
+ def stage3_back_button_clicked(self, widget):
+ self.stage3_submit_form('prev')
+
+ def stage3_forward_button_clicked(self, widget):
+ self.stage3_submit_form('next')
+
+ def stage3_execute_button_clicked(self, widget):
+ self.stage3_submit_form('execute')
+
+ def stage3_submit_form(self, action='execute'):
+ self.data_form_widget.set_sensitive(False)
+ if self.data_form_widget.get_data_form():
+ self.data_form_widget.data_form.type='submit'
+ else:
+ self.data_form_widget.hide()
+
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(False)
+ self.execute_button.set_sensitive(False)
+
+ self.sending_form_progressbar.show()
+ self.setup_pulsing(self.sending_form_progressbar)
+ self.send_command(action)
+
+ def stage3_next_form(self, command):
+ if not isinstance(command, xmpp.Node):
+ self.stage5(error=_('Service sent malformed data'), senderror=True)
+ return
+
+ self.remove_pulsing()
+ self.sending_form_progressbar.hide()
+
+ if not self.sessionid:
+ self.sessionid = command.getAttr('sessionid')
+ elif self.sessionid != command.getAttr('sessionid'):
+ self.stage5(error=_('Service changed the session identifier.'),
+ senderror=True)
+ return
+
+ self.form_status = command.getAttr('status')
+
+ self.commandnode = command.getAttr('node')
+ if command.getTag('x'):
+ self.dataform = dataforms.ExtendForm(node=command.getTag('x'))
+
+ self.data_form_widget.set_sensitive(True)
+ try:
+ self.data_form_widget.data_form=self.dataform
+ except dataforms.Error:
+ self.stage5(error=_('Service sent malformed data'), senderror=True)
+ return
+ self.data_form_widget.show()
+ if self.data_form_widget.title:
+ self.window.set_title('%s - Ad-hoc Commands - Gajim' % \
+ self.data_form_widget.title)
+ else:
+ self.data_form_widget.hide()
+
+ actions = command.getTag('actions')
+ if actions:
+ # actions, actions, actions...
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(actions.getTag('prev') is not None)
+ self.forward_button.set_sensitive(actions.getTag('next') is not None)
+ self.execute_button.set_sensitive(True)
+ else:
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(False)
+ self.execute_button.set_sensitive(True)
+
+ if self.form_status == 'completed':
+ self.close_button.set_sensitive(True)
+ self.back_button.hide()
+ self.forward_button.hide()
+ self.execute_button.hide()
+ self.close_button.show()
+ self.stage_adhoc_commands_window_delete_event = self.stage3_close_button_clicked
+
+ note = command.getTag('note')
+ if note:
+ self.notes_label.set_text(note.getData().decode('utf-8'))
+ self.notes_label.set_no_show_all(False)
+ self.notes_label.show()
+ else:
+ self.notes_label.set_no_show_all(True)
+ self.notes_label.hide()
# stage 4: no commands are exposed
- def stage4(self):
- """
- Display the message. Wait for user to close the window
- """
- # close old stage
- self.stage_finish()
+ def stage4(self):
+ """
+ Display the message. Wait for user to close the window
+ """
+ # close old stage
+ self.stage_finish()
- self.stages_notebook.set_current_page(
- self.stages_notebook.page_num(
- self.no_commands_stage_vbox))
+ self.stages_notebook.set_current_page(
+ self.stages_notebook.page_num(
+ self.no_commands_stage_vbox))
- self.close_button.set_sensitive(True)
- self.back_button.set_sensitive(False)
- self.forward_button.set_sensitive(False)
- self.execute_button.set_sensitive(False)
+ self.close_button.set_sensitive(True)
+ self.back_button.set_sensitive(False)
+ self.forward_button.set_sensitive(False)
+ self.execute_button.set_sensitive(False)
- self.stage_finish = self.do_nothing
- self.stage_close_button_clicked = self.stage4_close_button_clicked
- self.stage_adhoc_commands_window_delete_event = self.do_nothing
+ self.stage_finish = self.do_nothing
+ self.stage_close_button_clicked = self.stage4_close_button_clicked
+ self.stage_adhoc_commands_window_delete_event = self.do_nothing
- def stage4_close_button_clicked(self, widget):
- self.window.destroy()
+ def stage4_close_button_clicked(self, widget):
+ self.window.destroy()
- def on_check_commands_2_button_clicked(self, widget):
- self.stage1()
+ def on_check_commands_2_button_clicked(self, widget):
+ self.stage1()
# stage 5: an error has occured
- def stage5(self, error=None, errorid=None, senderror=False):
- """
- Display the error message. Wait for user to close the window
- """
- # FIXME: sending error to responder
- # close old stage
- self.stage_finish()
-
- assert errorid or error
-
- if errorid:
- # we've got error code, display appropriate message
- try:
- errorname = xmpp.NS_STANZAS + ' ' + str(errorid)
- errordesc = xmpp.ERRORS[errorname][2]
- error = errordesc.decode('utf-8')
- del errorname, errordesc
- except KeyError: # when stanza doesn't have error description
- error = _('Service returned an error.')
- elif error:
- # we've got error message
- pass
- else:
- # we don't know what's that, bailing out
- assert False
-
- self.stages_notebook.set_current_page(
- self.stages_notebook.page_num(
- self.error_stage_vbox))
-
- self.close_button.set_sensitive(True)
- self.back_button.hide()
- self.forward_button.hide()
- self.execute_button.hide()
-
- self.error_description_label.set_text(error)
-
- self.stage_finish = self.do_nothing
- self.stage_close_button_clicked = self.stage5_close_button_clicked
- self.stage_adhoc_commands_window_delete_event = self.do_nothing
-
- def stage5_close_button_clicked(self, widget):
- self.window.destroy()
+ def stage5(self, error=None, errorid=None, senderror=False):
+ """
+ Display the error message. Wait for user to close the window
+ """
+ # FIXME: sending error to responder
+ # close old stage
+ self.stage_finish()
+
+ assert errorid or error
+
+ if errorid:
+ # we've got error code, display appropriate message
+ try:
+ errorname = xmpp.NS_STANZAS + ' ' + str(errorid)
+ errordesc = xmpp.ERRORS[errorname][2]
+ error = errordesc.decode('utf-8')
+ del errorname, errordesc
+ except KeyError: # when stanza doesn't have error description
+ error = _('Service returned an error.')
+ elif error:
+ # we've got error message
+ pass
+ else:
+ # we don't know what's that, bailing out
+ assert False
+
+ self.stages_notebook.set_current_page(
+ self.stages_notebook.page_num(
+ self.error_stage_vbox))
+
+ self.close_button.set_sensitive(True)
+ self.back_button.hide()
+ self.forward_button.hide()
+ self.execute_button.hide()
+
+ self.error_description_label.set_text(error)
+
+ self.stage_finish = self.do_nothing
+ self.stage_close_button_clicked = self.stage5_close_button_clicked
+ self.stage_adhoc_commands_window_delete_event = self.do_nothing
+
+ def stage5_close_button_clicked(self, widget):
+ self.window.destroy()
# helpers to handle pulsing in progressbar
- def setup_pulsing(self, progressbar):
- """
- Set the progressbar to pulse. Makes a custom function to repeatedly call
- progressbar.pulse() method
- """
- assert not self.pulse_id
- assert isinstance(progressbar, gtk.ProgressBar)
-
- def callback():
- progressbar.pulse()
- return True # important to keep callback be called back!
-
- # 12 times per second (80 miliseconds)
- self.pulse_id = gobject.timeout_add(80, callback)
-
- def remove_pulsing(self):
- """
- Stop pulsing, useful when especially when removing widget
- """
- if self.pulse_id:
- gobject.source_remove(self.pulse_id)
- self.pulse_id=None
+ def setup_pulsing(self, progressbar):
+ """
+ Set the progressbar to pulse. Makes a custom function to repeatedly call
+ progressbar.pulse() method
+ """
+ assert not self.pulse_id
+ assert isinstance(progressbar, gtk.ProgressBar)
+
+ def callback():
+ progressbar.pulse()
+ return True # important to keep callback be called back!
+
+ # 12 times per second (80 miliseconds)
+ self.pulse_id = gobject.timeout_add(80, callback)
+
+ def remove_pulsing(self):
+ """
+ Stop pulsing, useful when especially when removing widget
+ """
+ if self.pulse_id:
+ gobject.source_remove(self.pulse_id)
+ self.pulse_id=None
# handling xml stanzas
- def request_command_list(self):
- """
- Request the command list. Change stage on delivery
- """
- query = xmpp.Iq(typ='get', to=xmpp.JID(self.jid), queryNS=xmpp.NS_DISCO_ITEMS)
- query.setQuerynode(xmpp.NS_COMMANDS)
-
- def callback(response):
- '''Called on response to query.'''
- # FIXME: move to connection_handlers.py
- # is error => error stage
- error = response.getError()
- if error:
- # extracting error description from xmpp/protocol.py
- self.stage5(errorid = error)
- return
-
- # no commands => no commands stage
- # commands => command selection stage
- query = response.getTag('query')
- if query and query.getAttr('node') == xmpp.NS_COMMANDS:
- items = query.getTags('item')
- else:
- items = []
- if len(items)==0:
- self.commandlist = []
- self.stage4()
- else:
- self.commandlist = [(t.getAttr('node'), t.getAttr('name')) for t in items]
- self.stage2()
-
- self.account.connection.SendAndCallForResponse(query, callback)
-
- def send_command(self, action='execute'):
- """
- Send the command with data form. Wait for reply
- """
- # create the stanza
- assert isinstance(self.commandnode, unicode)
- assert action in ('execute', 'prev', 'next', 'complete')
-
- stanza = xmpp.Iq(typ='set', to=self.jid)
- cmdnode = stanza.addChild('command', namespace=xmpp.NS_COMMANDS, attrs={
- 'node':self.commandnode, 'action':action})
-
- if self.sessionid:
- cmdnode.setAttr('sessionid', self.sessionid)
-
- if self.data_form_widget.data_form:
-# cmdnode.addChild(node=dataforms.DataForm(tofill=self.data_form_widget.data_form))
- # FIXME: simplified form to send
-
- cmdnode.addChild(node=self.data_form_widget.data_form)
-
- def callback(response):
- # FIXME: move to connection_handlers.py
- err = response.getError()
- if err:
- self.stage5(errorid = err)
- else:
- self.stage3_next_form(response.getTag('command'))
-
- self.account.connection.SendAndCallForResponse(stanza, callback)
-
- def send_cancel(self):
- """
- Send the command with action='cancel'
- """
- assert self.commandnode
- if self.sessionid and self.account.connection:
- # we already have sessionid, so the service sent at least one reply.
- stanza = xmpp.Iq(typ='set', to=self.jid)
- stanza.addChild('command', namespace=xmpp.NS_COMMANDS, attrs={
- 'node':self.commandnode,
- 'sessionid':self.sessionid,
- 'action':'cancel'
- })
-
- self.account.connection.send(stanza)
- else:
- # we did not received any reply from service; FIXME: we should wait and
- # then send cancel; for now we do nothing
- pass
-
-# vim: se ts=3:
+ def request_command_list(self):
+ """
+ Request the command list. Change stage on delivery
+ """
+ query = xmpp.Iq(typ='get', to=xmpp.JID(self.jid), queryNS=xmpp.NS_DISCO_ITEMS)
+ query.setQuerynode(xmpp.NS_COMMANDS)
+
+ def callback(response):
+ '''Called on response to query.'''
+ # FIXME: move to connection_handlers.py
+ # is error => error stage
+ error = response.getError()
+ if error:
+ # extracting error description from xmpp/protocol.py
+ self.stage5(errorid = error)
+ return
+
+ # no commands => no commands stage
+ # commands => command selection stage
+ query = response.getTag('query')
+ if query and query.getAttr('node') == xmpp.NS_COMMANDS:
+ items = query.getTags('item')
+ else:
+ items = []
+ if len(items)==0:
+ self.commandlist = []
+ self.stage4()
+ else:
+ self.commandlist = [(t.getAttr('node'), t.getAttr('name')) for t in items]
+ self.stage2()
+
+ self.account.connection.SendAndCallForResponse(query, callback)
+
+ def send_command(self, action='execute'):
+ """
+ Send the command with data form. Wait for reply
+ """
+ # create the stanza
+ assert isinstance(self.commandnode, unicode)
+ assert action in ('execute', 'prev', 'next', 'complete')
+
+ stanza = xmpp.Iq(typ='set', to=self.jid)
+ cmdnode = stanza.addChild('command', namespace=xmpp.NS_COMMANDS, attrs={
+ 'node':self.commandnode, 'action':action})
+
+ if self.sessionid:
+ cmdnode.setAttr('sessionid', self.sessionid)
+
+ if self.data_form_widget.data_form:
+# cmdnode.addChild(node=dataforms.DataForm(tofill=self.data_form_widget.data_form))
+ # FIXME: simplified form to send
+
+ cmdnode.addChild(node=self.data_form_widget.data_form)
+
+ def callback(response):
+ # FIXME: move to connection_handlers.py
+ err = response.getError()
+ if err:
+ self.stage5(errorid = err)
+ else:
+ self.stage3_next_form(response.getTag('command'))
+
+ self.account.connection.SendAndCallForResponse(stanza, callback)
+
+ def send_cancel(self):
+ """
+ Send the command with action='cancel'
+ """
+ assert self.commandnode
+ if self.sessionid and self.account.connection:
+ # we already have sessionid, so the service sent at least one reply.
+ stanza = xmpp.Iq(typ='set', to=self.jid)
+ stanza.addChild('command', namespace=xmpp.NS_COMMANDS, attrs={
+ 'node':self.commandnode,
+ 'sessionid':self.sessionid,
+ 'action':'cancel'
+ })
+
+ self.account.connection.send(stanza)
+ else:
+ # we did not received any reply from service; FIXME: we should wait and
+ # then send cancel; for now we do nothing
+ pass