Hugvey now resumes without replaying the last message

This commit is contained in:
Ruben van de Ven 2019-05-12 12:17:03 +02:00
parent cb81c0616e
commit 81aeb6be27
5 changed files with 46 additions and 16 deletions

View file

@ -710,9 +710,11 @@ class HugveyState(object):
# new story instance on each run
port = self.command.config['web']['port']
resuming = False
if Story.hugveyHasSavedState(self.id):
self.logger.info(f"Recovering from state :-)")
self.story = Story.loadStoryFromState(self)
resuming = True
if self.story.language_code != self.language_code:
self.logger.info("Changing language")
self.configureLanguage(self.story.language_code)
@ -734,7 +736,7 @@ class HugveyState(object):
self.logger.info(f"Starting from {startMsgId}")
self.setLightStatus(False)
await self.story.run(startMsgId)
await self.story.run(startMsgId, resuming)
# self.story = None
def getStreamer(self):

View file

@ -1349,8 +1349,8 @@ class Story(object):
for direction in directions:
for condition in direction.conditions:
if condition.isMet(self):
self.logger.info("Condition is met: {0}, going to {1}".format(
condition.id, direction.msgTo.id))
self.logger.info("Condition is met: {0} ({2}), going to {1}".format(
condition.id, direction.msgTo.id, condition.type))
self.hugvey.eventLogger.info("condition: {0}".format(condition.id))
self.hugvey.eventLogger.info("direction: {0}".format(direction.id))
metCondition = condition
@ -1463,17 +1463,20 @@ class Story(object):
for i in range(len(self.events)):
await self._processPendingEvents()
# Test stability of Central Command with deliberate crash
# if self.timer.getElapsed() > 10:
# raise Exception("Test exception")
directions = self.getCurrentDirections()
await self._processDirections(directions)
# TODO create timer event
# self.commands.append({'msg':'TEST!'})
# Test stability of Central Command with deliberate crash
# if self.timer.getElapsed() > 10:
# raise Exception("Test exception")
if not self.timer.hasMark('state_save') or self.timer.getElapsed('state_save') > 5:
self.storeState()
self.timer.setMark('state_save')
# wait for next iteration to avoid too high CPU
t = time.time()
await asyncio.sleep(max(0, loopDuration - (t - lastTime)))
@ -1582,8 +1585,9 @@ class Story(object):
# none found
return None
async def run(self, customStartMsgId = None):
async def run(self, customStartMsgId = None, resuming = False):
self.logger.info("Starting story")
if not resuming:
self.hugvey.eventLogger.info("story: start")
self.timer.reset()
self.isRunning = True
@ -1592,6 +1596,12 @@ class Story(object):
else:
startMsg = self.startMessage
await self.setCurrentMessage(startMsg)
else:
self.hugvey.eventLogger.info(f"story: resume from {self.currentMessage}")
self.isRunning = True
if not self.lastMsgFinishTime and self.currentMessage:
await self.setCurrentMessage(self.currentMessage)
await self._renderer()
def isFinished(self):

View file

@ -100,6 +100,12 @@ img.icon {
position: absolute;
top: 10px;
right: 5px; }
#status .hugvey .light {
position: absolute;
bottom: 3px;
right: 3px; }
#status .hugvey .light input {
width: 2em; }
#status .hugvey .stats .count {
display: inline-block;
margin-right: 10px; }

View file

@ -64,6 +64,8 @@
<div class='btn' v-if="hv.status == 'running'" @click.stop="finish(hv)">Finish</div> <!-- to available state -->
<div class='btn' v-if="hv.status == 'running'" @click.stop="pause(hv)">Pause</div>
<div class='btn' v-if="hv.status == 'paused'" @click.stop="resume(hv)">Resume</div>
<div class='btn' v-if="(hv.status == 'available' || hv.status == 'blocked') && hv.has_state" @click.stop="resume(hv)">Resume from save</div>
<!-- <div class='light'>
{{ hv.light }}
</div> -->

View file

@ -141,6 +141,16 @@ img.icon{
right: 5px;
}
.light{
position:absolute;
bottom: 3px;
right:3px;
input{
width: 3.2em;
}
}
.stats{
.count{
display: inline-block;