diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 77604d06..b8283d51 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -35,6 +35,10 @@ def getSettings(): "key": s.get(["api", "key"]) if admin_permission.can() else "n/a", "allowCrossOrigin": s.get(["api", "allowCrossOrigin"]) }, + "appearance": { + "name": s.get(["appearance", "name"]), + "color": s.get(["appearance", "color"]) + }, "printer": { "defaultExtrusionLength": s.getInt(["printerParameters", "defaultExtrusionLength"]) }, @@ -120,6 +124,10 @@ def setSettings(): if "key" in data["api"].keys(): s.set(["api", "key"], data["api"]["key"], True) if "allowCrossOrigin" in data["api"].keys(): s.setBoolean(["api", "allowCrossOrigin"], data["api"]["allowCrossOrigin"]) + if "appearance" in data.keys(): + if "name" in data["appearance"].keys(): s.set(["appearance", "name"], data["appearance"]["name"]) + if "color" in data["appearance"].keys(): s.set(["appearance", "color"], data["appearance"]["color"]) + if "printer" in data.keys(): if "defaultExtrusionLength" in data["printer"]: s.setInt(["printerParameters", "defaultExtrusionLength"], data["printer"]["defaultExtrusionLength"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index b1b5c1e6..f8c82fc8 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -111,6 +111,10 @@ default_settings = { "pauseTriggers": [], "defaultExtrusionLength": 5 }, + "appearance": { + "name": "", + "color": "default" + }, "controls": [], "system": { "actions": [] @@ -292,15 +296,6 @@ class Settings(object): dirty = True - if "appearance" in self._config: - if "name" in self._config["appearance"]: - default_profile["name"] = self._config["appearance"]["name"] - if "color" in self._config["appearance"]: - default_profile["color"] = self._config["appearance"]["color"] - - del self._config["appearance"] - dirty = True - if dirty: if not "printerProfiles" in self._config: self._config["printerProfiles"] = dict() diff --git a/src/octoprint/static/js/app/viewmodels/appearance.js b/src/octoprint/static/js/app/viewmodels/appearance.js index d9ce2841..0bb256fb 100644 --- a/src/octoprint/static/js/app/viewmodels/appearance.js +++ b/src/octoprint/static/js/app/viewmodels/appearance.js @@ -1,33 +1,20 @@ function AppearanceViewModel(settingsViewModel, printerStateViewModel) { var self = this; - self.settings = settingsViewModel; - self.printerState = printerStateViewModel; - - self.connected = ko.observable(false); - - self.printerState.isErrorOrClosed.subscribe(function() { - self.connected(!self.printerState.isErrorOrClosed()); - }); + self.name = settingsViewModel.appearance_name; + self.color = settingsViewModel.appearance_color; self.brand = ko.computed(function() { - if (self.settings.printerProfiles.currentProfileData().name() && self.connected()) - return gettext("OctoPrint") + ": " + self.settings.printerProfiles.currentProfileData().name(); + if (self.name()) + return gettext("OctoPrint") + ": " + self.name(); else return gettext("OctoPrint"); }); self.title = ko.computed(function() { - if (self.settings.printerProfiles.currentProfileData().name() && self.connected()) - return self.settings.printerProfiles.currentProfileData().name() + " [" + gettext("OctoPrint") + "]"; + if (self.name()) + return self.name() + " [" + gettext("OctoPrint") + "]"; else return gettext("OctoPrint"); }); - - self.color = ko.computed(function() { - if (self.settings.printerProfiles.currentProfileData().color() && self.connected()) - return self.settings.printerProfiles.currentProfileData().color(); - else - return "default"; - }); } diff --git a/src/octoprint/static/js/app/viewmodels/connection.js b/src/octoprint/static/js/app/viewmodels/connection.js index bffc9849..504809d6 100644 --- a/src/octoprint/static/js/app/viewmodels/connection.js +++ b/src/octoprint/static/js/app/viewmodels/connection.js @@ -62,6 +62,7 @@ function ConnectionViewModel(loginStateViewModel, settingsViewModel, printerProf var portPreference = response.options.portPreference; var baudratePreference = response.options.baudratePreference; var printerPreference = response.options.printerProfilePreference; + var printerProfiles = response.options.printerProfiles; self.portOptions(ports); self.baudrateOptions(baudrates); diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 07a17241..67bfd645 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -9,6 +9,43 @@ function SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesV self.api_key = ko.observable(undefined); self.api_allowCrossOrigin = ko.observable(undefined); + self.appearance_name = ko.observable(undefined); + self.appearance_color = ko.observable(undefined); + + self.appearance_available_colors = ko.observable([ + {key: "default", name: gettext("default")}, + {key: "red", name: gettext("red")}, + {key: "orange", name: gettext("orange")}, + {key: "yellow", name: gettext("yellow")}, + {key: "green", name: gettext("green")}, + {key: "blue", name: gettext("blue")}, + {key: "violet", name: gettext("violet")}, + {key: "black", name: gettext("black")} + ]); + + self.appearance_colorName = function(color) { + switch (color) { + case "red": + return gettext("red"); + case "orange": + return gettext("orange"); + case "yellow": + return gettext("yellow"); + case "green": + return gettext("green"); + case "blue": + return gettext("blue"); + case "violet": + return gettext("violet"); + case "black": + return gettext("black"); + case "default": + return gettext("default"); + default: + return color; + } + }; + self.printer_defaultExtrusionLength = ko.observable(undefined); self.webcam_streamUrl = ko.observable(undefined); @@ -101,6 +138,9 @@ function SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesV self.api_key(response.api.key); self.api_allowCrossOrigin(response.api.allowCrossOrigin); + self.appearance_name(response.appearance.name); + self.appearance_color(response.appearance.color); + self.printer_defaultExtrusionLength(response.printer.defaultExtrusionLength); self.webcam_streamUrl(response.webcam.streamUrl); @@ -158,6 +198,10 @@ function SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesV "key": self.api_key(), "allowCrossOrigin": self.api_allowCrossOrigin() }, + "appearance" : { + "name": self.appearance_name(), + "color": self.appearance_color() + }, "printer": { "defaultExtrusionLength": self.printer_defaultExtrusionLength() }, diff --git a/src/octoprint/templates/index.jinja2 b/src/octoprint/templates/index.jinja2 index 5840b790..955d4ea6 100644 --- a/src/octoprint/templates/index.jinja2 +++ b/src/octoprint/templates/index.jinja2 @@ -125,7 +125,7 @@
diff --git a/src/octoprint/templates/settings.jinja2 b/src/octoprint/templates/settings.jinja2 index 51f04136..5f587ba6 100644 --- a/src/octoprint/templates/settings.jinja2 +++ b/src/octoprint/templates/settings.jinja2 @@ -18,6 +18,7 @@
  • {{ _('API') }}
  • {{ _('Folders') }}
  • +
  • {{ _('Appearance') }}
  • {{ _('Logs') }}
  • {% if settingsPlugins %} @@ -477,6 +478,23 @@
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +