From f77be701a2914cf9bb87044cf26b437713ae6463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 23 Aug 2017 17:03:00 +0200 Subject: [PATCH] Only fire events once Events.STARTUP has been seen One part of fixing #2090 --- src/octoprint/events.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/octoprint/events.py b/src/octoprint/events.py index 7f9b818f..6c64d69e 100644 --- a/src/octoprint/events.py +++ b/src/octoprint/events.py @@ -132,9 +132,11 @@ class EventManager(object): self._registeredListeners = collections.defaultdict(list) self._logger = logging.getLogger(__name__) + self._startup_signaled = False self._shutdown_signaled = False self._queue = queue.Queue() + self._held_back = queue.Queue() self._worker = threading.Thread(target=self._work) self._worker.daemon = True @@ -177,7 +179,30 @@ class EventManager(object): payload being a payload object specific to the event. """ - self._queue.put((event, payload)) + send_held_back = False + if event == Events.STARTUP: + self._logger.info("Processing startup event, this is our first event") + self._startup_signaled = True + send_held_back = True + + self._enqueue(event, payload) + + if send_held_back: + self._logger.info("Adding {} events to queue that " + "were held back before startup event".format(self._held_back.qsize())) + while True: + try: + self._queue.put(self._held_back.get()) + except queue.Empty: + break + + def _enqueue(self, event, payload): + if self._startup_signaled: + q = self._queue + else: + q = self._held_back + + q.put((event, payload)) if event == Events.UPDATED_FILES and "type" in payload and payload["type"] == "printables": # when sending UpdatedFiles with type "printables", also send another event with deprecated type "gcode" @@ -185,7 +210,7 @@ class EventManager(object): import copy legacy_payload = copy.deepcopy(payload) legacy_payload["type"] = "gcode" - self._queue.put((event, legacy_payload)) + q.put((event, legacy_payload)) def subscribe(self, event, callback): """