diff --git a/octoprint/printer.py b/octoprint/printer.py index bf2438b..3fa871d 100644 --- a/octoprint/printer.py +++ b/octoprint/printer.py @@ -24,7 +24,8 @@ def getConnectionOptions(): "ports": comm.serialList(), "baudrates": comm.baudrateList(), "portPreference": settings().get(["serial", "port"]), - "baudratePreference": settings().getInt(["serial", "baudrate"]) + "baudratePreference": settings().getInt(["serial", "baudrate"]), + "autoconnect": settings().getBoolean(["serial", "autoconnect"]) } class Printer(): diff --git a/octoprint/server.py b/octoprint/server.py index 9b75e39..798eb32 100644 --- a/octoprint/server.py +++ b/octoprint/server.py @@ -170,6 +170,9 @@ def connect(): settings().set(["serial", "port"], port) settings().setInt(["serial", "baudrate"], baudrate) settings().save() + if "autoconnect" in request.values.keys(): + settings().setBoolean(["serial", "autoconnect"], True) + settings().save() printer.connect(port=port, baudrate=baudrate) elif "command" in request.values.keys() and request.values["command"] == "disconnect": printer.disconnect() @@ -507,6 +510,9 @@ def getSettings(): "alwaysSendChecksum": s.getBoolean(["feature", "alwaysSendChecksum"]), "sdSupport": s.getBoolean(["feature", "sdSupport"]) }, + "serial": { + "autoconnect": s.getBoolean(["serial", "autoconnect"]) + }, "folder": { "uploads": s.getBaseFolder("uploads"), "timelapse": s.getBaseFolder("timelapse"), @@ -559,6 +565,9 @@ def setSettings(): if "alwaysSendChecksum" in data["feature"].keys(): s.setBoolean(["feature", "alwaysSendChecksum"], data["feature"]["alwaysSendChecksum"]) if "sdSupport" in data["feature"].keys(): s.setBoolean(["feature", "sdSupport"], data["feature"]["sdSupport"]) + if "serial" in data.keys(): + if "autoconnect" in data["serial"].keys(): s.setBoolean(["serial", "autoconnect"], data["serial"]["autoconnect"]) + if "folder" in data.keys(): if "uploads" in data["folder"].keys(): s.setBaseFolder("uploads", data["folder"]["uploads"]) if "timelapse" in data["folder"].keys(): s.setBaseFolder("timelapse", data["folder"]["timelapse"]) diff --git a/octoprint/static/js/ui.js b/octoprint/static/js/ui.js index d753323..dafdf87 100644 --- a/octoprint/static/js/ui.js +++ b/octoprint/static/js/ui.js @@ -89,10 +89,11 @@ function LoginStateViewModel() { } } -function ConnectionViewModel(loginStateViewModel) { +function ConnectionViewModel(loginStateViewModel, settingsViewModel) { var self = this; self.loginState = loginStateViewModel; + self.settings = settingsViewModel; self.portOptions = ko.observableArray(undefined); self.baudrateOptions = ko.observableArray(undefined); @@ -188,6 +189,8 @@ function ConnectionViewModel(loginStateViewModel) { dataType: "json", data: data }) + + self.settings.saveData(); } else { self.requestData(); $.ajax({ @@ -1337,6 +1340,8 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.feature_alwaysSendChecksum = ko.observable(undefined); self.feature_sdSupport = ko.observable(undefined); + self.serial_autoconnect = ko.observable(undefined); + self.folder_uploads = ko.observable(undefined); self.folder_timelapse = ko.observable(undefined); self.folder_timelapseTmp = ko.observable(undefined); @@ -1388,6 +1393,8 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.feature_alwaysSendChecksum(response.feature.alwaysSendChecksum); self.feature_sdSupport(response.feature.sdSupport); + self.serial_autoconnect(response.serial.autoconnect); + self.folder_uploads(response.folder.uploads); self.folder_timelapse(response.folder.timelapse); self.folder_timelapseTmp(response.folder.timelapseTmp); @@ -1429,6 +1436,9 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { "alwaysSendChecksum": self.feature_alwaysSendChecksum(), "sdSupport": self.feature_sdSupport() }, + "serial": { + "autoconnect": self.serial_autoconnect() + }, "folder": { "uploads": self.folder_uploads(), "timelapse": self.folder_timelapse(), @@ -1839,11 +1849,11 @@ function AppearanceViewModel(settingsViewModel) { $(function() { //~~ View models - var loginStateViewModel = new LoginStateViewModel(loginStateViewModel); + var loginStateViewModel = new LoginStateViewModel(); var usersViewModel = new UsersViewModel(loginStateViewModel); - var connectionViewModel = new ConnectionViewModel(loginStateViewModel); - var printerStateViewModel = new PrinterStateViewModel(loginStateViewModel); var settingsViewModel = new SettingsViewModel(loginStateViewModel, usersViewModel); + var connectionViewModel = new ConnectionViewModel(loginStateViewModel, settingsViewModel); + var printerStateViewModel = new PrinterStateViewModel(loginStateViewModel); var appearanceViewModel = new AppearanceViewModel(settingsViewModel); var temperatureViewModel = new TemperatureViewModel(loginStateViewModel, settingsViewModel); var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel); diff --git a/octoprint/templates/index.jinja2 b/octoprint/templates/index.jinja2 index c0ea7be..8113cc7 100644 --- a/octoprint/templates/index.jinja2 +++ b/octoprint/templates/index.jinja2 @@ -97,6 +97,9 @@ + diff --git a/octoprint/templates/settings.jinja2 b/octoprint/templates/settings.jinja2 index 66ec655..06879ff 100644 --- a/octoprint/templates/settings.jinja2 +++ b/octoprint/templates/settings.jinja2 @@ -134,6 +134,13 @@ +
+
+ +
+