services/presence/server_plugin: Use telepathy-python helper function request_channel()
Also request the subscribe and publish handles at the same time, to reduce D-Bus roundtrips.
This commit is contained in:
parent
a450a82e59
commit
4e188059e3
@ -356,21 +356,6 @@ class ServerPlugin(gobject.GObject):
|
|||||||
self._handle_connection_status_change(status,
|
self._handle_connection_status_change(status,
|
||||||
CONNECTION_STATUS_REASON_NONE_SPECIFIED)
|
CONNECTION_STATUS_REASON_NONE_SPECIFIED)
|
||||||
|
|
||||||
def _request_list_channel(self, name):
|
|
||||||
"""Request a contact-list channel from Telepathy
|
|
||||||
|
|
||||||
name -- publish/subscribe, for the type of channel
|
|
||||||
"""
|
|
||||||
handle = self._conn[CONN_INTERFACE].RequestHandles(
|
|
||||||
HANDLE_TYPE_LIST, [name])[0]
|
|
||||||
chan_path = self._conn[CONN_INTERFACE].RequestChannel(
|
|
||||||
CHANNEL_TYPE_CONTACT_LIST, HANDLE_TYPE_LIST,
|
|
||||||
handle, True)
|
|
||||||
channel = Channel(self._conn.service_name, chan_path)
|
|
||||||
# hack
|
|
||||||
channel._valid_interfaces.add(CHANNEL_INTERFACE_GROUP)
|
|
||||||
return channel
|
|
||||||
|
|
||||||
def _connected_cb(self):
|
def _connected_cb(self):
|
||||||
"""Callback on successful connection to a server
|
"""Callback on successful connection to a server
|
||||||
"""
|
"""
|
||||||
@ -379,8 +364,13 @@ class ServerPlugin(gobject.GObject):
|
|||||||
# we successfully register this account
|
# we successfully register this account
|
||||||
self._owner.set_registered(True)
|
self._owner.set_registered(True)
|
||||||
|
|
||||||
|
# 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
|
# the group of contacts who may receive your presence
|
||||||
publish = self._request_list_channel('publish')
|
publish = self._conn.request_channel(CHANNEL_TYPE_CONTACT_LIST,
|
||||||
|
HANDLE_TYPE_LIST, pub_handle, True)
|
||||||
self._publish_channel = publish
|
self._publish_channel = publish
|
||||||
publish[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged',
|
publish[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged',
|
||||||
self._publish_members_changed_cb)
|
self._publish_members_changed_cb)
|
||||||
@ -388,7 +378,8 @@ class ServerPlugin(gobject.GObject):
|
|||||||
publish[CHANNEL_INTERFACE_GROUP].GetAllMembers()
|
publish[CHANNEL_INTERFACE_GROUP].GetAllMembers()
|
||||||
|
|
||||||
# the group of contacts for whom you wish to receive presence
|
# the group of contacts for whom you wish to receive presence
|
||||||
subscribe = self._request_list_channel('subscribe')
|
subscribe = self._conn.request_channel(CHANNEL_TYPE_CONTACT_LIST,
|
||||||
|
HANDLE_TYPE_LIST, sub_handle, True)
|
||||||
self._subscribe_channel = subscribe
|
self._subscribe_channel = subscribe
|
||||||
subscribe[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged',
|
subscribe[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged',
|
||||||
self._subscribe_members_changed_cb)
|
self._subscribe_members_changed_cb)
|
||||||
|
Loading…
Reference in New Issue
Block a user