Auto-enabled system contacts for all contacts
[theonering] / src / autogv.py
index 525ecaf..9a0f61e 100644 (file)
@@ -1,5 +1,6 @@
 import logging
 
+import dbus
 import telepathy
 
 try:
@@ -22,7 +23,7 @@ import util.misc as misc_utils
 import gvoice
 
 
-_moduleLogger = logging.getLogger("autogv")
+_moduleLogger = logging.getLogger(__name__)
 
 
 class NewGVConversations(object):
@@ -118,7 +119,11 @@ class RefreshVoicemail(object):
                        return
 
                conn = telepathy.client.Connection(serviceName, connObjectPath)
-               chan = telepathy.client.Channel(serviceName, channelObjectPath)
+               try:
+                       chan = telepathy.client.Channel(serviceName, channelObjectPath)
+               except dbus.exceptions.UnknownMethodException:
+                       _moduleLogger.exception("Client might not have implemented a deprecated method")
+                       return
                missDetection = telepathy_utils.WasMissedCall(
                        bus, conn, chan, self._on_missed_call, self._on_error_for_missed
                )
@@ -136,6 +141,24 @@ 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=20)
+
+       def stop(self):
+               self.__delayedDisconnect.cancel()
+
+       @misc_utils.log_exception(_moduleLogger)
+       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):
@@ -174,6 +197,7 @@ class AutoDisconnect(object):
                else:
                        _moduleLogger.info("Other status: %r" % (status, ))
 
+       @misc_utils.log_exception(_moduleLogger)
        def _cancel_delayed_disconnect(self):
                _moduleLogger.info("Cancelling auto-log off")
                self.__delayedDisconnect.cancel()
@@ -230,3 +254,22 @@ class DisconnectOnShutdown(object):
                        self._connRef().disconnect(telepathy.CONNECTION_STATUS_REASON_REQUESTED)
                except Exception:
                        _moduleLogger.exception("Error durring disconnect")
+
+
+class DelayEnableContactIntegration(object):
+
+       def __init__(self, protocolName):
+               self.__enableSystemContactSupport = telepathy_utils.EnableSystemContactIntegration(
+                       protocolName
+               )
+               self.__delayedEnable = gobject_utils.Async(self._on_delayed_enable)
+
+       def start(self):
+               self.__delayedEnable.start()
+
+       def stop(self):
+               self.__delayedEnable.cancel()
+
+       @misc_utils.log_exception(_moduleLogger)
+       def _on_delayed_enable(self):
+               self.__enableSystemContactSupport.start()