Adding an auto-cleanup in case the client is being a real pain and not cleaning up...
authorEd Page <eopage@byu.net>
Sat, 27 Feb 2010 05:23:22 +0000 (23:23 -0600)
committerEd Page <eopage@byu.net>
Sat, 27 Feb 2010 05:23:22 +0000 (23:23 -0600)
src/autogv.py
src/connection.py

index 57c9a37..b29990e 100644 (file)
@@ -140,6 +140,23 @@ class RefreshVoicemail(object):
                self._outstandingRequests.remove(missDetection)
 
 
+class TimedDisconnect(object):
+
+       def __init__(self, connRef):
+               self._connRef = connRef
+               self.__delayedDisconnect = gobject_utils.Timeout(self._on_delayed_disconnect)
+
+       def start(self):
+               self.__delayedDisconnect.start(seconds=5)
+
+       def stop(self):
+               self.__delayedDisconnect.cancel()
+
+       def _on_delayed_disconnect(self):
+               _moduleLogger.info("Timed disconnect occurred")
+               self._connRef().disconnect(telepathy.CONNECTION_STATUS_REASON_NETWORK_ERROR)
+
+
 class AutoDisconnect(object):
 
        def __init__(self, connRef):
index fc62020..a5dec2e 100644 (file)
@@ -142,6 +142,8 @@ class TheOneRingConnection(
                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):
@@ -188,6 +190,7 @@ class TheOneRingConnection(
                        return
                _moduleLogger.info("Kicking off connect")
                self._delayedConnect.start()
+               self._timedDisconnect.stop()
 
        @misc_utils.log_exception(_moduleLogger)
        def _delayed_connect(self):
@@ -279,6 +282,7 @@ class TheOneRingConnection(
                _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