diff --git a/CHANGELOG.md b/CHANGELOG.md index f09da2c8..da896aa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -153,7 +153,8 @@ ``python setup.py sdist`` * [#330](https://github.com/foosel/OctoPrint/issues/330) - Ping pong sending to fix potential acknowledgement errors. Also affects [#166](https://github.com/foosel/OctoPrint/issues/166), [#470](https://github.com/foosel/OctoPrint/issues/470) - and [#490](https://github.com/foosel/OctoPrint/issues/490). + and [#490](https://github.com/foosel/OctoPrint/issues/490). A big thank you to all people involved in these tickets + in getting to the ground of this. * [#825](https://github.com/foosel/OctoPrint/issues/825) - Fixed "please visualize" button of large GCODE files * Various fixes of bugs in newly introduced features and improvements: * [#625](https://github.com/foosel/OctoPrint/pull/625) - Newly added GCODE files were not being added to the analysis diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index e5ffe39d..7bba8a02 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -80,7 +80,8 @@ def getSettings(): "timeoutTemperature": s.getFloat(["serial", "timeout", "temperature"]), "timeoutSdStatus": s.getFloat(["serial", "timeout", "sdStatus"]), "log": s.getBoolean(["serial", "log"]), - "additionalPorts": s.get(["serial", "additionalPorts"]) + "additionalPorts": s.get(["serial", "additionalPorts"]), + "longRunningCommands": s.get(["serial", "longRunningCommands"]) }, "folder": { "uploads": s.getBaseFolder("uploads"), @@ -192,6 +193,7 @@ def setSettings(): if "timeoutTemperature" in data["serial"].keys(): s.setFloat(["serial", "timeout", "temperature"], data["serial"]["timeoutTemperature"]) if "timeoutSdStatus" in data["serial"].keys(): s.setFloat(["serial", "timeout", "sdStatus"], data["serial"]["timeoutSdStatus"]) if "additionalPorts" in data["serial"] and isinstance(data["serial"]["additionalPorts"], (list, tuple)): s.set(["serial", "additionalPorts"], data["serial"]["additionalPorts"]) + if "longRunningCommands" in data["serial"] and isinstance(data["serial"]["longRunningCommands"], (list, tuple)): s.set(["serial", "longRunningCommands"], data["serial"]["longRunningCommands"]) oldLog = s.getBoolean(["serial", "log"]) if "log" in data["serial"].keys(): s.setBoolean(["serial", "log"], data["serial"]["log"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 954b01e5..6d977027 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -82,7 +82,8 @@ default_settings = { "temperature": 5, "sdStatus": 1 }, - "additionalPorts": [] + "additionalPorts": [], + "longRunningCommands": ["G4", "G28", "G29", "G30", "G32"] }, "server": { "host": "0.0.0.0", diff --git a/src/octoprint/static/js/app/helpers.js b/src/octoprint/static/js/app/helpers.js index b83f315e..e64ee9a1 100644 --- a/src/octoprint/static/js/app/helpers.js +++ b/src/octoprint/static/js/app/helpers.js @@ -447,3 +447,17 @@ function showConfirmationDialog(message, onacknowledge) { }); confirmationDialog.modal("show"); } + +function commentableLinesToArray(lines) { + return splitTextToArray(lines, "\n", true, function(item) {return !_.startsWith(item, "#")}); +} + +function splitTextToArray(text, sep, stripEmpty, filter) { + return _.filter( + _.map( + text.split(sep), + function(item) { return (item) ? item.trim() : ""; } + ), + function(item) { return (stripEmpty ? item : true) && (filter ? filter(item) : true); } + ); +} diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 53f924a4..257548a3 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -126,6 +126,7 @@ $(function() { self.serial_timeoutSdStatus = ko.observable(undefined); self.serial_log = ko.observable(undefined); self.serial_additionalPorts = ko.observable(undefined); + self.serial_longRunningCommands = ko.observable(undefined); self.folder_uploads = ko.observable(undefined); self.folder_timelapse = ko.observable(undefined); @@ -385,6 +386,7 @@ $(function() { self.serial_timeoutSdStatus(response.serial.timeoutSdStatus); self.serial_log(response.serial.log); self.serial_additionalPorts(response.serial.additionalPorts.join("\n")); + self.serial_longRunningCommands(response.serial.longRunningCommands.join(", ")); self.folder_uploads(response.folder.uploads); self.folder_timelapse(response.folder.timelapse); @@ -462,13 +464,8 @@ $(function() { "timeoutTemperature": self.serial_timeoutTemperature(), "timeoutSdStatus": self.serial_timeoutSdStatus(), "log": self.serial_log(), - "additionalPorts": _.filter( - _.map( - self.serial_additionalPorts().split("\n"), - function(item) { return (item) ? item.trim() : ""; } - ), - function(item) { return item && !_.startsWith(item, "#"); } - ) + "additionalPorts": commentableLinesToArray(self.serial_additionalPorts()), + "longRunningCommands": splitTextToArray(self.serial_longRunningCommands(), ",", true) }, "folder": { "uploads": self.folder_uploads(), diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index aacca84b..11c3b559 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -70,6 +70,13 @@ +