Properly initialize timelapse when started during a paused print, better error resilience in event handler

master
Gina Häußge 2013-08-27 22:13:39 +02:00
parent 54679e663e
commit 4ab3e5424e
3 changed files with 15 additions and 1 deletions

View File

@ -46,7 +46,10 @@ class EventManager(object):
eventListeners = self._registeredListeners[event]
for listener in eventListeners:
self._logger.debug("Sending action to %r" % listener)
listener(event, payload)
try:
listener(event, payload)
except:
self._logger.exception("Got an exception while sending event %s (Payload: %r) to %s" % (event, payload, listener))
def subscribe(self, event, callback):

View File

@ -51,6 +51,7 @@ class Timelapse(object):
eventManager().subscribe("PrintStarted", self.onPrintStarted)
eventManager().subscribe("PrintFailed", self.onPrintDone)
eventManager().subscribe("PrintDone", self.onPrintDone)
eventManager().subscribe("PrintResumed", self.onPrintResumed)
for (event, callback) in self.eventSubscriptions():
eventManager().subscribe(event, callback)
@ -62,6 +63,7 @@ class Timelapse(object):
eventManager().unsubscribe("PrintStarted", self.onPrintStarted)
eventManager().unsubscribe("PrintFailed", self.onPrintDone)
eventManager().unsubscribe("PrintDone", self.onPrintDone)
eventManager().unsubscribe("PrintResumed", self.onPrintResumed)
for (event, callback) in self.eventSubscriptions():
eventManager().unsubscribe(event, callback)
@ -77,12 +79,20 @@ class Timelapse(object):
"""
self.stopTimelapse()
def onPrintResumed(self, event, payload):
"""
Override this to perform additional actions upon the pausing of a print job.
"""
if not self._inTimelapse:
self.startTimelapse(payload)
def eventSubscriptions(self):
"""
Override this method to subscribe to additional events by returning an array of (event, callback) tuples.
Events that are already subscribed:
* PrintStarted - self.onPrintStarted
* PrintResumed - self.onPrintResumed
* PrintFailed - self.onPrintDone
* PrintDone - self.onPrintDone
"""

View File

@ -386,6 +386,7 @@ class MachineCom(object):
self.sendCommand("M24")
else:
self._sendNext()
eventManager().fire("PrintResumed", self._currentFile.getFilename())
if pause and self.isPrinting():
self._changeState(self.STATE_PAUSED)
if self.isSdFileSelected():