[telepathy-doc/master] An observer written in Python
Danielle Madeley
danielle.madeley at collabora.co.uk
Wed Nov 4 18:25:41 PST 2009
---
configure.ac | 1 +
docs/examples/Makefile.am | 1 +
docs/examples/python_mc5_observer/Makefile.am | 4 ++
docs/examples/python_mc5_observer/observer.py | 72 +++++++++++++++++++++++++
4 files changed, 78 insertions(+), 0 deletions(-)
create mode 100644 docs/examples/python_mc5_observer/Makefile.am
create mode 100644 docs/examples/python_mc5_observer/observer.py
diff --git a/configure.ac b/configure.ac
index e05996b..6f28f76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,7 @@ AC_OUTPUT([
docs/examples/python_get_parameters/Makefile
docs/examples/python_iface_messaging/Makefile
docs/examples/python_irc_roomlist/Makefile
+ docs/examples/python_mc5_observer/Makefile
docs/examples/python_simple_presence/Makefile
docs/book/Makefile
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
index f7a9037..ad94358 100644
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@ -15,6 +15,7 @@ example_dirs = \
python_get_parameters \
python_iface_messaging \
python_irc_roomlist \
+ python_mc5_observer \
python_simple_presence
SUBDIRS = $(example_dirs)
diff --git a/docs/examples/python_mc5_observer/Makefile.am b/docs/examples/python_mc5_observer/Makefile.am
new file mode 100644
index 0000000..000769c
--- /dev/null
+++ b/docs/examples/python_mc5_observer/Makefile.am
@@ -0,0 +1,4 @@
+noinst_PYTHON = \
+ observer.py
+
+include $(top_srcdir)/docs/rsync-dist.make
diff --git a/docs/examples/python_mc5_observer/observer.py b/docs/examples/python_mc5_observer/observer.py
new file mode 100644
index 0000000..94bd2a5
--- /dev/null
+++ b/docs/examples/python_mc5_observer/observer.py
@@ -0,0 +1,72 @@
+import dbus.glib
+import gobject
+import telepathy
+
+from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT
+from telepathy.interfaces import CLIENT, \
+ CLIENT_OBSERVER, \
+ CHANNEL
+
+DBUS_PROPERTIES = "org.freedesktop.DBus.Properties"
+
+class ExampleObserver(dbus.service.Object):
+ properties = {
+ CLIENT: {
+ 'Interfaces': [ CLIENT_OBSERVER ],
+ },
+ CLIENT_OBSERVER: {
+ 'ObserverChannelFilter': dbus.Array([
+ dbus.Dictionary({
+ }, signature='sv')
+ ], signature='a{sv}')
+ },
+ }
+
+ def __init__(self, client_name):
+ bus_name = '.'.join ([CLIENT, client_name])
+ object_path = '/' + bus_name.replace('.', '/')
+
+ bus_name = dbus.service.BusName(bus_name, bus=dbus.SessionBus())
+ dbus.service.Object.__init__(self, bus_name, object_path)
+ self.nameref = bus_name
+
+ @dbus.service.method(dbus_interface=DBUS_PROPERTIES,
+ in_signature='s',
+ out_signature='a{sv}')
+ def GetAll(self, interface):
+ print "GetAll", interface
+ if interface in self.properties:
+ return self.properties[interface]
+ else:
+ return {}
+
+ @dbus.service.method(dbus_interface=DBUS_PROPERTIES,
+ in_signature='ss',
+ out_signature='v')
+ def Get(self, interface, property):
+ print "Get", interface, property
+ if interface in self.properties and \
+ property in self.properties[interface]:
+ return self.properties[interface][property]
+ else:
+ return 0
+
+ @dbus.service.method(dbus_interface=CLIENT_OBSERVER,
+ in_signature='ooa(oa{sv})oaoa{sv}',
+ out_signature='')
+ def ObserveChannels(self, account, connection, channels, dispatch_operation,
+ requests_satisfied, observer_info):
+
+ print "Incoming channels on %s:" % (connection)
+ for object, props in channels:
+ print " - %s :: %s" % (props[CHANNEL + '.ChannelType'],
+ props[CHANNEL + '.TargetID'])
+
+def start():
+ ExampleObserver("ExampleObserver")
+ return False
+
+if __name__ == '__main__':
+ gobject.timeout_add(0, start)
+ loop = gobject.MainLoop()
+ loop.run()
--
1.5.6.5
More information about the telepathy-commits
mailing list