def __init__(self, defaults = None): if defaults is None: defaults = self._DEFAULTS else: for key, (quant, unit) in defaults.iteritems(): if quant == 0: defaults[key] = (self._DEFAULTS[key], unit) elif quant < 0: defaults[key] = (state_machine.UpdateStateMachine.INFINITE_PERIOD, unit) self._asyncPool = gobject_utils.AsyncPool() self._backend = backend.BluetoothBackend() if defaults["contacts"][0] == state_machine.UpdateStateMachine.INFINITE_PERIOD: contactsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD else: contactsPeriodInSeconds = state_machine.to_seconds( **{defaults["contacts"][1]: defaults["contacts"][0],} ) self._addressbook = addressbook.Addressbook(self._backend, self._asyncPool) self._addressbookStateMachine = state_machine.UpdateStateMachine([self.addressbook], "Addressbook") self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_DND, state_machine.NopStateStrategy() ) self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_IDLE, state_machine.NopStateStrategy() ) self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_ACTIVE, state_machine.ConstantStateStrategy(contactsPeriodInSeconds) ) self._masterStateMachine = state_machine.MasterStateMachine() self._masterStateMachine.append_machine(self._addressbookStateMachine) self._lastDndCheck = 0 self._cachedIsDnd = False
def __init__(self, cookiePath = None, defaults = None): if defaults is None: defaults = self._DEFAULTS else: for key, (quant, unit) in defaults.iteritems(): if quant == 0: defaults[key] = (self._DEFAULTS[key], unit) elif quant < 0: defaults[key] = (state_machine.UpdateStateMachine.INFINITE_PERIOD, unit) self._username = None self._password = None self._cookiePath = cookiePath self._lastDndCheck = 0 self._cachedIsDnd = False self._asyncPool = gobject_utils.AsyncPool() import backend self._backend = backend.GVoiceBackend(self._cookiePath) if defaults["contacts"][0] == state_machine.UpdateStateMachine.INFINITE_PERIOD: contactsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD else: contactsPeriodInSeconds = state_machine.to_seconds( **{defaults["contacts"][1]: defaults["contacts"][0],} ) self._addressbook = addressbook.Addressbook(self._backend, self._asyncPool) self._addressbookStateMachine = state_machine.UpdateStateMachine([self.addressbook], "Addressbook") self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_DND, state_machine.NopStateStrategy() ) self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_IDLE, state_machine.NopStateStrategy() ) self._addressbookStateMachine.set_state_strategy( state_machine.StateMachine.STATE_ACTIVE, state_machine.ConstantStateStrategy(contactsPeriodInSeconds) ) if defaults["voicemail"][0] == state_machine.UpdateStateMachine.INFINITE_PERIOD: voicemailPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD idleVoicemailPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD else: voicemailPeriodInSeconds = state_machine.to_seconds( **{defaults["voicemail"][1]: defaults["voicemail"][0],} ) idleVoicemailPeriodInSeconds = max(voicemailPeriodInSeconds * 4, self._MINIMUM_MESSAGE_PERIOD) self._voicemails = conversations.Conversations(self._backend.get_voicemails, self._asyncPool) self._voicemailsStateMachine = state_machine.UpdateStateMachine([self.voicemails], "Voicemail") self._voicemailsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_DND, state_machine.NopStateStrategy() ) self._voicemailsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_IDLE, state_machine.ConstantStateStrategy(idleVoicemailPeriodInSeconds) ) self._voicemailsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_ACTIVE, state_machine.NTimesStateStrategy( 3 * [state_machine.to_seconds(minutes=1)], voicemailPeriodInSeconds ) ) self._voicemails.updateSignalHandler.register_sink( self._voicemailsStateMachine.request_reset_timers ) if defaults["texts"][0] == state_machine.UpdateStateMachine.INFINITE_PERIOD: initTextsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD minTextsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD textsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD idleTextsPeriodInSeconds = state_machine.UpdateStateMachine.INFINITE_PERIOD else: initTextsPeriodInSeconds = state_machine.to_seconds(seconds=20) minTextsPeriodInSeconds = state_machine.to_seconds(seconds=1) textsPeriodInSeconds = state_machine.to_seconds( **{defaults["texts"][1]: defaults["texts"][0],} ) idleTextsPeriodInSeconds = max(textsPeriodInSeconds * 4, self._MINIMUM_MESSAGE_PERIOD) self._texts = conversations.Conversations(self._backend.get_texts, self._asyncPool) self._textsStateMachine = state_machine.UpdateStateMachine([self.texts], "Texting") self._textsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_DND, state_machine.NopStateStrategy() ) self._textsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_IDLE, state_machine.ConstantStateStrategy(idleTextsPeriodInSeconds) ) self._textsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_ACTIVE, state_machine.GeometricStateStrategy( initTextsPeriodInSeconds, minTextsPeriodInSeconds, textsPeriodInSeconds, ) ) self._texts.updateSignalHandler.register_sink( self._textsStateMachine.request_reset_timers ) self._masterStateMachine = state_machine.MasterStateMachine() self._masterStateMachine.append_machine(self._addressbookStateMachine) self._masterStateMachine.append_machine(self._voicemailsStateMachine) self._masterStateMachine.append_machine(self._textsStateMachine)