From: Ed Page Date: Sun, 7 Feb 2010 05:13:00 +0000 (-0600) Subject: Adjusting voicemails state_machine so that it will intelligently respond to missed... X-Git-Url: http://git.maemo.org/git/?p=theonering;a=commitdiff_plain;h=851029240987cf91d3da261e39b521509d0b2324 Adjusting voicemails state_machine so that it will intelligently respond to missed/rejected calls --- diff --git a/src/gvoice/session.py b/src/gvoice/session.py index cf6fa8c..45f80b9 100644 --- a/src/gvoice/session.py +++ b/src/gvoice/session.py @@ -78,7 +78,9 @@ class Session(object): ) self._voicemailsStateMachine.set_state_strategy( state_machine.StateMachine.STATE_ACTIVE, - state_machine.ConstantStateStrategy(voicemailPeriodInSeconds) + state_machine.NTimesStateStrategy( + 3 * [state_machine.to_seconds(minutes=1)], voicemailPeriodInSeconds + ) ) self._voicemails.updateSignalHandler.register_sink( self._voicemailsStateMachine.request_reset_timers diff --git a/src/gvoice/state_machine.py b/src/gvoice/state_machine.py index 1403ebc..bb58c7e 100644 --- a/src/gvoice/state_machine.py +++ b/src/gvoice/state_machine.py @@ -81,6 +81,41 @@ class ConstantStateStrategy(object): return "ConstantStateStrategy(timeout=%r)" % self._timeout +class NTimesStateStrategy(object): + + def __init__(self, timeouts, postTimeout): + assert 0 < len(timeouts) + for timeout in timeouts: + assert 0 < timeout or timeout == UpdateStateMachine.INFINITE_PERIOD + assert 0 < postTimeout or postTimeout == UpdateStateMachine.INFINITE_PERIOD + self._timeouts = timeouts + self._postTimeout = postTimeout + + self._attemptCount = 0 + + def initialize_state(self): + self._attemptCount = len(self._timeouts) + + def reinitialize_state(self): + self._attemptCount = 0 + + def increment_state(self): + self._attemptCount += 1 + + @property + def timeout(self): + try: + return self._timeouts[self._attemptCount] + except IndexError: + return self._postTimeout + + def __repr__(self): + return "NTimesStateStrategy(timeouts=%r, postTimeout=%r)" % ( + self._timeouts, + self._postTimeout, + ) + + class GeometricStateStrategy(object): def __init__(self, init, min, max): @@ -251,6 +286,10 @@ class UpdateStateMachine(StateMachine): def _strategy(self): return self._strategies[self._state] + @property + def maxTime(self): + return self._maxTime + @gtk_toolbox.log_exception(_moduleLogger) def _request_reset_timers(self, *args): self._reset_timers()