From 4ab3e5424e47e55f485aa5e4bfb0ff80ae5ea3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 27 Aug 2013 22:13:39 +0200 Subject: [PATCH] Properly initialize timelapse when started during a paused print, better error resilience in event handler --- octoprint/events.py | 5 ++++- octoprint/timelapse.py | 10 ++++++++++ octoprint/util/comm.py | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/octoprint/events.py b/octoprint/events.py index 37db50c1..2a3f3136 100644 --- a/octoprint/events.py +++ b/octoprint/events.py @@ -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): diff --git a/octoprint/timelapse.py b/octoprint/timelapse.py index 8f0af98a..2e42ca1d 100644 --- a/octoprint/timelapse.py +++ b/octoprint/timelapse.py @@ -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 """ diff --git a/octoprint/util/comm.py b/octoprint/util/comm.py index 40c420b7..65d53690 100644 --- a/octoprint/util/comm.py +++ b/octoprint/util/comm.py @@ -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():