import weakref
import logging
+import gobject
import telepathy
try:
import constants
import tp
import util.coroutines as coroutines
+import util.go_utils as gobject_utils
import util.misc as util_misc
import gtk_toolbox
useGVContacts = True
+ assert gvoice.session.Session._DEFAULTS["contacts"][1] == "hours"
+ contactsPollPeriodInHours = gvoice.session.Session._DEFAULTS["contacts"][0]
+
+ assert gvoice.session.Session._DEFAULTS["voicemail"][1] == "minutes"
+ voicemailPollPeriodInMinutes = gvoice.session.Session._DEFAULTS["voicemail"][0]
+
+ assert gvoice.session.Session._DEFAULTS["texts"][1] == "minutes"
+ textsPollPeriodInMinutes = gvoice.session.Session._DEFAULTS["texts"][0]
+
def __init__(self, parameters = None):
if parameters is None:
return
self.useGVContacts = parameters["use-gv-contacts"]
+ self.contactsPollPeriodInHours = parameters['contacts-poll-period-in-hours']
+ self.voicemailPollPeriodInMinutes = parameters['voicemail-poll-period-in-minutes']
+ self.textsPollPeriodInMinutes = parameters['texts-poll-period-in-minutes']
class TheOneRingConnection(
# overiding base class variable
_mandatory_parameters = {
- 'account' : 's',
- 'password' : 's',
+ 'account': 's',
+ 'password': 's',
}
# overiding base class variable
_optional_parameters = {
- 'forward' : 's',
- 'use-gv-contacts' : 'b',
+ 'forward': 's',
+ 'use-gv-contacts': 'b',
+ 'contacts-poll-period-in-hours': 'i',
+ 'voicemail-poll-period-in-minutes': 'i',
+ 'texts-poll-period-in-minutes': 'i',
}
_parameter_defaults = {
- 'forward' : '',
- 'use-gv-contacts' : TheOneRingOptions.useGVContacts,
+ 'forward': '',
+ 'use-gv-contacts': TheOneRingOptions.useGVContacts,
+ 'contacts-poll-period-in-hours': TheOneRingOptions.contactsPollPeriodInHours,
+ 'voicemail-poll-period-in-minutes': TheOneRingOptions.voicemailPollPeriodInMinutes,
+ 'texts-poll-period-in-minutes': TheOneRingOptions.textsPollPeriodInMinutes,
}
_secret_parameters = set((
"password",
self.set_self_handle(handle.create_handle(self, 'connection'))
self.__callback = None
+ self.__connectionEventId = None
+ self.__delayedDisconnectEventId = None
_moduleLogger.info("Connection to the account %s created" % account)
@property
self.session.close()
self.manager.disconnected(self)
+
+ self._cancel_delayed_disconnect()
+ self.__connection = None
_moduleLogger.info("Disconnected")
@gtk_toolbox.log_exception(_moduleLogger)
"""
@note Maemo specific
"""
- if not self.session.is_logged_in():
- _moduleLogger.info("Received connection change event when not logged in")
- return
status = event.get_status()
error = event.get_error()
iap_id = event.get_iap_id()
bearer = event.get_bearer_type()
if status == conic.STATUS_DISCONNECTED:
- _moduleLogger.info("Disconnecting due to loss of network connection")
- self.StatusChanged(
- telepathy.CONNECTION_STATUS_DISCONNECTED,
- telepathy.CONNECTION_STATUS_REASON_NETWORK_ERROR
+ _moduleLogger.info("Disconnected from network, starting countdown to logoff")
+ self.__delayedDisconnectEventId = gobject_utils.timeout_add_seconds(
+ 5, self._on_delayed_disconnect
)
- try:
- self._disconnect()
- except Exception:
- _moduleLogger.exception("Error durring disconnect")
+ elif status == conic.STATUS_CONNECTED:
+ _moduleLogger.info("Connected to network")
+ self._cancel_delayed_disconnect()
else:
_moduleLogger.info("Other status: %r" % (status, ))
+
+ def _cancel_delayed_disconnect(self):
+ if self.__delayedDisconnectEventId is None:
+ return
+ _moduleLogger.info("Cancelling auto-log off")
+ gobject.source_reove(self.__delayedDisconnectEventId)
+ self.__delayedDisconnectEventId = None
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def _on_delayed_disconnect(self):
+ if not self.session.is_logged_in():
+ _moduleLogger.info("Received connection change event when not logged in")
+ return
+ try:
+ self._disconnect()
+ except Exception:
+ _moduleLogger.exception("Error durring disconnect")
+ self.StatusChanged(
+ telepathy.CONNECTION_STATUS_DISCONNECTED,
+ telepathy.CONNECTION_STATUS_REASON_NETWORK_ERROR
+ )
+ self.__delayedDisconnectEventId = None
+ return False