Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert McQueen <robert.mcqueen@collabora.co.uk>2007-11-14 23:23:04 (GMT)
committer Robert McQueen <robert.mcqueen@collabora.co.uk>2007-11-14 23:23:04 (GMT)
commit5fddf81651e7880b1f0efd9548f2439cec17f373 (patch)
tree166edcd7d2003acff908ea2fc265fa9ffc9ed01a
parent039a2136304912450d93308367eb0717b65fbf75 (diff)
parent7ac57e29c11931ffc5f2936251448f0b9831d2a7 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/projects/presence-service
-rw-r--r--src/server_plugin.py36
-rw-r--r--src/telepathy_plugin.py63
2 files changed, 54 insertions, 45 deletions
diff --git a/src/server_plugin.py b/src/server_plugin.py
index 4e793f1..84e93f2 100644
--- a/src/server_plugin.py
+++ b/src/server_plugin.py
@@ -235,22 +235,6 @@ class ServerPlugin(TelepathyPlugin):
TelepathyPlugin._connected_cb(self)
- publish_handles, local_pending, remote_pending = \
- self._publish_channel[CHANNEL_INTERFACE_GROUP].GetAllMembers()
-
- if local_pending:
- # accept pending subscriptions
- # FIXME: do this async
- self._publish_channel[CHANNEL_INTERFACE_GROUP].AddMembers(
- local_pending, '')
-
- # request subscriptions from people subscribed to us if we're not
- # subscribed to them
- not_subscribed = set(publish_handles)
- not_subscribed -= self._subscribe_members
- self._subscribe_channel[CHANNEL_INTERFACE_GROUP].AddMembers(
- not_subscribed, '')
-
def _publish_members_changed_cb(self, message, added, removed,
local_pending, remote_pending,
actor, reason):
@@ -289,3 +273,23 @@ class ServerPlugin(TelepathyPlugin):
return
TelepathyPlugin._handle_connection_status_change(self, status, reason)
+
+ def _publish_channel_cb(self, channel):
+ TelepathyPlugin._publish_channel_cb(self, channel)
+
+ publish_handles, local_pending, remote_pending = \
+ self._publish_channel[CHANNEL_INTERFACE_GROUP].GetAllMembers()
+
+ if local_pending:
+ # accept pending subscriptions
+ # FIXME: do this async
+ self._publish_channel[CHANNEL_INTERFACE_GROUP].AddMembers(
+ local_pending, '')
+
+ # request subscriptions from people subscribed to us if we're
+ # not subscribed to them
+ not_subscribed = set(publish_handles)
+ not_subscribed -= self._subscribe_members
+ self._subscribe_channel[CHANNEL_INTERFACE_GROUP].AddMembers(
+ not_subscribed, '')
+
diff --git a/src/telepathy_plugin.py b/src/telepathy_plugin.py
index c73e7c7..c486884 100644
--- a/src/telepathy_plugin.py
+++ b/src/telepathy_plugin.py
@@ -470,6 +470,40 @@ class TelepathyPlugin(gobject.GObject):
CHANNEL_TYPE_STREAMED_MEDIA)):
self.emit("private-invitation", object_path)
+ elif (handle_type == HANDLE_TYPE_LIST and
+ channel_type == CHANNEL_TYPE_CONTACT_LIST):
+ name = self._conn.InspectHandles(handle_type, [handle])[0]
+ channel = Channel(self._conn.service_name, object_path)
+
+ if name == 'publish':
+ self._publish_channel_cb(channel)
+ elif name == 'subscribe':
+ self._subscribe_channel_cb(channel)
+
+ def _publish_channel_cb(self, channel):
+ # the group of contacts who may receive your presence
+ self._publish_channel = channel
+ m = channel[CHANNEL_INTERFACE_GROUP].connect_to_signal(
+ 'MembersChanged', self._publish_members_changed_cb)
+ self._matches.append(m)
+
+ def _subscribe_channel_cb(self, channel):
+ # the group of contacts for whom you wish to receive presence
+ self._subscribe_channel = channel
+ m = channel[CHANNEL_INTERFACE_GROUP].connect_to_signal(
+ 'MembersChanged', self._subscribe_members_changed_cb)
+ self._matches.append(m)
+ subscribe_handles, subscribe_lp, subscribe_rp = \
+ channel[CHANNEL_INTERFACE_GROUP].GetAllMembers()
+ self._subscribe_members = set(subscribe_handles)
+ self._subscribe_local_pending = set(subscribe_lp)
+ self._subscribe_remote_pending = set(subscribe_rp)
+
+ if CONN_INTERFACE_PRESENCE in self._conn:
+ # request presence for everyone we're subscribed to
+ self._conn[CONN_INTERFACE_PRESENCE].RequestPresence(
+ subscribe_handles)
+
def _connected_cb(self):
"""Callback on successful connection to a server
"""
@@ -485,31 +519,6 @@ class TelepathyPlugin(gobject.GObject):
for iface in self._conn[CONN_INTERFACE].GetInterfaces():
interfaces.add(iface)
- # request both handles at the same time to reduce round-trips
- pub_handle, sub_handle = self._conn[CONN_INTERFACE].RequestHandles(
- HANDLE_TYPE_LIST, ['publish', 'subscribe'])
-
- # the group of contacts who may receive your presence
- publish = self._conn.request_channel(CHANNEL_TYPE_CONTACT_LIST,
- HANDLE_TYPE_LIST, pub_handle, True)
- self._publish_channel = publish
- m = publish[CHANNEL_INTERFACE_GROUP].connect_to_signal(
- 'MembersChanged', self._publish_members_changed_cb)
- self._matches.append(m)
-
- # the group of contacts for whom you wish to receive presence
- subscribe = self._conn.request_channel(CHANNEL_TYPE_CONTACT_LIST,
- HANDLE_TYPE_LIST, sub_handle, True)
- self._subscribe_channel = subscribe
- m = subscribe[CHANNEL_INTERFACE_GROUP].connect_to_signal(
- 'MembersChanged', self._subscribe_members_changed_cb)
- self._matches.append(m)
- subscribe_handles, subscribe_lp, subscribe_rp = \
- subscribe[CHANNEL_INTERFACE_GROUP].GetAllMembers()
- self._subscribe_members = set(subscribe_handles)
- self._subscribe_local_pending = set(subscribe_lp)
- self._subscribe_remote_pending = set(subscribe_rp)
-
# FIXME: do this async?
self.self_handle = self._conn[CONN_INTERFACE].GetSelfHandle()
self.self_identifier = self._conn[CONN_INTERFACE].InspectHandles(
@@ -520,10 +529,6 @@ class TelepathyPlugin(gobject.GObject):
m = self._conn[CONN_INTERFACE_PRESENCE].connect_to_signal(
'PresenceUpdate', self._presence_update_cb)
self._matches.append(m)
-
- # Request presence for everyone we're subscribed to
- self._conn[CONN_INTERFACE_PRESENCE].RequestPresence(
- subscribe_handles)
else:
_logger.warning('%s does not support Connection.Interface.'
'Presence', self._conn.object_path)