diff --git a/octoprint/server.py b/octoprint/server.py index b738bfd..323b1a3 100644 --- a/octoprint/server.py +++ b/octoprint/server.py @@ -614,7 +614,8 @@ def getSettings(): "system": { "actions": s.get(["system", "actions"]), "events": s.get(["system", "events"]) - } + }, + "terminalFilters": s.get(["terminalFilters"]) }) @app.route(BASEURL + "settings", methods=["POST"]) @@ -682,6 +683,9 @@ def setSettings(): if "temperature" in data.keys(): if "profiles" in data["temperature"].keys(): s.set(["temperature", "profiles"], data["temperature"]["profiles"]) + if "terminalFilters" in data.keys(): + s.set(["terminalFilters"], data["terminalFilters"]) + if "system" in data.keys(): if "actions" in data["system"].keys(): s.set(["system", "actions"], data["system"]["actions"]) if "events" in data["system"].keys(): s.set(["system", "events"], data["system"]["events"]) diff --git a/octoprint/settings.py b/octoprint/settings.py index 2d05f9b..f45846b 100644 --- a/octoprint/settings.py +++ b/octoprint/settings.py @@ -104,7 +104,11 @@ default_settings = { "api": { "enabled": False, "key": ''.join('%02X' % ord(z) for z in uuid.uuid4().bytes) - } + }, + "terminalFilters": [ + { "name": "Suppress M105 requests/responses", "regex": "(Send: M105)|(Recv: ok T:)" }, + { "name": "Suppress M27 requests/responses", "regex": "(Send: M27)|(Recv: SD printing byte)" } + ] } valid_boolean_trues = ["true", "yes", "y", "1"] diff --git a/octoprint/static/js/app/main.js b/octoprint/static/js/app/main.js index 0065cb7..7c77148 100644 --- a/octoprint/static/js/app/main.js +++ b/octoprint/static/js/app/main.js @@ -9,7 +9,7 @@ $(function() { var appearanceViewModel = new AppearanceViewModel(settingsViewModel); var temperatureViewModel = new TemperatureViewModel(loginStateViewModel, settingsViewModel); var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel); - var terminalViewModel = new TerminalViewModel(loginStateViewModel); + var terminalViewModel = new TerminalViewModel(loginStateViewModel, settingsViewModel); var gcodeFilesViewModel = new GcodeFilesViewModel(printerStateViewModel, loginStateViewModel); var timelapseViewModel = new TimelapseViewModel(loginStateViewModel); var gcodeViewModel = new GcodeViewModel(loginStateViewModel); diff --git a/octoprint/static/js/app/viewmodels/settings.js b/octoprint/static/js/app/viewmodels/settings.js index 7c01f9d..a8e9d28 100644 --- a/octoprint/static/js/app/viewmodels/settings.js +++ b/octoprint/static/js/app/viewmodels/settings.js @@ -50,6 +50,8 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.system_actions = ko.observableArray([]); + self.terminalFilters = ko.observableArray([]); + self.addTemperatureProfile = function() { self.temperature_profiles.push({name: "New", extruder:0, bed:0}); }; @@ -58,6 +60,14 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.temperature_profiles.remove(profile); }; + self.addTerminalFilter = function() { + self.terminalFilters.push({name: "New", regex: "(Send: M105)|(Recv: ok T:)"}) + }; + + self.removeTerminalFilter = function(filter) { + self.terminalFilters.remove(filter); + }; + self.requestData = function() { $.ajax({ url: AJAX_BASEURL + "settings", @@ -110,6 +120,8 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.temperature_profiles(response.temperature.profiles); self.system_actions(response.system.actions); + + self.terminalFilters(response.terminalFilters); } self.saveData = function() { @@ -163,7 +175,8 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { }, "system": { "actions": self.system_actions() - } + }, + "terminalFilters": self.terminalFilters() } $.ajax({ diff --git a/octoprint/static/js/app/viewmodels/terminal.js b/octoprint/static/js/app/viewmodels/terminal.js index f95da79..01eab23 100644 --- a/octoprint/static/js/app/viewmodels/terminal.js +++ b/octoprint/static/js/app/viewmodels/terminal.js @@ -1,7 +1,8 @@ -function TerminalViewModel(loginStateViewModel) { +function TerminalViewModel(loginStateViewModel, settingsViewModel) { var self = this; self.loginState = loginStateViewModel; + self.settings = settingsViewModel; self.log = []; @@ -16,23 +17,13 @@ function TerminalViewModel(loginStateViewModel) { self.isLoading = ko.observable(undefined); self.autoscrollEnabled = ko.observable(true); - self.filterM105 = ko.observable(false); - self.filterM27 = ko.observable(false); - self.filters = ko.observableArray(); + self.filters = self.settings.terminalFilters; + self.filterRegex = undefined; - self.regexM105 = /(Send: M105)|(Recv: ok T:)/; - self.regexM27 = /(Send: M27)|(Recv: SD printing byte)/; - - self.filterM105.subscribe(function(newValue) { - self.updateOutput(); - }); - - self.filterM27.subscribe(function(newValue) { - self.updateOutput(); - }); - - self.filters.subscribe(function(newValue) { + self.activeFilters = ko.observableArray([]); + self.activeFilters.subscribe(function(e) { + self.updateFilterRegex(); self.updateOutput(); }); @@ -69,26 +60,23 @@ function TerminalViewModel(loginStateViewModel) { self.isLoading(data.flags.loading); } + self.updateFilterRegex = function() { + var filterRegexStr = self.activeFilters().join("|").trim(); + if (filterRegexStr == "") { + self.filterRegex = undefined; + } else { + self.filterRegex = new RegExp(filterRegexStr); + } + console.log("Terminal filter regex: " + filterRegexStr); + } + self.updateOutput = function() { if (!self.log) return; var output = ""; for (var i = 0; i < self.log.length; i++) { - var filters = self.filters(); - var filtered = false; - for (var j = 0; j < filters.length; j++) { - var filter = filters[j]; - if (self.log[i].match(filter.regex)) { - filtered = true; - break; - } - } - if (filtered) continue; - - if (self.filterM105() && self.log[i].match(self.regexM105)) continue; - if (self.filterM27() && self.log[i].match(self.regexM27)) continue; - + if (self.filterRegex !== undefined && self.log[i].match(self.filterRegex)) continue; output += self.log[i] + "\n"; } @@ -127,4 +115,5 @@ function TerminalViewModel(loginStateViewModel) { self.sendCommand(); } } + } diff --git a/octoprint/templates/index.jinja2 b/octoprint/templates/index.jinja2 index fb31c07..f56a614 100644 --- a/octoprint/templates/index.jinja2 +++ b/octoprint/templates/index.jinja2 @@ -511,12 +511,11 @@ - - +
+ +
+
+
+
+

Name

+

RegExp ?

+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+