Example #1
0
	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
Example #2
0
	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)