+ 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._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)
+
+ self._lastDndCheck = 0
+ self._cachedIsDnd = False
+
+ def load(self, path):
+ self._texts.load(os.sep.join((path, "texts.cache")))
+ self._voicemails.load(os.sep.join((path, "voicemails.cache")))
+
+ def save(self, path):
+ self._texts.save(os.sep.join((path, "texts.cache")))
+ self._voicemails.save(os.sep.join((path, "voicemails.cache")))