+ def __init__(self, connection, manager, props, listHandle):
+ tp.ChannelTypeContactList.__init__(self, connection, manager, props)
+ tp.ChannelInterfaceGroup.__init__(self)
+
+ self.__manager = manager
+ self.__props = props
+ self.__session = connection.session
+ self.__listHandle = listHandle
+ self.__members = set()
+
+ if self._conn.options.useGVContacts:
+ self._callback = coroutines.func_sink(
+ coroutines.expand_positional(
+ self._on_contacts_refreshed
+ )
+ )
+ self.__session.addressbook.updateSignalHandler.register_sink(
+ self._callback
+ )
+
+ addressbook = connection.session.addressbook
+ contacts = addressbook.get_numbers()
+ self._process_refresh(addressbook, set(contacts), set(), set())
+ else:
+ self._callback = None
+
+ self.GroupFlagsChanged(0, 0)
+
+
+ @misc_utils.log_exception(_moduleLogger)
+ def Close(self):
+ self.close()
+
+ def close(self):
+ _moduleLogger.debug("Closing contact list")
+ if self._callback is not None:
+ self.__session.addressbook.updateSignalHandler.unregister_sink(
+ self._callback
+ )
+ self._callback = None
+
+ tp.ChannelTypeContactList.Close(self)
+ self.remove_from_connection()
+
+ @misc_utils.log_exception(_moduleLogger)
+ def GetLocalPendingMembersWithInfo(self):
+ return []
+
+ @misc_utils.log_exception(_moduleLogger)
+ def _on_contacts_refreshed(self, addressbook, added, removed, changed):
+ self._process_refresh(addressbook, added, removed, changed)