diff --git a/services/presence/server_plugin.py b/services/presence/server_plugin.py index 3654b923..036cc2e4 100644 --- a/services/presence/server_plugin.py +++ b/services/presence/server_plugin.py @@ -356,21 +356,6 @@ class ServerPlugin(gobject.GObject): self._handle_connection_status_change(status, 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): """Callback on successful connection to a server """ @@ -379,8 +364,13 @@ class ServerPlugin(gobject.GObject): # we successfully register this account 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 - 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 publish[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged', self._publish_members_changed_cb) @@ -388,7 +378,8 @@ class ServerPlugin(gobject.GObject): publish[CHANNEL_INTERFACE_GROUP].GetAllMembers() # 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 subscribe[CHANNEL_INTERFACE_GROUP].connect_to_signal('MembersChanged', self._subscribe_members_changed_cb)