Auto-enabled system contacts for all contacts
[theonering] / src / connection.py
index c209370..933c372 100644 (file)
@@ -138,10 +138,13 @@ class TheOneRingConnection(
                        autogv.NewGVConversations(weakref.ref(self)),
                        autogv.RefreshVoicemail(weakref.ref(self)),
                        autogv.AutoDisconnect(weakref.ref(self)),
+                       autogv.DelayEnableContactIntegration(constants._telepathy_implementation_name_),
                ]
                self._delayedConnect = gobject_utils.Async(self._delayed_connect)
 
                _moduleLogger.info("Connection to the account %s created" % account)
+               self._timedDisconnect = autogv.TimedDisconnect(weakref.ref(self))
+               self._timedDisconnect.start()
 
        @property
        def manager(self):
@@ -166,11 +169,9 @@ class TheOneRingConnection(
        def get_handle_by_name(self, handleType, handleName):
                requestedHandleName = handleName.encode('utf-8')
                if handleType == telepathy.HANDLE_TYPE_CONTACT:
-                       _moduleLogger.debug("get_handle_by_name Contact: %s" % requestedHandleName)
                        h = handle.create_handle(self, 'contact', requestedHandleName)
                elif handleType == telepathy.HANDLE_TYPE_LIST:
                        # Support only server side (immutable) lists
-                       _moduleLogger.debug("get_handle_by_name List: %s" % requestedHandleName)
                        h = handle.create_handle(self, 'list', requestedHandleName)
                else:
                        raise telepathy.errors.NotAvailable('Handle type unsupported %d' % handleType)
@@ -190,6 +191,7 @@ class TheOneRingConnection(
                        return
                _moduleLogger.info("Kicking off connect")
                self._delayedConnect.start()
+               self._timedDisconnect.stop()
 
        @misc_utils.log_exception(_moduleLogger)
        def _delayed_connect(self):
@@ -238,7 +240,7 @@ class TheOneRingConnection(
                For org.freedesktop.telepathy.Connection
                """
                _moduleLogger.info("Kicking off disconnect")
-               self._delayed_disconnect()
+               self.disconnect(telepathy.CONNECTION_STATUS_REASON_REQUESTED)
 
        @misc_utils.log_exception(_moduleLogger)
        def RequestChannel(self, type, handleType, handleId, suppressHandler):
@@ -277,15 +279,11 @@ class TheOneRingConnection(
 
                return props
 
-       @gobject_utils.async
-       def _delayed_disconnect(self):
-               self.disconnect(telepathy.CONNECTION_STATUS_REASON_REQUESTED)
-               return False
-
        def disconnect(self, reason):
                _moduleLogger.info("Disconnecting")
 
                self._delayedConnect.cancel()
+               self._timedDisconnect.stop()
 
                # Not having the disconnect first can cause weird behavior with clients
                # including not being able to reconnect or even crashing
@@ -298,9 +296,10 @@ class TheOneRingConnection(
                        plumber.stop()
 
                self.__channelManager.close()
+               self.manager.disconnected(self)
+
                self.session.save(self.__cachePath)
                self.session.logout()
                self.session.close()
 
-               self.manager.disconnected(self)
                _moduleLogger.info("Disconnected")