added mechanism to query event status

pull/1193/head
Michael Nguyen 2017-10-31 19:27:58 -05:00
parent b7844df596
commit a7596988a7
2 changed files with 46 additions and 1 deletions

View File

@ -16,6 +16,7 @@ import imp
import operator
import sys
import time
import datetime
from functools import wraps
from inspect import getargspec
@ -386,7 +387,7 @@ class MycroftSkill(object):
Removes an event from emitter and events list
Args:
name: Name Intent
name: Name of Intent or Scheduler Event
"""
for _name, _handler in self.events:
if name == _name:
@ -716,6 +717,39 @@ class MycroftSkill(object):
self.remove_event(unique_name)
self.emitter.emit(Message('mycroft.scheduler.remove_event', data=data))
def get_event_status(self, name):
"""
Get event data and return the amount of time left
Args:
name (str): Name of event
Return:
(datetime, int) (tuple): datetime and time left in epoch time
"""
event_name = self._unique_name(name)
data = {'name': event_name}
# this is needed because message.data could return None
# and that would make the while loop infinite
self.event_status = "None"
def callback(message):
event_time = int(message.data[0][0])
current_time = int(time.time())
time_left_in_seconds = event_time - current_time
date = datetime.datetime.now() + time_left
self.event_status = (date, time_left_in_seconds)
emitter_name = 'mycroft.event_status.callback.{}'.format(event_name)
self.emitter.once(emitter_name, callback)
self.emitter.emit(Message('mycroft.scheduler.get_event', data=data))
while True:
if self.event_status != "None":
return self.event_status
class FallbackSkill(MycroftSkill):
"""

View File

@ -42,6 +42,8 @@ class EventScheduler(Thread):
self.remove_event_handler)
self.emitter.on('mycroft.scheduler.update_event',
self.update_event_handler)
self.emitter.on('mycroft.scheduler.get_event',
self.get_event_handler)
self.start()
def load(self):
@ -166,6 +168,15 @@ class EventScheduler(Thread):
data = message.data.get('data')
self.update_event(event, data)
def get_event_handler(self, message):
""" Messagebus interface to get_event method. """
event_name = message.data.get("name")
event = None
if event_name in self.events:
event = self.events[event_name]
emitter_name = 'mycroft.event_status.callback.{}'.format(event_name)
self.emitter.emit(Message(emitter_name, data=event))
def store(self):
"""
Write current schedule to disk.