diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index ac8d7ed5..7bad238e 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -92,6 +92,7 @@ class VirtualPrinter(object): self._supportF = settings().getBoolean(["devel", "virtualPrinter", "supportF"]) self._sendWait = settings().getBoolean(["devel", "virtualPrinter", "sendWait"]) + self._sendBusy = settings().getBoolean(["devel", "virtualPrinter", "sendBusy"]) self._waitInterval = settings().getFloat(["devel", "virtualPrinter", "waitInterval"]) self._echoOnM117 = settings().getBoolean(["devel", "virtualPrinter", "echoOnM117"]) @@ -451,6 +452,24 @@ class VirtualPrinter(object): _gcode_G2 = _gcode_G0 _gcode_G3 = _gcode_G0 + def _gcode_G4(self, data): + matchS = re.search('S([0-9]+)', data) + matchP = re.search('P([0-9]+)', data) + + _timeout = 0 + if matchP: + _timeout = float(matchP.group(1)) / 1000.0 + elif matchS: + _timeout = float(matchS.group(1)) + + if self._sendBusy: + until = time.time() + _timeout + while time.time() < until: + time.sleep(1.0) + self._send("busy:processing") + else: + time.sleep(_timeout) + ##~~ further helpers def _calculate_checksum(self, line): diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 90fc3c6b..0276eb01 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -126,7 +126,8 @@ def getSettings(): "ignoreIdenticalResends": s.getBoolean(["feature", "ignoreIdenticalResends"]), "modelSizeDetection": s.getBoolean(["feature", "modelSizeDetection"]), "firmwareDetection": s.getBoolean(["feature", "firmwareDetection"]), - "printCancelConfirmation": s.getBoolean(["feature", "printCancelConfirmation"]) + "printCancelConfirmation": s.getBoolean(["feature", "printCancelConfirmation"]), + "blockWhileDwelling": s.getBoolean(["feature", "blockWhileDwelling"]) }, "serial": { "port": connectionOptions["portPreference"], @@ -311,6 +312,7 @@ def _saveSettings(data): if "modelSizeDetection" in data["feature"]: s.setBoolean(["feature", "modelSizeDetection"], data["feature"]["modelSizeDetection"]) if "firmwareDetection" in data["feature"]: s.setBoolean(["feature", "firmwareDetection"], data["feature"]["firmwareDetection"]) if "printCancelConfirmation" in data["feature"]: s.setBoolean(["feature", "printCancelConfirmation"], data["feature"]["printCancelConfirmation"]) + if "blockWhileDwelling" in data["feature"]: s.setBoolean(["feature", "blockWhileDwelling"], data["feature"]["blockWhileDwelling"]) if "serial" in data.keys(): if "autoconnect" in data["serial"].keys(): s.setBoolean(["serial", "autoconnect"], data["serial"]["autoconnect"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 7d677ac0..c8d4fd54 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -168,7 +168,6 @@ default_settings = { "options": {}, "postRoll": 0, "fps": 25, - "capturePostRoll": True }, "cleanTmpAfterDays": 7 }, @@ -203,7 +202,8 @@ default_settings = { "supportFAsCommand": False, "modelSizeDetection": True, "firmwareDetection": True, - "printCancelConfirmation": True + "printCancelConfirmation": True, + "blockWhileDwelling": False }, "folder": { "uploads": None, @@ -357,7 +357,8 @@ default_settings = { "brokenM29": True, "supportF": False, "firmwareName": "Virtual Marlin 1.0", - "sharedNozzle": False + "sharedNozzle": False, + "sendBusy": False, } } } diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 7b9394e5..5f1241f4 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -139,6 +139,7 @@ $(function() { self.feature_modelSizeDetection = ko.observable(undefined); self.feature_firmwareDetection = ko.observable(undefined); self.feature_printCancelConfirmation = ko.observable(undefined); + self.feature_blockWhileDwelling = ko.observable(undefined); self.serial_port = ko.observable(); self.serial_baudrate = ko.observable(); diff --git a/src/octoprint/templates/dialogs/settings/features.jinja2 b/src/octoprint/templates/dialogs/settings/features.jinja2 index 1e7c8592..c90bebab 100644 --- a/src/octoprint/templates/dialogs/settings/features.jinja2 +++ b/src/octoprint/templates/dialogs/settings/features.jinja2 @@ -88,6 +88,13 @@ +