[gnome-games/sudoku-tube] Show reason of offer failure
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-games/sudoku-tube] Show reason of offer failure
- Date: Wed, 5 Aug 2009 02:52:43 +0000 (UTC)
commit f3ae1c5dc68b835b9d33eca6599385298b474564
Author: Zhang Sen <zh jesse gmail com>
Date: Wed Aug 5 10:51:22 2009 +0800
Show reason of offer failure
gnome-sudoku/src/lib/main.py | 16 ++++++++++++----
gnome-sudoku/src/lib/tp_tube.py | 24 +++++++++++++++++++-----
2 files changed, 31 insertions(+), 9 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 4ad61fe..a10d91b 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -68,6 +68,7 @@ class UI (gconf_wrapper.GConfWrapper):
self._main_grid_vew = None
self._history_manager = None
self._tube = None
+ self._is_waiting_for_response = None # this should be extraced out
self.setup_gui()
@@ -427,24 +428,31 @@ class UI (gconf_wrapper.GConfWrapper):
self._tube_offer.connect("offer-failed", self._offer_fail_cb)
self._tube_offer.execute()
+ self._is_waiting_for_response = True
self._wait_dialog.run()
else:
logger.info("None selected")
def _wait_dialog_response_cb(self, dialog, response_id):
- if response_id in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT):
- self._tube_offer.cancel()
+ if self._is_waiting_for_response:
+ if response_id in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT):
+ self._tube_offer.cancel()
# else don't need to do anything
self._wait_dialog.destroy()
- def _offer_fail_cb(self, offer):
+ def _offer_fail_cb(self, offer, reason):
+ self._is_waiting_for_response = False
# clear label and button
vbox = self._wait_dialog.vbox
vbox.remove(vbox.get_children()[0])
action = self._wait_dialog.action_area
action.remove(action.get_children()[0])
- fail_label = gtk.Label(_("failed"))
+ text = '<span weight="bold" size="larger">Failed</span>\n%s' % reason
+ fail_label = gtk.Label(text)
+ fail_label.set_use_markup(True)
+ fail_label.set_line_wrap(True)
+ fail_label.set_selectable(True)
fail_label.show()
self._wait_dialog.vbox.pack_start(fail_label)
self._wait_dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
diff --git a/gnome-sudoku/src/lib/tp_tube.py b/gnome-sudoku/src/lib/tp_tube.py
index aeaf6c9..e7d12c9 100644
--- a/gnome-sudoku/src/lib/tp_tube.py
+++ b/gnome-sudoku/src/lib/tp_tube.py
@@ -4,6 +4,7 @@ import logging
import dbus
import gobject
+from gettext import gettext as _
from telepathy.client.channel import Channel
from telepathy.interfaces import (
CHANNEL_INTERFACE,
@@ -25,7 +26,8 @@ class TubeOffer(gobject.GObject):
__gsignals__ = {
"offer-succeeded": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
(object, object)),
- "offer-failed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
+ "offer-failed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
+ (str,)),
}
def __init__(self, conn, handle, tube_service):
@@ -56,7 +58,7 @@ class TubeOffer(gobject.GObject):
if self._tube_state == TUBE_CHANNEL_STATE_REMOTE_PENDING:
# if tube is already open, it's not _offer_ failed (it's other
# problems)
- self.emit("offer-failed")
+ self.emit("offer-failed", _("Tube is closed by peer"))
def cancel(self):
if self._chan:
@@ -74,8 +76,10 @@ class TubeOffer(gobject.GObject):
except dbus.exceptions.DBusException as excep:
error_busname = telepathy.errors.NotImplemented().get_dbus_name()
if excep.get_dbus_name() == error_busname:
- logger.error("REQUESTS interface not implemented on %s" %
+ msg = ("REQUESTS interface not implemented on %s" %
self._conn.service_name)
+ logger.error(msg)
+ self.emit("offer-failed", msg)
return
else:
raise
@@ -87,5 +91,15 @@ class TubeOffer(gobject.GObject):
'Closed', self._tube_closed_cb)
logger.debug("offering tube")
- self._address = self._chan[CHANNEL_TYPE_DBUS_TUBE].Offer({},
- SOCKET_ACCESS_CONTROL_CREDENTIALS)
+ try:
+ self._address = self._chan[CHANNEL_TYPE_DBUS_TUBE].Offer({},
+ SOCKET_ACCESS_CONTROL_CREDENTIALS)
+ except dbus.exceptions.DBusException as excep:
+ error_busname = telepathy.errors.NotAvailable().get_dbus_name()
+ if excep.get_dbus_name() == error_busname:
+ msg = str(excep)
+ logger.error(msg)
+ self.emit("offer-failed", msg)
+ return
+ else:
+ raise
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]