[gnome-games/sudoku-tube] Check if interface is available befor use it
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-games/sudoku-tube] Check if interface is available befor use it
- Date: Thu, 2 Jul 2009 10:20:33 +0000 (UTC)
commit 784b839c8ff157d5c6d3385cec7f8c5c180d40aa
Author: Zhang Sen <zh jesse gmail com>
Date: Thu Jul 2 18:15:28 2009 +0800
Check if interface is available befor use it
* CONNECTION_INTERFACE_SIMPLE_PRESENCE not available in tp-idle
* CONNECTION_INTERFACE_REQUESTS available but not implemented in tp-salut
gnome-sudoku/src/lib/contact_selector.py | 20 +++++++++++++-------
gnome-sudoku/src/lib/tp_tube.py | 18 +++++++++++++-----
2 files changed, 26 insertions(+), 12 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/contact_selector.py b/gnome-sudoku/src/lib/contact_selector.py
index 54489a4..175681b 100644
--- a/gnome-sudoku/src/lib/contact_selector.py
+++ b/gnome-sudoku/src/lib/contact_selector.py
@@ -61,14 +61,20 @@ class ContactList:
self._conn.call_when_ready(self._connection_ready_cb)
def _connection_ready_cb(self, conn):
- """Request Channel from conn when it's ready"""
- assert self._conn == conn
- logger.debug("Connection is ready: %s" % self._conn.service_name)
+ logger.info("Connection is ready: %s" % conn.service_name)
# TODO react to connection status change
- # TODO is this needed?
- # if CONNECTION_INTERFACE_SIMPLE_PRESENCE in conn.interfaces:
- self._conn[CONNECTION_INTERFACE_SIMPLE_PRESENCE].connect_to_signal(
- "PresencesChanged", self._contact_presence_changed_cb)
+
+ if CONNECTION_INTERFACE_SIMPLE_PRESENCE not in conn:
+ logger.warning("SIMPLE_PRESENCE interface not available on %s" %
+ conn.service_name)
+ return
+ if CONNECTION_INTERFACE_REQUESTS not in conn:
+ logger.warning("REQUESTS interface not available on %s" %
+ conn.service_name)
+ return
+
+ conn[CONNECTION_INTERFACE_SIMPLE_PRESENCE].connect_to_signal(
+ "PresencesChanged", self._contact_presence_changed_cb)
self._ensure_channel()
def _ensure_channel(self):
diff --git a/gnome-sudoku/src/lib/tp_tube.py b/gnome-sudoku/src/lib/tp_tube.py
index 2994819..5061bb2 100644
--- a/gnome-sudoku/src/lib/tp_tube.py
+++ b/gnome-sudoku/src/lib/tp_tube.py
@@ -14,6 +14,7 @@ from telepathy.constants import (
SOCKET_ACCESS_CONTROL_CREDENTIALS,
TUBE_CHANNEL_STATE_OPEN,
TUBE_CHANNEL_STATE_REMOTE_PENDING)
+from telepathy.errors import NotImplemented
logger = logging.getLogger("main.tp_tube")
@@ -33,14 +34,21 @@ def offer_tube(conn, handle, tube_service, tube_open_cb):
else:
logger.info("Tube state changed ->%s" % state)
-
- # TODO: check if contact supports our tube
- logger.debug("create tube channel")
- path, props = conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel({
+ logger.debug("creating tube channel")
+ request = {
CHANNEL_INTERFACE + ".ChannelType": CHANNEL_TYPE_DBUS_TUBE,
CHANNEL_INTERFACE + ".TargetHandleType": HANDLE_TYPE_CONTACT,
CHANNEL_INTERFACE + ".TargetHandle": handle,
- CHANNEL_TYPE_DBUS_TUBE + ".ServiceName": tube_service})
+ CHANNEL_TYPE_DBUS_TUBE + ".ServiceName": tube_service}
+ try:
+ path, props = conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel(request)
+ except dbus.exceptions.DBusException as excep:
+ if excep.get_dbus_name() == NotImplemented().get_dbus_name():
+ logger.error("REQUESTS interface not implemented on %s" %
+ conn.service_name)
+ return
+ else:
+ raise
chan = Channel(conn.service_name, path)
chan[CHANNEL_INTERFACE_TUBE].connect_to_signal('TubeChannelStateChanged',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]