viewers: Show spice error message in the UI on disconnect

This commit is contained in:
Cole Robinson 2016-05-16 16:27:23 -04:00
parent 0bd73da4bb
commit 3221b56ac3
2 changed files with 14 additions and 7 deletions

View File

@ -751,13 +751,15 @@ class vmmConsolePages(vmmGObjectUI):
self.err.show_err(_("USB redirection error"), self.err.show_err(_("USB redirection error"),
text2=str(errstr), modal=True) text2=str(errstr), modal=True)
def _viewer_disconnected_set_page(self, ssherr): def _viewer_disconnected_set_page(self, errdetails, ssherr):
if self.vm.is_runable(): if self.vm.is_runable():
# Exit was probably for legitimate reasons # Exit was probably for legitimate reasons
self._show_vm_status_unavailable() self._show_vm_status_unavailable()
return return
msg = _("Viewer was disconnected.") msg = _("Viewer was disconnected.")
if errdetails:
msg += "\n" + errdetails
if ssherr: if ssherr:
logging.debug("SSH tunnel error output: %s", ssherr) logging.debug("SSH tunnel error output: %s", ssherr)
msg += "\n\n" msg += "\n\n"
@ -765,7 +767,7 @@ class vmmConsolePages(vmmGObjectUI):
self._activate_unavailable_page(msg) self._activate_unavailable_page(msg)
def _viewer_disconnected(self, ignore, ssherr): def _viewer_disconnected(self, ignore, errdetails, ssherr):
self.widget("console-pages").set_current_page( self.widget("console-pages").set_current_page(
_CONSOLE_PAGE_UNAVAILABLE) _CONSOLE_PAGE_UNAVAILABLE)
self._close_viewer() self._close_viewer()
@ -774,7 +776,7 @@ class vmmConsolePages(vmmGObjectUI):
# Make sure modifiers are set correctly # Make sure modifiers are set correctly
self._viewer_focus_changed() self._viewer_focus_changed()
self._viewer_disconnected_set_page(ssherr) self._viewer_disconnected_set_page(errdetails, ssherr)
self._refresh_resizeguest_from_settings() self._refresh_resizeguest_from_settings()
def _viewer_connected(self, ignore): def _viewer_connected(self, ignore):

View File

@ -56,7 +56,7 @@ class Viewer(vmmGObject):
"pointer-grab": (GObject.SignalFlags.RUN_FIRST, None, []), "pointer-grab": (GObject.SignalFlags.RUN_FIRST, None, []),
"pointer-ungrab": (GObject.SignalFlags.RUN_FIRST, None, []), "pointer-ungrab": (GObject.SignalFlags.RUN_FIRST, None, []),
"connected": (GObject.SignalFlags.RUN_FIRST, None, []), "connected": (GObject.SignalFlags.RUN_FIRST, None, []),
"disconnected": (GObject.SignalFlags.RUN_FIRST, None, [str]), "disconnected": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"auth-error": (GObject.SignalFlags.RUN_FIRST, None, [str, bool]), "auth-error": (GObject.SignalFlags.RUN_FIRST, None, [str, bool]),
"auth-rejected": (GObject.SignalFlags.RUN_FIRST, None, [str]), "auth-rejected": (GObject.SignalFlags.RUN_FIRST, None, [str]),
"need-auth": (GObject.SignalFlags.RUN_FIRST, None, [bool, bool]), "need-auth": (GObject.SignalFlags.RUN_FIRST, None, [bool, bool]),
@ -165,9 +165,9 @@ class Viewer(vmmGObject):
def _get_grab_keys(self): def _get_grab_keys(self):
return self._display.get_grab_keys().as_string() return self._display.get_grab_keys().as_string()
def _emit_disconnected(self): def _emit_disconnected(self, errdetails=None):
ssherr = self._tunnels.get_err_output() ssherr = self._tunnels.get_err_output()
self.emit("disconnected", ssherr) self.emit("disconnected", errdetails, ssherr)
####################################################### #######################################################
@ -565,7 +565,12 @@ class SpiceViewer(Viewer):
if channel.get_error(): if channel.get_error():
error = channel.get_error().message error = channel.get_error().message
logging.debug("Spice channel event=%s message=%s", event, error) logging.debug("Spice channel event=%s message=%s", event, error)
self._emit_disconnected()
msg = _("Encountered SPICE %(error-name)s") % {
"error-name": event.value_nick}
if error:
msg += ": %s" % error
self._emit_disconnected(msg)
def _fd_channel_event_cb(self, channel, event): def _fd_channel_event_cb(self, channel, event):
# When we see any event from the channel, release the # When we see any event from the channel, release the