forked from platypush/platypush
Restart the assistant connection on error
This commit is contained in:
parent
05a1713b92
commit
2956a9ca63
1 changed files with 20 additions and 5 deletions
|
@ -79,6 +79,7 @@ class AssistantGoogleBackend(Backend):
|
||||||
self.credentials_file = credentials_file
|
self.credentials_file = credentials_file
|
||||||
self.device_model_id = device_model_id
|
self.device_model_id = device_model_id
|
||||||
self.assistant = None
|
self.assistant = None
|
||||||
|
self._has_error =False
|
||||||
|
|
||||||
with open(self.credentials_file, 'r') as f:
|
with open(self.credentials_file, 'r') as f:
|
||||||
self.credentials = google.oauth2.credentials.Credentials(
|
self.credentials = google.oauth2.credentials.Credentials(
|
||||||
|
@ -102,6 +103,11 @@ class AssistantGoogleBackend(Backend):
|
||||||
elif hasattr(EventType, 'ON_RENDER_RESPONSE') and \
|
elif hasattr(EventType, 'ON_RENDER_RESPONSE') and \
|
||||||
event.type == EventType.ON_RENDER_RESPONSE:
|
event.type == EventType.ON_RENDER_RESPONSE:
|
||||||
self.bus.post(ResponseEvent(response_text=event.args.get('text')))
|
self.bus.post(ResponseEvent(response_text=event.args.get('text')))
|
||||||
|
elif hasattr(EventType, 'ON_RESPONDING_STARTED') and \
|
||||||
|
event.type == EventType.ON_RENDER_RESPONSE and \
|
||||||
|
event.args.get('is_error_response'):
|
||||||
|
self.logger.warning('Assistant response error')
|
||||||
|
self._has_error = True
|
||||||
elif event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
|
elif event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
|
||||||
phrase = event.args['text'].lower().strip()
|
phrase = event.args['text'].lower().strip()
|
||||||
self.logger.info('Speech recognized: {}'.format(phrase))
|
self.logger.info('Speech recognized: {}'.format(phrase))
|
||||||
|
@ -121,8 +127,9 @@ class AssistantGoogleBackend(Backend):
|
||||||
else:
|
else:
|
||||||
self.bus.post(AlertEndEvent())
|
self.bus.post(AlertEndEvent())
|
||||||
elif event.type == EventType.ON_ASSISTANT_ERROR:
|
elif event.type == EventType.ON_ASSISTANT_ERROR:
|
||||||
|
self._has_error = True
|
||||||
if event.args.get('is_fatal'):
|
if event.args.get('is_fatal'):
|
||||||
self.logger.error('Fatal assistant error, restart the application')
|
self.logger.error('Fatal assistant error')
|
||||||
else:
|
else:
|
||||||
self.logger.warning('Assistant error')
|
self.logger.warning('Assistant error')
|
||||||
|
|
||||||
|
@ -142,10 +149,18 @@ class AssistantGoogleBackend(Backend):
|
||||||
def run(self):
|
def run(self):
|
||||||
super().run()
|
super().run()
|
||||||
|
|
||||||
|
while not self.should_stop():
|
||||||
|
self._has_error = False
|
||||||
|
|
||||||
with Assistant(self.credentials, self.device_model_id) as assistant:
|
with Assistant(self.credentials, self.device_model_id) as assistant:
|
||||||
self.assistant = assistant
|
self.assistant = assistant
|
||||||
for event in assistant.start():
|
for event in assistant.start():
|
||||||
self._process_event(event)
|
self._process_event(event)
|
||||||
|
if self._has_error:
|
||||||
|
self.logger.info('Restarting the assistant after ' +
|
||||||
|
'an unrecoverable error')
|
||||||
|
time.sleep(5)
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Reference in a new issue