From b967a50800999fa7535cc744ead4f24da83ca9ec Mon Sep 17 00:00:00 2001 From: paukstelis Date: Thu, 13 Aug 2020 11:38:42 -0400 Subject: [PATCH] Fix lock when print ends while skipping --- octoprint_cancelobject/__init__.py | 22 ++++++++++++------ octoprint_cancelobject/__init__.pyc | Bin 19984 -> 20212 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 15092 bytes setup.py | 2 +- 4 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 octoprint_cancelobject/__pycache__/__init__.cpython-38.pyc diff --git a/octoprint_cancelobject/__init__.py b/octoprint_cancelobject/__init__.py index 01d03c3..b3ff258 100644 --- a/octoprint_cancelobject/__init__.py +++ b/octoprint_cancelobject/__init__.py @@ -45,13 +45,14 @@ def _matchComment(self, line): for pattern in self.patterns: matched = pattern.match(line) if matched: - obj = matched.group(1) - line = "{0} {1}\n".format(self._reptag, obj.encode('ascii','xmlcharrefreplace')) + obj = matched.group(1).encode('ascii','xmlcharrefreplace') + line = "{0} {1}\n".format(self._reptag, obj.decode('utf-8')) #Match SuperSlicer Object information info = self.infomatch.match(line) if info: objinfo = json.loads(info.group(0)[9:]) - line = "{0}info {1} X{2} Y{3}\n".format(self._reptag, objinfo['id'], objinfo['object_center'][0], objinfo['object_center'][1]) + objname = objinfo['id'].encode('ascii','xmlcharrefreplace') + line = "{0}info {1} X{2} Y{3}\n".format(self._reptag, objname.decode('utf-8'), objinfo['object_center'][0], objinfo['object_center'][1]) #Match PrusaSlicer/SuperSlicer stop printing comments stop = self.stopmatch.match(line) @@ -252,10 +253,10 @@ def on_api_command(self, command, data): if command == "resetpos": if not self.objects_known: for obj in self.object_list: - obj["max_x"] = 0; - obj["max_y"] = 0; - obj["min_x"] = 10000; - obj["min_y"] = 10000; + obj["max_x"] = 0 + obj["max_y"] = 0 + obj["min_x"] = 10000 + obj["min_y"] = 10000 def on_api_get(self, request): self._updateobjects() @@ -292,6 +293,10 @@ def on_event(self, event, payload): self._updateobjects() elif event in (Events.PRINT_DONE, Events.PRINT_FAILED, Events.PRINT_CANCELLED, Events.FILE_DESELECTED): + if self.skipping: + self.skipping = False + self._printer.set_temperature('bed', 0) + self._printer.set_temperature('tool0', 0) self.object_list = [] self.objects_known = False self.trackE = False @@ -430,6 +435,9 @@ def check_queue(self, comm_instance, phase, cmd, cmd_type, gcode, tags, *args, * # Need this or @ commands get caught in skipping block #if self._check_object(cmd): # return cmd + if not self._printer.is_printing(): + return cmd + if cmd.startswith("@"): return cmd diff --git a/octoprint_cancelobject/__init__.pyc b/octoprint_cancelobject/__init__.pyc index 3b7c14dee360927f1b5631a768dd14fca566a4d5..93556cebfb064c541c53cda9081fe4c06151f20d 100644 GIT binary patch delta 3206 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 diff --git a/octoprint_cancelobject/__pycache__/__init__.cpython-38.pyc b/octoprint_cancelobject/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5deb6f83fa16be3702d73d230613041031c1223d GIT binary patch literal 15092 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