Async connect/disconnect. Moved everything to a new Async and Timeout which cleans...
[theonering] / src / channel / contact_list.py
index 8e60ee2..e184d2d 100644 (file)
@@ -4,7 +4,7 @@ import telepathy
 
 import tp
 import util.coroutines as coroutines
-import gtk_toolbox
+import util.misc as misc_utils
 import handle
 
 
@@ -29,41 +29,45 @@ class AllContactsListChannel(
                self.__listHandle = listHandle
                self.__members = set()
 
-               self._callback = coroutines.func_sink(
-                       coroutines.expand_positional(
-                               self._on_contacts_refreshed
+               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
                        )
-               )
-               self.__session.addressbook.updateSignalHandler.register_sink(
-                       self._callback
-               )
 
-               self.GroupFlagsChanged(0, 0)
+                       addressbook = connection.session.addressbook
+                       contacts = addressbook.get_numbers()
+                       self._process_refresh(addressbook, set(contacts), set(), set())
+               else:
+                       self._callback = None
 
-               addressbook = connection.session.addressbook
-               contacts = addressbook.get_numbers()
-               self._process_refresh(addressbook, set(contacts), set(), set())
+               self.GroupFlagsChanged(0, 0)
 
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @misc_utils.log_exception(_moduleLogger)
        def Close(self):
                self.close()
 
        def close(self):
                _moduleLogger.debug("Closing contact list")
-               self.__session.addressbook.updateSignalHandler.unregister_sink(
-                       self._callback
-               )
-               self._callback = None
+               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()
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @misc_utils.log_exception(_moduleLogger)
        def GetLocalPendingMembersWithInfo(self):
                return []
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @misc_utils.log_exception(_moduleLogger)
        def _on_contacts_refreshed(self, addressbook, added, removed, changed):
                self._process_refresh(addressbook, added, removed, changed)