Merge commit '3cab8600c80e666139ff83b9f48ac5d8eba5eed4' into devel

This commit is contained in:
thelastWallE 2021-11-21 02:47:51 +01:00
commit 8c2d8d054e
24 changed files with 1588 additions and 919 deletions

View File

@ -1,12 +0,0 @@
name: FakeAction
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Run a one-line script
run: echo ping

View File

@ -9,10 +9,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Close Stale Issues - name: Close Stale Issues
uses: actions/stale@v3.0.18 uses: actions/stale@v4.0.0
with: with:
# Token for the repository. Can be passed in using `{{ secrets.GITHUB_TOKEN }}`. # Token for the repository. Can be passed in using `{{ secrets.GITHUB_TOKEN }}`.
# repo-token: ${{ github.token }} # repo-token: ${{ github.token }}
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
days-before-stale: 30 days-before-stale: 30
days-before-close: 5 days-before-close: 5
exempt-all-pr-milestones: true
exempt-all-assignees: true

View File

@ -19,7 +19,7 @@ This plugin assists in managing and monitoring the [Klipper](https://github.com/
- PID Tuning Dialog. - PID Tuning Dialog.
- Dialog to set a coordinate offset for future GCODE move commands. - Dialog to set a coordinate offset for future GCODE move commands.
- Message log displaying messages from Klipper prepended with "//" and "!!". - Message log displaying messages from Klipper prepended with "//" and "!!".
- Basic Klipper configuration editor - Klipper configuration editor
- Performance graph displaying key parameters extracted from the Klipper logs. - Performance graph displaying key parameters extracted from the Klipper logs.
## Installation ## Installation

View File

@ -25,7 +25,8 @@ import sys
from octoprint.server import NO_CONTENT from octoprint.server import NO_CONTENT
from octoprint.util import is_hidden_path from octoprint.util import is_hidden_path
from octoprint.util import get_formatted_size from octoprint.util import get_formatted_size
from . import util, cfgUtils, logger from octoprint_klipper import cfgUtils
from octoprint_klipper.util import *
from octoprint.util.comm import parse_firmware_line from octoprint.util.comm import parse_firmware_line
from octoprint.access.permissions import Permissions, ADMIN_GROUP from octoprint.access.permissions import Permissions, ADMIN_GROUP
from .modules import KlipperLogAnalyzer from .modules import KlipperLogAnalyzer
@ -78,7 +79,7 @@ class KlipperPlugin(
self._settings.global_set( self._settings.global_set(
["serial", "additionalPorts"], additional_ports) ["serial", "additionalPorts"], additional_ports)
self._settings.save() self._settings.save()
logger.log_info( log_info(
self, self,
"Added klipper serial port {} to list of additional ports.".format(klipper_port) "Added klipper serial port {} to list of additional ports.".format(klipper_port)
) )
@ -106,10 +107,12 @@ class KlipperPlugin(
] ]
def get_settings_defaults(self): def get_settings_defaults(self):
# TODO #69 put some settings on the localStorage
return dict( return dict(
connection=dict( connection=dict(
port="/tmp/printer", port="/tmp/printer",
replace_connection_panel=True replace_connection_panel=True,
hide_editor_button=False
), ),
macros=[dict( macros=[dict(
name="E-Stop", name="E-Stop",
@ -130,15 +133,17 @@ class KlipperPlugin(
), ),
configuration=dict( configuration=dict(
debug_logging=False, debug_logging=False,
configpath="~/", config_path="~/",
old_config="", baseconfig="printer.cfg",
logpath="/tmp/klippy.log", logpath="/tmp/klippy.log",
reload_command="RESTART", reload_command="RESTART",
restart_onsave=False, restart_onsave=True,
confirm_reload=True,
shortStatus_navbar=True, shortStatus_navbar=True,
shortStatus_sidebar=True, shortStatus_sidebar=True,
parse_check=False, parse_check=False,
fontsize=9 fontsize=12,
hide_error_popups=False
) )
) )
@ -158,7 +163,7 @@ class KlipperPlugin(
return dict( return dict(
admin=[ admin=[
["connection", "port"], ["connection", "port"],
["configuration", "configpath"], ["configuration", "config_path"],
["configuration", "replace_connection_panel"] ["configuration", "replace_connection_panel"]
], ],
user=[ user=[
@ -170,83 +175,56 @@ class KlipperPlugin(
def get_settings_version(self): def get_settings_version(self):
# Settings_Versionhistory: # Settings_Versionhistory:
# 3 = add shortstatus on navbar. migrate the navbar setting for this # 3 = add shortstatus on navbar. migrate the navbar setting for this
# 4 = -change of configpath to only path without filename # 4 = -change of configpath to config_path with only path without filename
# -add setting for restart checkbox on editor save # -parse configpath into config_path and baseconfig
# -switch setting for 'restart on editor save' to true if it was not set to manually
# -remove old_config
# -remove config on root settingsdirectory
return 4 return 4
#migrate Settings #migrate Settings
def on_settings_migrate(self, target, current): def on_settings_migrate(self, target, current):
settings = self._settings settings = self._settings
if current is None: if current is None:
self.migrate_old_settings(settings) migrate_old_settings(settings)
if current is not None and current < 3: if current is not None and current < 3:
self.migrate_settings_configuration( self.migrate_settings_3(settings)
if current is not None and current < 4:
self.migrate_settings_4(settings)
def migrate_settings_3(self, settings):
migrate_settings_configuration(
settings, settings,
"shortStatus_navbar", "shortStatus_navbar",
"navbar", "navbar",
) )
if current is not None and current < 4: def migrate_settings_4(self, settings):
self.migrate_settings_configuration( if settings.has(["configuration", "configpath"]):
settings,
"old_config",
"temp_config",
)
cfg_path = settings.get(["configuration", "configpath"]) cfg_path = settings.get(["configuration", "configpath"])
if cfg_path.find("printer.cfg") != -1: new_cfg_path, baseconfig = os.path.split(cfg_path)
new_cfg_path = cfg_path.replace("printer.cfg","") log_info(self, "migrate setting for 'configuration/config_path': " + cfg_path + " -> " + new_cfg_path)
logger.log_info(self, "migrate setting for 'configuration/configpath': " + cfg_path + " -> " + new_cfg_path) log_info(self, "migrate setting for 'configuration/baseconfig': printer.cfg -> " + baseconfig)
settings.set(["configuration", "configpath"], new_cfg_path) settings.set(["configuration", "config_path"], new_cfg_path)
settings.set(["configuration", "baseconfig"], baseconfig)
settings.remove(["configuration", "configpath"])
if (
settings.has(["configuration", "reload_command"])
and settings.get(["configuration", "reload_command"]) == "manually"
):
log_info(self, "migrate setting for 'configuration/restart_onsave': True -> False")
settings.set(["configuration", "restart_onsave"], False)
settings.remove(["configuration", "reload_command"])
if settings.get(["configuration", "reload_command"]) != "manually" : if settings.has(["config"]):
logger.log_info(self, "migrate setting for 'configuration/restart_onsave': False -> True") log_info(self, "remove old setting for 'config'")
settings.set(["configuration", "restart_onsave"], True) settings.remove(["config"])
if settings.has(["configuration", "old_config"]):
def migrate_old_settings(self, settings): log_info(self, "remove old setting for 'configuration/old_config'")
''' settings.remove(["configuration", "old_config"])
For Old settings
'''
self.migrate_settings(settings, "serialport", "connection", "port")
self.migrate_settings(settings, "replace_connection_panel", "connection", "replace_connection_panel")
self.migrate_settings(settings, "probeHeight", "probe", "height")
self.migrate_settings(settings, "probeLift", "probe", "lift")
self.migrate_settings(settings, "probeSpeedXy", "probe", "speed_xy")
self.migrate_settings(settings, "probeSpeedZ", "probe", "speed_z")
self.migrate_settings(settings, "configPath", "configuration", "configpath")
if settings.has(["probePoints"]):
points = settings.get(["probePoints"])
points_new = [dict(name="", x=int(p["x"]), y=int(p["y"]), z=0) for p in points]
settings.set(["probe", "points"], points_new)
settings.remove(["probePoints"])
def migrate_settings(self, settings, old, new, new2="") -> None:
"""migrate setting to setting with additional group
Args:
settings (any): instance of self._settings
old (str): the old setting to migrate
new (str): group or only new setting if there is no new2
new2 (str, optional): the new setting to migrate to. Defaults to "".
""" ''''''
if settings.has([old]):
if new2 != "":
logger.log_info(self, "migrate setting for '" + old + "' -> '" + new + "/" + new2 + "'")
settings.set([new, new2], settings.get([old]))
else:
logger.log_info(self, "migrate setting for '" + old + "' -> '" + new + "'")
settings.set([new], settings.get([old]))
settings.remove([old])
def migrate_settings_configuration(self, settings, new, old):
if settings.has(["configuration", old]):
logger.log_info(self, "migrate setting for 'configuration/" + old + "' -> 'configuration/" + new + "'")
settings.set(["configuration", new], settings.get(["configuration", old]))
settings.remove(["configuration", old])
# -- Template Plugin # -- Template Plugin
@ -339,43 +317,54 @@ class KlipperPlugin(
def on_event(self, event, payload): def on_event(self, event, payload):
if event == "UserLoggedIn": if event == "UserLoggedIn":
util.update_status(self, "info", "Klipper: Standby") log_info(self, "Klipper: Standby")
if event == "Connecting": if event == "Connecting":
util.update_status(self, "info", "Klipper: Connecting ...") log_info(self, "Klipper: Connecting ...")
elif event == "Connected": elif event == "Connected":
util.update_status(self, "info", "Klipper: Connected to host") log_info(self, "Klipper: Connected to host")
logger.log_info( log_info(
self, self,
"Connected to host via {} @{}bps".format(payload["port"], payload["baudrate"])) "Connected to host via {} @{}bps".format(payload["port"], payload["baudrate"]))
elif event == "Disconnected": elif event == "Disconnected":
util.update_status(self, "info", "Klipper: Disconnected from host") log_info(self, "Klipper: Disconnected from host")
elif event == "Error": elif event == "Error":
util.update_status(self, "error", "Klipper: Error") log_error(self, payload["error"])
logger.log_error(self, payload["error"])
def processAtCommand(self, comm_instance, phase, command, parameters, tags=None, *args, **kwargs):
if command != "SWITCHCONFIG":
return
config = parameters
log_info(self, "SWITCHCONFIG detected config:{}".format(config))
return None
# -- GCODE Hook # -- GCODE Hook
def process_sent_GCODE(self, comm_instance, phase, cmd, cmd_type, gcode, *args, **kwargs):
if cmd == "SAVE_CONFIG":
log_info(self, "SAVE_CONFIG detected")
send_message(self, type = "reload", subtype = "config")
def on_parse_gcode(self, comm, line, *args, **kwargs): def on_parse_gcode(self, comm, line, *args, **kwargs):
if "FIRMWARE_VERSION" in line: if "FIRMWARE_VERSION" in line:
printerInfo = parse_firmware_line(line) printerInfo = parse_firmware_line(line)
if "FIRMWARE_VERSION" in printerInfo: if "FIRMWARE_VERSION" in printerInfo:
logger.log_info(self, "Firmware version: {}".format( log_info(self, "Firmware version: {}".format(
printerInfo["FIRMWARE_VERSION"])) printerInfo["FIRMWARE_VERSION"]))
elif "// probe" in line or "// Failed to verify BLTouch" in line: elif "// probe" in line or "// Failed to verify BLTouch" in line:
msg = line.strip('/') msg = line.strip('/')
logger.log_info(self, msg) log_info(self, msg)
self.write_parsing_response_buffer() self.write_parsing_response_buffer()
elif "//" in line: elif "//" in line:
# add lines with // to a buffer # add lines with // to a buffer
self._message = self._message + line.strip('/') self._message = self._message + line.strip('/')
if not self._parsing_response: if not self._parsing_response:
util.update_status(self, "info", self._message) update_status(self, "info", self._message)
self._parsing_response = True self._parsing_response = True
elif "!!" in line: elif "!!" in line:
msg = line.strip('!') msg = line.strip('!')
util.update_status(self, "error", msg) log_error(self, msg)
logger.log_error(self, msg)
self.write_parsing_response_buffer() self.write_parsing_response_buffer()
else: else:
self.write_parsing_response_buffer() self.write_parsing_response_buffer()
@ -385,7 +374,7 @@ class KlipperPlugin(
# write buffer with // lines after a gcode response without // # write buffer with // lines after a gcode response without //
if self._parsing_response: if self._parsing_response:
self._parsing_response = False self._parsing_response = False
logger.log_info(self, self._message) log_info(self, self._message)
self._message = "" self._message = ""
def get_api_commands(self): def get_api_commands(self):
@ -400,7 +389,7 @@ class KlipperPlugin(
logpath = os.path.expanduser( logpath = os.path.expanduser(
self._settings.get(["configuration", "logpath"]) self._settings.get(["configuration", "logpath"])
) )
if util.file_exist(self, logpath): if file_exist(self, logpath):
for f in glob.glob(self._settings.get(["configuration", "logpath"]) + "*"): for f in glob.glob(self._settings.get(["configuration", "logpath"]) + "*"):
filesize = os.path.getsize(f) filesize = os.path.getsize(f)
filemdate = time.strftime("%d.%m.%Y %H:%M",time.localtime(os.path.getctime(f))) filemdate = time.strftime("%d.%m.%Y %H:%M",time.localtime(os.path.getctime(f)))
@ -423,7 +412,7 @@ class KlipperPlugin(
from octoprint.server.util.tornado import LargeResponseHandler, path_validation_factory from octoprint.server.util.tornado import LargeResponseHandler, path_validation_factory
from octoprint.util import is_hidden_path from octoprint.util import is_hidden_path
configpath = os.path.expanduser( configpath = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "config_path"])
) )
bak_path = os.path.join(self.get_plugin_data_folder(), "configs", "") bak_path = os.path.join(self.get_plugin_data_folder(), "configs", "")
@ -468,7 +457,7 @@ class KlipperPlugin(
raise raise
return NO_CONTENT return NO_CONTENT
# Get a list of all backuped configfiles # Get a list of all backed up configfiles
@octoprint.plugin.BlueprintPlugin.route("/backup/list", methods=["GET"]) @octoprint.plugin.BlueprintPlugin.route("/backup/list", methods=["GET"])
@restricted_access @restricted_access
@Permissions.PLUGIN_KLIPPER_CONFIG.require(403) @Permissions.PLUGIN_KLIPPER_CONFIG.require(403)
@ -476,13 +465,13 @@ class KlipperPlugin(
files = cfgUtils.list_cfg_files(self, "backup") files = cfgUtils.list_cfg_files(self, "backup")
return flask.jsonify(files = files) return flask.jsonify(files = files)
# restore a backuped configfile # restore a backed up configfile
@octoprint.plugin.BlueprintPlugin.route("/backup/restore/<filename>", methods=["GET"]) @octoprint.plugin.BlueprintPlugin.route("/backup/restore/<filename>", methods=["GET"])
@restricted_access @restricted_access
@Permissions.PLUGIN_KLIPPER_CONFIG.require(403) @Permissions.PLUGIN_KLIPPER_CONFIG.require(403)
def restore_backup(self, filename): def restore_backup(self, filename):
configpath = os.path.expanduser( configpath = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "config_path"])
) )
data_folder = self.get_plugin_data_folder() data_folder = self.get_plugin_data_folder()
backupfile = os.path.realpath(os.path.join(data_folder, "configs", filename)) backupfile = os.path.realpath(os.path.join(data_folder, "configs", filename))
@ -495,7 +484,7 @@ class KlipperPlugin(
@Permissions.PLUGIN_KLIPPER_CONFIG.require(403) @Permissions.PLUGIN_KLIPPER_CONFIG.require(403)
def get_config(self, filename): def get_config(self, filename):
cfg_path = os.path.expanduser( cfg_path = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "config_path"])
) )
full_path = os.path.realpath(os.path.join(cfg_path, filename)) full_path = os.path.realpath(os.path.join(cfg_path, filename))
response = cfgUtils.get_cfg(self, full_path) response = cfgUtils.get_cfg(self, full_path)
@ -507,7 +496,7 @@ class KlipperPlugin(
@Permissions.PLUGIN_KLIPPER_CONFIG.require(403) @Permissions.PLUGIN_KLIPPER_CONFIG.require(403)
def delete_config(self, filename): def delete_config(self, filename):
cfg_path = os.path.expanduser( cfg_path = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "config_path"])
) )
full_path = os.path.realpath(os.path.join(cfg_path, filename)) full_path = os.path.realpath(os.path.join(cfg_path, filename))
if ( if (
@ -528,7 +517,10 @@ class KlipperPlugin(
@Permissions.PLUGIN_KLIPPER_CONFIG.require(403) @Permissions.PLUGIN_KLIPPER_CONFIG.require(403)
def list_configs(self): def list_configs(self):
files = cfgUtils.list_cfg_files(self, "") files = cfgUtils.list_cfg_files(self, "")
return flask.jsonify(files = files, max_upload_size = MAX_UPLOAD_SIZE) path = os.path.expanduser(
self._settings.get(["configuration", "config_path"])
)
return flask.jsonify(files = files, path = path, max_upload_size = MAX_UPLOAD_SIZE)
# check syntax of a given data # check syntax of a given data
@octoprint.plugin.BlueprintPlugin.route("/config/check", methods=["POST"]) @octoprint.plugin.BlueprintPlugin.route("/config/check", methods=["POST"])
@ -537,7 +529,7 @@ class KlipperPlugin(
def check_config(self): def check_config(self):
data = flask.request.json data = flask.request.json
data_to_check = data.get("DataToCheck", []) data_to_check = data.get("DataToCheck", [])
response = cfgUtils.check_cfg(self, data_to_check) response = cfgUtils.check_cfg_ok(self, data_to_check)
return flask.jsonify(is_syntax_ok = response) return flask.jsonify(is_syntax_ok = response)
# save a configfile # save a configfile
@ -555,7 +547,7 @@ class KlipperPlugin(
Filecontent = data.get("DataToSave", []) Filecontent = data.get("DataToSave", [])
saved = cfgUtils.save_cfg(self, Filecontent, filename) saved = cfgUtils.save_cfg(self, Filecontent, filename)
if saved == True: if saved == True:
util.send_message(self, "reload", "configlist", "", "") send_message(self, type = "reload", subtype = "configlist")
return flask.jsonify(saved = saved) return flask.jsonify(saved = saved)
# restart klipper # restart klipper
@ -569,8 +561,8 @@ class KlipperPlugin(
# Restart klippy to reload config # Restart klippy to reload config
self._printer.commands(reload_command) self._printer.commands(reload_command)
logger.log_info(self, "Restarting Klipper.") log_info(self, "Restarting Klipper.")
return NO_CONTENT return flask.jsonify(command = reload_command)
# APIs end # APIs end
@ -618,6 +610,8 @@ def __plugin_load__():
__plugin_hooks__ = { __plugin_hooks__ = {
"octoprint.server.http.routes": __plugin_implementation__.route_hook, "octoprint.server.http.routes": __plugin_implementation__.route_hook,
"octoprint.access.permissions": __plugin_implementation__.get_additional_permissions, "octoprint.access.permissions": __plugin_implementation__.get_additional_permissions,
"octoprint.comm.protocol.atcommand.sending": __plugin_implementation__.processAtCommand,
"octoprint.comm.protocol.gcode.sent": __plugin_implementation__.process_sent_GCODE,
"octoprint.comm.protocol.gcode.received": __plugin_implementation__.on_parse_gcode, "octoprint.comm.protocol.gcode.received": __plugin_implementation__.on_parse_gcode,
"octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information
} }

View File

@ -1,9 +1,10 @@
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import glob import glob
import os, time, sys import os, time, sys
import io
import flask import flask
from . import util, logger from octoprint_klipper.util import *
from flask_babel import gettext from flask_babel import gettext
from shutil import copy, copyfile from shutil import copy, copyfile
@ -15,7 +16,8 @@ except ImportError:
if sys.version_info[0] < 3: if sys.version_info[0] < 3:
import StringIO import StringIO
def list_cfg_files(self, path: str) -> list:
def list_cfg_files(self, path):
"""Generate list of config files. """Generate list of config files.
Args: Args:
@ -30,11 +32,11 @@ def list_cfg_files(self, path: str) -> list:
cfg_path = os.path.join(self.get_plugin_data_folder(), "configs", "*") cfg_path = os.path.join(self.get_plugin_data_folder(), "configs", "*")
else: else:
cfg_path = os.path.expanduser( cfg_path = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "config_path"])
) )
cfg_path = os.path.join(cfg_path, "*.cfg") cfg_path = os.path.join(cfg_path, "*.cfg")
cfg_files = glob.glob(cfg_path) cfg_files = glob.glob(cfg_path)
logger.log_debug(self, "list_cfg_files Path: " + cfg_path) log_debug(self, "list_cfg_files Path: " + cfg_path)
for f in cfg_files: for f in cfg_files:
filesize = os.path.getsize(f) filesize = os.path.getsize(f)
@ -50,9 +52,10 @@ def list_cfg_files(self, path: str) -> list:
mdate= time.strftime("%d.%m.%Y %H:%M", filemdate), mdate= time.strftime("%d.%m.%Y %H:%M", filemdate),
url= url, url= url,
)) ))
logger.log_debug(self, "list_cfg_files " + str(len(files)) + ": " + f) log_debug(self, "list_cfg_files " + str(len(files)) + ": " + f)
return files return files
def get_cfg(self, file): def get_cfg(self, file):
"""Get the content of a configuration file. """Get the content of a configuration file.
@ -71,31 +74,43 @@ def get_cfg(self, file):
cfg_path = os.path.expanduser( cfg_path = os.path.expanduser(
self._settings.get(["configuration", "configpath"]) self._settings.get(["configuration", "configpath"])
) )
file = os.path.join(cfg_path, "printer.cfg") file = os.path.join(cfg_path, self._settings.get(["configuration", "baseconfig"]))
if util.file_exist(self, file): if file_exist(self, file):
logger.log_debug(self, "get_cfg_files Path: " + file) log_debug(self, "get_cfg_files Path: " + file)
try: try:
with open(file, "r") as f: with io.open(file, "r", encoding='utf-8') as f:
response['config'] = f.read() response['config'] = f.read()
except IOError as Err: except IOError as Err:
logger.log_error( log_error(
self, self,
"Error: Klipper config file not found at: {}".format(file) gettext("Error: Klipper config file not found at:")
+ "\n IOError: {}".format(Err) + " {}".format(file)
+ "\n"
+ gettext("IOError:") + " {}".format(Err)
)
response['text'] = Err
return response
except UnicodeDecodeError as Err:
log_error(
self,
gettext("Decode Error:")
+"\n"
+ "{}".format(Err)
+ "\n\n"
+ gettext("Please convert your config files to utf-8!")
+ "\n"
+ gettext("Or you can also paste your config \ninto the Editor and save it.")
) )
response['text'] = Err response['text'] = Err
return response return response
else: else:
if sys.version_info[0] < 3:
response['config'] = response.config.decode('utf-8')
return response return response
finally:
f.close()
else: else:
response['text'] = gettext("File not found!") response['text'] = gettext("File not found!")
return response return response
def save_cfg(self, content, filename="printer.cfg"):
def save_cfg(self, content, filename):
"""Save the configuration file to given file. """Save the configuration file to given file.
Args: Args:
@ -106,43 +121,35 @@ def save_cfg(self, content, filename="printer.cfg"):
bool: True if the configuration file was saved successfully. Otherwise False bool: True if the configuration file was saved successfully. Otherwise False
""" """
logger.log_debug( log_debug(
self, self,
"Save klipper config" "Save klipper config"
) )
if sys.version_info[0] < 3:
content = content.encode('utf-8')
configpath = os.path.expanduser(self._settings.get(["configuration", "configpath"])) configpath = os.path.expanduser(self._settings.get(["configuration", "config_path"]))
if filename == "":
filename = self._settings.get(["configuration", "baseconfig"])
if filename[-4:] != ".cfg": if filename[-4:] != ".cfg":
filename += ".cfg" filename += ".cfg"
filepath = os.path.join(configpath, filename) filepath = os.path.join(configpath, filename)
logger.log_debug(self, "save filepath: {}".format(filepath)) log_debug(self, "Writing Klipper config to {}".format(filepath))
self._settings.set(["configuration", "temp_config"], content)
check_parse = self._settings.get(["configuration", "parse_check"])
logger.log_debug(self, "check_parse on filesave: {}".format(check_parse))
if check_parse and not check_cfg(self, content):
return False
try: try:
logger.log_debug(self, "Writing Klipper config to {}".format(filepath)) with io.open(filepath, "w", encoding='utf-8') as f:
with open(filepath, "w") as f:
f.write(content) f.write(content)
except IOError: except IOError:
logger.log_error(self, "Error: Couldn't open Klipper config file: {}".format(filepath)) log_error(self, "Error: Couldn't open Klipper config file: {}".format(filepath))
return False return False
else: else:
logger.log_debug(self, "Writen Klipper config to {}".format(filepath)) log_debug(self, "Written Klipper config to {}".format(filepath))
return True return True
finally: finally:
f.close()
copy_cfg_to_backup(self, filepath) copy_cfg_to_backup(self, filepath)
def check_cfg(self, data):
def check_cfg_ok(self, data):
"""Checks the given data on parsing errors. """Checks the given data on parsing errors.
Args: Args:
@ -161,15 +168,16 @@ def check_cfg(self, data):
dataToValidated.read_string(data) dataToValidated.read_string(data)
except configparser.Error as error: except configparser.Error as error:
show_error_message(self, error) show_error_message(self, error)
logger.log_debug(self, 'check_cfg: NOK!') log_debug(self, 'check_cfg: NOK!')
return False return False
else: else:
if not is_float_ok(self, dataToValidated): if not is_float_ok(self, dataToValidated):
logger.log_debug(self, "check_cfg: NOK!") log_debug(self, "check_cfg: NOK!")
return False return False
logger.log_debug(self, "check_cfg: OK") log_debug(self, "check_cfg: OK")
return True return True
def show_error_message(self, error): def show_error_message(self, error):
error.message = error.message.replace('\\n', '') error.message = error.message.replace('\\n', '')
if sys.version_info[0] < 3: if sys.version_info[0] < 3:
@ -179,14 +187,11 @@ def show_error_message(self, error):
else: else:
error.message = error.message.replace('file:', 'Klipper Configuration', 1) error.message = error.message.replace('file:', 'Klipper Configuration', 1)
error.message = error.message.replace("'", '', 2) error.message = error.message.replace("'", '', 2)
logger.log_error( log_error(
self, self,
('Error: Invalid Klipper config file:\n' + '{}'.format(str(error))), ('Error: Invalid Klipper config file:\n' + '{}'.format(str(error))),
) )
util.send_message(
self, 'PopUp', 'warning', 'Invalid Config data\n', ('\n' + str(error))
)
def is_float_ok(self, dataToValidated): def is_float_ok(self, dataToValidated):
@ -206,17 +211,17 @@ def is_float_ok(self, dataToValidated):
if dataToValidated.has_option(y, x): if dataToValidated.has_option(y, x):
a_float = dataToValidated.getfloat(y, x) a_float = dataToValidated.getfloat(y, x)
except ValueError as error: except ValueError as error:
logger.log_error( log_error(
self, self,
"Error: Invalid Value for <b>" + x + "</b> in Section: <b>" + y + "</b>\n" "Error: Invalid Value for <b>" + x + "</b> in Section: <b>" + y + "</b>\n"
+ "{}".format(str(error)) + "{}".format(str(error))
) )
util.send_message( send_message(
self, self,
"PopUp", type = "PopUp",
"warning", subtype = "warning",
"Invalid Config data\n", title = "Invalid Config data\n",
"\n" payload = "\n"
+ "Invalid Value for <b>" + x + "</b> in Section: <b>" + y + "</b>\n" + "Invalid Value for <b>" + x + "</b> in Section: <b>" + y + "</b>\n"
+ "{}".format(str(error)) + "{}".format(str(error))
) )
@ -224,6 +229,7 @@ def is_float_ok(self, dataToValidated):
else: else:
return True return True
def copy_cfg(self, file, dst): def copy_cfg(self, file, dst):
"""Copy the config file to the destination. """Copy the config file to the destination.
@ -239,13 +245,13 @@ def copy_cfg(self, file, dst):
try: try:
copy(file, dst) copy(file, dst)
except IOError: except IOError:
logger.log_error( log_error(
self, self,
"Error: Klipper config file not found at: {}".format(file) "Error: Klipper config file not found at: {}".format(file)
) )
return False return False
else: else:
logger.log_debug( log_debug(
self, self,
"File copied: " "File copied: "
+ file + file
@ -253,6 +259,7 @@ def copy_cfg(self, file, dst):
return True return True
return False return False
def copy_cfg_to_backup(self, src): def copy_cfg_to_backup(self, src):
"""Copy the config file to backup directory of OctoKlipper. """Copy the config file to backup directory of OctoKlipper.
@ -272,26 +279,23 @@ def copy_cfg_to_backup(self, src):
try: try:
os.mkdir(cfg_path) os.mkdir(cfg_path)
except OSError: except OSError:
logger.log_error(self, "Error: Creation of the backup directory {} failed".format(cfg_path)) log_error(self, "Error: Creation of the backup directory {} failed".format(cfg_path))
return False return False
else: else:
logger.log_debug(self, "Directory {} created".format(cfg_path)) log_debug(self, "Directory {} created".format(cfg_path))
dst = os.path.join(cfg_path, filename) dst = os.path.join(cfg_path, filename)
logger.log_debug(self, "copy_cfg_to_backup:" + src + " to " + dst) log_debug(self, "copy_cfg_to_backup:" + src + " to " + dst)
if src == dst: if src == dst:
return False return False
try: try:
copyfile(src, dst) copyfile(src, dst)
except IOError: except IOError:
logger.log_error( log_error(
self, self,
"Error: Couldn't copy Klipper config file to {}".format(dst) "Error: Couldn't copy Klipper config file to {}".format(dst)
) )
return False return False
else: else:
logger.log_debug(self, "CfgBackup " + dst + " writen") log_debug(self, "CfgBackup " + dst + " written")
return True return True

View File

@ -1,17 +0,0 @@
from . import util
def log_info(self, message):
self._octoklipper_logger.info(message)
util.send_message(self, "log", "info", message, message)
def log_debug(self, message):
self._octoklipper_logger.debug(message)
self._logger.info(message)
# sends a message to frontend(in klipper.js -> self.onDataUpdaterPluginMessage) and write it to the console.
# _mtype, subtype=debug/info, title of message, message)
util.send_message(self, "console", "debug", message, message)
def log_error(self, error):
self._octoklipper_logger.error(error)
self._logger.error(error)
util.send_message(self, "log", "error", error, error)

View File

@ -15,7 +15,7 @@
import flask import flask
import optparse, datetime import optparse, datetime
from .. import logger from octoprint_klipper.util import log_error
class KlipperLogAnalyzer(): class KlipperLogAnalyzer():
MAXBANDWIDTH=25000. MAXBANDWIDTH=25000.
@ -82,7 +82,7 @@ class KlipperLogAnalyzer():
out.append(keyparts) out.append(keyparts)
f.close() f.close()
except IOError: except IOError:
logger.log_error(self, "Couldn't open log file: {}".format(logname)) log_error(self, "Couldn't open log file: {}".format(logname))
print("Couldn't open log file") print("Couldn't open log file")
return out return out

View File

@ -1,11 +1,13 @@
.plugin-klipper-sidebar { .plugin-klipper-sidebar {
padding: 1px; padding: 1px;
height: auto; height: auto;
max-height: 100px;
border: 1px solid #aaa; border: 1px solid #aaa;
width: 98%; width: 98%;
text-align: center; text-align: center;
word-break: break-all; word-break: break-word;
margin: auto; margin: auto;
overflow: auto;
} }
li#navbar_plugin_klipper { li#navbar_plugin_klipper {
@ -97,6 +99,7 @@ ul#klipper-settings {
#tab_plugin_klipper_main #left-side { #tab_plugin_klipper_main #left-side {
flex: 3 1; flex: 3 1;
padding-right: 10px; padding-right: 10px;
padding-top: 5px;
} }
#tab_plugin_klipper_main .span8 label { #tab_plugin_klipper_main .span8 label {
@ -196,7 +199,7 @@ div#settings_plugin_klipper form {
} }
div#settings_plugin_klipper div.tab-content { div#settings_plugin_klipper div.tab-content {
height: calc(100% - 58px); height: calc(100% - 76px);
overflow: auto; overflow: auto;
} }
@ -315,8 +318,7 @@ div#settings_plugin_klipper.tab-pane.active form.form-horizontal div.tab-content
vertical-align: -0.2em; vertical-align: -0.2em;
} }
div#settings_plugin_klipper.tab-pane.active form.form-horizontal div.tab-content div.tab-pane.active label.inline, .klipper-inline {
div#klipper_editor .inline {
display: inline; display: inline;
} }
@ -339,10 +341,6 @@ div#settings_plugin_klipper div#macros label.control-label {
padding-top: 2px; padding-top: 2px;
} }
#klipper_graph_dialog {
width: 90%;
}
#klipper_graph_dialog .full-sized-box { #klipper_graph_dialog .full-sized-box {
width: 100%; width: 100%;
margin: 0 auto; margin: 0 auto;

View File

@ -33,22 +33,58 @@ $(function () {
self.access = parameters[5]; self.access = parameters[5];
self.shortStatus_navbar = ko.observable(); self.shortStatus_navbar = ko.observable();
self.shortStatus_navbar_hover = ko.observable();
self.shortStatus_sidebar = ko.observable(); self.shortStatus_sidebar = ko.observable();
self.logMessages = ko.observableArray(); self.logMessages = ko.observableArray();
self.popup = undefined;
self._showPopup = function (options) {
self._closePopup();
self.popup = new PNotify(options);
};
self._updatePopup = function (options) {
if (self.popup === undefined) {
self._showPopup(options);
} else {
self.popup.update(options);
}
};
self._closePopup = function () {
if (self.popup !== undefined) {
self.popup.remove();
}
};
self.showPopUp = function (popupType, popupTitle, message) { self.showPopUp = function (popupType, popupTitle, message) {
var title = "OctoKlipper: <br />" + popupTitle + "<br />"; var title = "OctoKlipper: <br />" + popupTitle + "<br />";
var hide = false; var options = undefined;
if (popupType == "success") { var errorOpts = {};
hide = true
} options = {
new PNotify({
title: title, title: title,
text: message, text: message,
type: popupType, type: popupType,
hide: hide, hide: true,
icon: true icon: true
}); };
if (popupType == "error") {
errorOpts = {
mouse_reset: true,
delay: 5000,
animation: "none"
};
FullOptions = Object.assign(options, errorOpts);
self._showPopup(FullOptions);
} else {
if (options !== undefined) {
new PNotify(options);
}
}
}; };
self.showEditorDialog = function () { self.showEditorDialog = function () {
@ -92,6 +128,7 @@ $(function () {
var dialog = $("#klipper_graph_dialog"); var dialog = $("#klipper_graph_dialog");
dialog.modal({ dialog.modal({
show: "true", show: "true",
width: "90%",
minHeight: "500px", minHeight: "500px",
maxHeight: "600px", maxHeight: "600px",
}); });
@ -142,40 +179,57 @@ $(function () {
}; };
self.onDataUpdaterPluginMessage = function (plugin, data) { self.onDataUpdaterPluginMessage = function (plugin, data) {
if (plugin == "klipper") { if (plugin == "klipper") {
switch (data.type) { switch (data.type) {
case "PopUp": case "PopUp":
self.showPopUp(data.subtype, data.title, data.payload); self.showPopUp(data.subtype, data.title, data.payload);
break; break;
case "start":
break;
case "reload": case "reload":
break; break;
case "console": case "console":
self.consoleMessage(data.subtype, data.payload); self.consoleMessage(data.subtype, data.payload);
break; break;
case "status": case "status":
if (data.payload.length > 36) { self.shortStatus(data.payload, data.subtype);
var shortText = data.payload.substring(0, 31) + " [..]";
self.shortStatus_navbar(shortText);
} else {
self.shortStatus_navbar(data.payload);
}
self.shortStatus_sidebar(data.payload);
break; break;
default: default:
self.logMessage(data.time, data.subtype, data.payload); self.logMessage(data.time, data.subtype, data.payload);
self.shortStatus(data.payload, data.subtype)
self.consoleMessage(data.subtype, data.payload); self.consoleMessage(data.subtype, data.payload);
} }
} }
}; };
self.shortStatus = function(msg, type) {
var baseText = gettext("Go to OctoKlipper Tab");
if (msg.length > 36) {
var shortText = msg.substring(0, 31) + " [..]";
self.shortStatus_navbar(shortText);
self.shortStatus_navbar_hover(msg);
} else {
self.shortStatus_navbar(msg);
self.shortStatus_navbar_hover(baseText);
}
message = msg.replace(/\n/gi, "<br />");
self.shortStatus_sidebar(message);
};
self.logMessage = function (timestamp, type = "info", message) { self.logMessage = function (timestamp, type = "info", message) {
if (!timestamp) { if (!timestamp) {
var today = new Date(); var today = new Date();
var timestamp = var timestamp =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
} }
if (type == "error" && self.settings.settings.plugins.klipper.configuration.hide_error_popups() !== true) {
self.showPopUp(type, "Error:", message);
}
self.logMessages.push({ self.logMessages.push({
time: timestamp, time: timestamp,
type: type, type: type,
@ -232,23 +286,67 @@ $(function () {
} }
}; };
self.saveOption = function(dir, option, value) {
if (! (_.includes(["fontsize", "confirm_reload", "parse_check"], option)) ) {
return;
}
if (option && dir) {
let data = {
plugins: {
klipper:{
[dir]: {
[option]: value
}
}
}
};
OctoPrint.settings
.save(data);
} else if (option) {
let data = {
plugins: {
klipper:{
[option]: value
}
}
};
OctoPrint.settings
.save(data);
}
}
self.requestRestart = function () { self.requestRestart = function () {
if (!self.loginState.hasPermission(self.access.permissions.PLUGIN_KLIPPER_CONFIG)) return; if (!self.loginState.hasPermission(self.access.permissions.PLUGIN_KLIPPER_CONFIG)) return;
var request = function () { var request = function (index) {
OctoPrint.plugins.klipper.restartKlipper().done(function () { OctoPrint.plugins.klipper.restartKlipper().done(function (response) {
self.consoleMessage("debug", "requestRestart"); self.consoleMessage("debug", "restartingKlipper");
self.showPopUp("success", gettext("Restarted Klipper"), "command: " + response.command);
}); });
if (index == 1) {
self.saveOption("configuration", "confirm_reload", false);
}
}; };
var html = "<h4>" + gettext("All ongoing Prints will be stopped!") + "</h4>"; var html = "<h4>" +
gettext("All ongoing Prints will be stopped!") +
"</h4>";
if (self.settings.settings.plugins.klipper.configuration.confirm_reload() == true) {
showConfirmationDialog({ showConfirmationDialog({
title: gettext("Klipper restart?"), title: gettext("Restart Klipper?"),
html: html, html: html,
proceed: gettext("Proceed"), proceed: [gettext("Restart"), gettext("Restart and don't ask this again.")],
onproceed: request, onproceed: function (idx) {
if (idx > -1) {
request(idx);
}
},
}); });
} else {
request(0);
}
}; };
// OctoKlipper settings link // OctoKlipper settings link

View File

@ -119,7 +119,7 @@ $(function () {
}; };
showConfirmationDialog( showConfirmationDialog(
_.sprintf(gettext('You are about to delete backuped config file "%(name)s".'), { _.sprintf(gettext('You are about to delete backed config file "%(name)s".'), {
name: _.escape(backup), name: _.escape(backup),
}), }),
perform perform
@ -165,7 +165,7 @@ $(function () {
}; };
showConfirmationDialog( showConfirmationDialog(
_.sprintf(gettext("You are about to restore %(count)d backuped config files."), { _.sprintf(gettext("You are about to restore %(count)d backed config files."), {
count: self.markedForFileRestore().length, count: self.markedForFileRestore().length,
}), }),
perform perform
@ -180,7 +180,7 @@ $(function () {
}; };
showConfirmationDialog( showConfirmationDialog(
_.sprintf(gettext("You are about to delete %(count)d backuped config files."), { _.sprintf(gettext("You are about to delete %(count)d backed config files."), {
count: self.markedForFileRestore().length, count: self.markedForFileRestore().length,
}), }),
perform perform
@ -192,7 +192,7 @@ $(function () {
title = gettext("Restoring klipper config files"); title = gettext("Restoring klipper config files");
self.klipperViewModel.consoleMessage("debug", title); self.klipperViewModel.consoleMessage("debug", title);
message = _.sprintf(gettext("Restoring %(count)d backuped config files..."), { message = _.sprintf(gettext("Restoring %(count)d backed config files..."), {
count: files.length, count: files.length,
}); });
@ -246,7 +246,7 @@ $(function () {
var title, message, handler; var title, message, handler;
title = gettext("Deleting backup files"); title = gettext("Deleting backup files");
message = _.sprintf(gettext("Deleting %(count)d backup files..."), { message = _.sprintf(gettext("Deleting %(count)d backed files..."), {
count: files.length, count: files.length,
}); });

View File

@ -16,58 +16,77 @@
$(function () { $(function () {
function KlipperEditorViewModel(parameters) { function KlipperEditorViewModel(parameters) {
var self = this; var self = this;
var obKlipperConfig = null;
var editor = null; var editor = null;
var editor_dirty = false; var editordialog = $("#klipper_editor");
self.settings = parameters[0]; self.settings = parameters[0];
self.klipperViewModel = parameters[1]; self.klipperViewModel = parameters[1];
self.CfgFilename = ko.observable(""); self.CfgFilename = ko.observable("");
self.CfgContent = ko.observable(""); self.CfgContent = ko.observable("");
self.config = [] self.loadedConfig = "";
self.CfgChangedExtern = false;
self.header = OctoPrint.getRequestHeaders({ self.header = OctoPrint.getRequestHeaders({
"content-type": "application/json", "content-type": "application/json",
"cache-control": "no-cache", "cache-control": "no-cache",
}); });
$('#klipper_editor').on('shown.bs.modal', function () {
editor.focus();
self.setEditorDivSize();
$(window).on('resize', function() { $(window).on('resize', function() {
self.klipperViewModel.sleep(500).then( self.klipperViewModel.sleep(200).then(
function () { function () {
self.setEditorDivSize(); self.setEditorDivSize();
} }
); );
}); });
});
self.onShown = function () {
self.checkExternChange();
editor.focus();
self.setEditorDivSize();
};
self.close_selection = function (index) {
switch (index) {
case 0:
editordialog.modal('hide');
break;
case 1:
self.editorFocusDelay(1000);
break;
case 2:
self.saveCfg({closing: true});
break;
}
};
self.closeEditor = function () { self.closeEditor = function () {
if (editor_dirty===true) { self.CfgContent(editor.getValue());
showConfirmationDialog({ if (self.loadedConfig != self.CfgContent()) {
message: gettext(
"Your file seems to have changed." var opts = {
), title: gettext("Closing without saving"),
question: gettext("Do you really want to close it?"), message: gettext("Your file seems to have changed.")
cancel: gettext("No"), + "<br />"
proceed: gettext("Yes"), + gettext("Do you really want to close it?"),
onproceed: function () { selections: [gettext("Close"), gettext("Do not close"), gettext("Save & Close")],
var dialog = $("#klipper_editor"); maycancel: false,
dialog.modal('hide'); onselect: function (index) {
if (index > -1) {
self.close_selection(index);
}
}, },
nofade: true };
});
showSelectionDialog(opts);
} else { } else {
var dialog = $("#klipper_editor"); editordialog.modal('hide');
dialog.modal('hide');
}
} }
};
self.addStyleAttribute = function ($element, styleAttribute) { self.addStyleAttribute = function ($element, styleAttribute) {
$element.attr('style', $element.attr('style') + '; ' + styleAttribute); $element.attr('style', styleAttribute);
} };
self.setEditorDivSize = function () { self.setEditorDivSize = function () {
var klipper_modal_body= $('#klipper_editor .modal-body'); var klipper_modal_body= $('#klipper_editor .modal-body');
@ -75,24 +94,23 @@ $(function () {
var height = $(window).height() - $('#klipper_editor .modal-header').outerHeight() - $('#klipper_editor .modal-footer').outerHeight() - 118; var height = $(window).height() - $('#klipper_editor .modal-header').outerHeight() - $('#klipper_editor .modal-footer').outerHeight() - 118;
self.addStyleAttribute(klipper_modal_body, 'height: ' + height + 'px !important;'); self.addStyleAttribute(klipper_modal_body, 'height: ' + height + 'px !important;');
//self.addStyleAttribute(klipper_config, 'height: ' + height + 'px !important;');
klipper_config.css('height', height); klipper_config.css('height', height);
if (editor) { if (editor) {
editor.resize(); editor.resize();
} }
}; };
//initialize the modal window and return done when finished
self.process = function (config) { self.process = function (config) {
return new Promise(function (resolve) { return new Promise(function (resolve) {
self.config = config; self.loadedConfig = config.content;
self.CfgFilename(config.file); self.CfgFilename(config.file);
self.CfgContent(config.content); self.CfgContent(config.content);
if (editor) { if (editor) {
editor.session.setValue(self.CfgContent()); editor.session.setValue(self.CfgContent());
editor_dirty=false; self.CfgChangedExtern = false;
editor.setFontSize(self.settings.settings.plugins.klipper.configuration.fontsize()); editor.setFontSize(self.settings.settings.plugins.klipper.configuration.fontsize());
self.settings.settings.plugins.klipper.configuration.old_config(config.content);
editor.clearSelection(); editor.clearSelection();
self.klipperViewModel.sleep(500).then( self.klipperViewModel.sleep(500).then(
function() { function() {
@ -102,56 +120,141 @@ $(function () {
); );
} }
}); });
};
self.onDataUpdaterPluginMessage = function (plugin, data) {
//receive from backend after a SAVE_CONFIG
if (plugin == "klipper" && data.type == "reload" && data.subtype == "config") {
self.klipperViewModel.consoleMessage("debug", "onDataUpdaterPluginMessage klipper reload baseconfig");
self.ConfigChangedAfterSave_Config();
}
};
//set externally changed config flag if the current file is the base config
self.ConfigChangedAfterSave_Config = function () {
if (!self.klipperViewModel.hasRight("CONFIG")) return;
if (self.CfgFilename() == self.settings.settings.plugins.klipper.configuration.baseconfig()) {
self.CfgChangedExtern = true;
self.checkExternChange();
}
};
//check if the config was externally changed and ask for a reload
self.checkExternChange = function() {
var baseconfig = self.settings.settings.plugins.klipper.configuration.baseconfig();
if (self.CfgChangedExtern && self.CfgFilename() == baseconfig) {
if (editordialog.is(":visible")) {
var perform = function () {
self.reloadFromFile();
} }
var html = "<p>" + gettext("Reload Configfile after SAVE_CONFIG?") + "</p>";
showConfirmationDialog({
title: gettext("Externally changed config") + " " + baseconfig,
html: html,
proceed: gettext("Proceed"),
onproceed: perform,
});
}
}
};
self.askSaveFaulty = function () {
return new Promise(function (resolve) {
var html = "<h5>" +
gettext("Your configuration seems to be faulty.") +
"</h5>";
showConfirmationDialog({
title: gettext("Save faulty Configuration?"),
html: html,
cancel: gettext("Do not save!"),
proceed: [gettext("Save anyway!"), gettext("Save anyway and don't ask this again.")],
onproceed: function (idx) {
if (idx == 0) {
resolve(true);
} else {
self.klipperViewModel.saveOption("configuration", "parse_check", false);
resolve(true);
}
},
oncancel: function () {
resolve(false);
}
});
});
};
self.checkSyntax = function () { self.checkSyntax = function () {
return new Promise((resolve, reject) => {
if (editor.session) { if (editor.session) {
self.klipperViewModel.consoleMessage("debug", "checkSyntax started"); self.klipperViewModel.consoleMessage("debug", "checkSyntax started");
OctoPrint.plugins.klipper.checkCfg(editor.session.getValue()) OctoPrint.plugins.klipper.checkCfg(editor.session.getValue())
.done(function (response) { .done(function (response) {
var msg = ""
if (response.is_syntax_ok == true) { if (response.is_syntax_ok == true) {
self.klipperViewModel.showPopUp("success", gettext("SyntaxCheck"), gettext("SyntaxCheck OK")); self.klipperViewModel.showPopUp("success", gettext("SyntaxCheck"), gettext("SyntaxCheck OK"));
self.editorFocusDelay(1000); self.editorFocusDelay(1000);
resolve(true);
} else { } else {
msg = gettext('Syntax NOK') self.editorFocusDelay(1000);
showMessageDialog( resolve(false);
msg,
{
title: gettext("SyntaxCheck"),
onclose: function () { self.editorFocusDelay(1000); }
}
);
} }
})
.fail(function () {
reject(false);
});
} else { reject(false); }
}); });
}; };
};
self.saveCfg = function () { self.saveCfg = function (options) {
var options = options || {};
var closing = options.closing || false;
if (self.CfgFilename() != "") {
if (editor.session) { if (editor.session) {
self.klipperViewModel.consoleMessage("debug", "SaveCfg start"); if (self.settings.settings.plugins.klipper.configuration.parse_check() == true) {
OctoPrint.plugins.klipper.saveCfg(editor.session.getValue(), self.CfgFilename()) // check Syntax and wait for response
.done(function (response) { self.checkSyntax().then((syntaxOK) => {
var msg = "" if (syntaxOK === false) {
if (response.saved === true) {
self.klipperViewModel.showPopUp("success", gettext("Save Config"), gettext("File saved.")); // Ask if we should save a faulty config anyway
editor_dirty = false; self.askSaveFaulty().then((areWeSaving) => {
if (self.settings.settings.plugins.klipper.configuration.restart_onsave()==true) { if (areWeSaving === false) {
self.klipperViewModel.requestRestart(); // Not saving
}
} else {
msg = gettext('File not saved!')
showMessageDialog( showMessageDialog(
msg, gettext('Faulty config not saved!'),
{ {
title: gettext("Save Config"), title: gettext("Save Config"),
onclose: function () { self.editorFocusDelay(1000); } onclose: function () { self.editorFocusDelay(1000); }
} }
) );
} else {
// Save anyway
self.saveRequest(closing);
} }
}); });
} else {
// Syntax is ok
self.saveRequest(closing);
}
});
} else {
self.saveRequest(closing);
}
}
} else {
showMessageDialog(
gettext("No filename set"),
{
title: gettext("Save Config")
}
);
} }
}; };
@ -159,82 +262,78 @@ $(function () {
self.settings.settings.plugins.klipper.configuration.fontsize( self.settings.settings.plugins.klipper.configuration.fontsize(
self.settings.settings.plugins.klipper.configuration.fontsize() - 1 self.settings.settings.plugins.klipper.configuration.fontsize() - 1
); );
if (self.settings.settings.plugins.klipper.configuration.fontsize() < 9) { if (self.settings.settings.plugins.klipper.configuration.fontsize() < 9) {
self.settings.settings.plugins.klipper.configuration.fontsize(9); self.settings.settings.plugins.klipper.configuration.fontsize(9);
} }
var fontsize = self.settings.settings.plugins.klipper.configuration.fontsize();
if (editor) { if (editor) {
editor.setFontSize( editor.setFontSize(fontsize);
self.settings.settings.plugins.klipper.configuration.fontsize()
);
editor.resize(); editor.resize();
} }
self.klipperViewModel.saveOption("configuration", "fontsize", fontsize);
}; };
self.plusFontsize = function () { self.plusFontsize = function () {
self.settings.settings.plugins.klipper.configuration.fontsize( self.settings.settings.plugins.klipper.configuration.fontsize(
self.settings.settings.plugins.klipper.configuration.fontsize() + 1 self.settings.settings.plugins.klipper.configuration.fontsize() + 1
); );
if (self.settings.settings.plugins.klipper.configuration.fontsize() > 20) { if (self.settings.settings.plugins.klipper.configuration.fontsize() > 20) {
self.settings.settings.plugins.klipper.configuration.fontsize(20); self.settings.settings.plugins.klipper.configuration.fontsize(20);
} }
var fontsize = self.settings.settings.plugins.klipper.configuration.fontsize();
if (editor) { if (editor) {
editor.setFontSize( editor.setFontSize(fontsize);
self.settings.settings.plugins.klipper.configuration.fontsize()
);
editor.resize(); editor.resize();
} }
}; self.klipperViewModel.saveOption("configuration", "fontsize", fontsize);
self.loadLastSession = function () {
if (self.settings.settings.plugins.klipper.configuration.old_config() != "") {
self.klipperViewModel.consoleMessage(
"info",
"lastSession:" +
self.settings.settings.plugins.klipper.configuration.old_config()
);
if (editor.session) {
editor.session.setValue(
self.settings.settings.plugins.klipper.configuration.old_config()
);
editor.clearSelection();
}
}
}; };
self.reloadFromFile = function () { self.reloadFromFile = function () {
if (self.CfgFilename() != "") {
OctoPrint.plugins.klipper.getCfg(self.CfgFilename()) OctoPrint.plugins.klipper.getCfg(self.CfgFilename())
.done(function (response) { .done(function (response) {
self.klipperViewModel.consoleMessage("debug", "reloadFromFile done"); self.klipperViewModel.consoleMessage("debug", "reloadFromFile done");
if (response.response.text != "") { if (response.response.text != "") {
var msg = response.response.text
showMessageDialog( showMessageDialog(
msg, response.response.text,
{ {
title: gettext("Reload File") title: gettext("Reload File")
} }
) );
} else { } else {
self.klipperViewModel.showPopUp("success", gettext("Reload Config"), gettext("File reloaded.")); self.klipperViewModel.showPopUp("success", gettext("Reload Config"), gettext("File reloaded."));
self.CfgChangedExtern = false;
if (editor) { if (editor) {
editor.session.setValue(response.response.config); editor.session.setValue(response.response.config);
self.loadedConfig = response.response.config;
editor.clearSelection(); editor.clearSelection();
editor.focus(); editor.focus();
} }
} }
}) })
.fail(function (response) { .fail(function (response) {
var msg = response
showMessageDialog( showMessageDialog(
msg, response,
{ {
title: gettext("Reload File") title: gettext("Reload File")
} }
) );
}); });
} else {
showMessageDialog(
gettext("No filename set"),
{
title: gettext("Reload File")
}
);
}
}; };
self.onStartup = function () { self.onStartup = function () {
ace.config.set("basePath", "plugin/klipper/static/js/lib/ace/"); ace.config.set("basePath", "plugin/klipper/static/js/lib/ace/");
editor = ace.edit("plugin-klipper-config"); editor = ace.edit("plugin-klipper-config");
@ -252,7 +351,6 @@ $(function () {
editor.session.on('change', function (delta) { editor.session.on('change', function (delta) {
self.CfgContent(editor.getValue()); self.CfgContent(editor.getValue());
editor_dirty = true;
editor.resize(); editor.resize();
}); });
}; };
@ -264,6 +362,32 @@ $(function () {
} }
); );
}; };
self.saveRequest = function (closing) {
self.klipperViewModel.consoleMessage("debug", "SaveCfg start");
OctoPrint.plugins.klipper.saveCfg(editor.session.getValue(), self.CfgFilename())
.done(function (response) {
if (response.saved === true) {
self.klipperViewModel.showPopUp("success", gettext("Save Config"), gettext("File saved."));
self.loadedConfig = editor.session.getValue(); //set loaded config to current for resetting dirtyEditor
if (closing) {
editordialog.modal('hide');
}
if (self.settings.settings.plugins.klipper.configuration.restart_onsave() == true) {
self.klipperViewModel.requestRestart();
}
} else {
showMessageDialog(
gettext('File not saved!'),
{
title: gettext("Save Config"),
onclose: function () { self.editorFocusDelay(1000); }
}
);
}
});
};
} }
OCTOPRINT_VIEWMODELS.push({ OCTOPRINT_VIEWMODELS.push({

View File

@ -30,6 +30,11 @@ $(function () {
}); });
self.markedForFileRemove = ko.observableArray([]); self.markedForFileRemove = ko.observableArray([]);
self.PathToConfigs = ko.observable("");
$(document).on('shown.bs.modal','#klipper_editor', function () {
self.klipperEditorViewModel.onShown();
});
self.checkFontsize = function () { self.checkFontsize = function () {
if (self.settings.settings.plugins.klipper.configuration.fontsize() > 20) { if (self.settings.settings.plugins.klipper.configuration.fontsize() > 20) {
@ -80,6 +85,7 @@ $(function () {
OctoPrint.plugins.klipper.listCfg().done(function (response) { OctoPrint.plugins.klipper.listCfg().done(function (response) {
self.klipperViewModel.consoleMessage("debug", "listCfgFiles done"); self.klipperViewModel.consoleMessage("debug", "listCfgFiles done");
self.configs.updateItems(response.files); self.configs.updateItems(response.files);
self.PathToConfigs(gettext("Path: ") + response.path);
self.configs.resetPage(); self.configs.resetPage();
}); });
}; };
@ -87,13 +93,17 @@ $(function () {
self.loadBaseConfig = function () { self.loadBaseConfig = function () {
if (!self.klipperViewModel.hasRight("CONFIG")) return; if (!self.klipperViewModel.hasRight("CONFIG")) return;
OctoPrint.plugins.klipper.getCfg("printer.cfg").done(function (response) { var baseconfig = self.settings.settings.plugins.klipper.configuration.baseconfig();
if (baseconfig != "") {
self.klipperViewModel.consoleMessage("debug", "loadBaseConfig:" + baseconfig);
OctoPrint.plugins.klipper.getCfg(baseconfig).done(function (response) {
var config = { var config = {
content: response.response.config, content: response.response.config,
file: "printer.cfg", file: baseconfig,
}; };
self.klipperEditorViewModel.process(config).then(); self.klipperEditorViewModel.process(config).then();
}); });
}
}; };
self.removeCfg = function (config) { self.removeCfg = function (config) {
@ -245,8 +255,6 @@ $(function () {
self.klipperEditorViewModel.process(config).then( self.klipperEditorViewModel.process(config).then(
function() { self.showEditor(); } function() { self.showEditor(); }
); );
}); });
}; };
@ -312,21 +320,8 @@ $(function () {
if (plugin == "klipper" && data.type == "reload" && data.subtype == "configlist") { if (plugin == "klipper" && data.type == "reload" && data.subtype == "configlist") {
self.klipperViewModel.consoleMessage("debug", "onDataUpdaterPluginMessage klipper reload configlist"); self.klipperViewModel.consoleMessage("debug", "onDataUpdaterPluginMessage klipper reload configlist");
self.listCfgFiles(); self.listCfgFiles();
} else if (plugin == "klipper" && data.type == "start" && data.subtype == "config") {
self.klipperViewModel.consoleMessage("debug", "onDataUpdaterPluginMessage klipper start config");
self.startConfig(data.title, data.payload);
} }
}; };
self.startConfig = function (file, content) {
if (!self.klipperViewModel.hasRight("CONFIG")) return;
filename = file || "";
var config = {
content: content,
file: filename,
};
self.klipperEditorViewModel.process(config).then();
};
} }
OCTOPRINT_VIEWMODELS.push({ OCTOPRINT_VIEWMODELS.push({

View File

@ -31,14 +31,14 @@
<button class="btn btn-small" data-bind="click: reloadFromFile" title="{{ _('Reload from file') }}"> <button class="btn btn-small" data-bind="click: reloadFromFile" title="{{ _('Reload from file') }}">
<i class="fas fa-upload"></i> {{ _('Reload from file') }} <i class="fas fa-upload"></i> {{ _('Reload from file') }}
</button> </button>
<button class="btn btn-small" data-bind="click: loadLastSession" title="{{ _('Reload last version') }}">
<i class="fas fa-redo"></i> {{ _('Reload last version') }}
</button>
<button class="btn btn-small" data-bind="click: checkSyntax" title="{{ _('Check Syntax') }}"> <button class="btn btn-small" data-bind="click: checkSyntax" title="{{ _('Check Syntax') }}">
<i class="fas fa-spell-check"></i> {{ _('Check Syntax') }} <i class="fas fa-spell-check"></i> {{ _('Check Syntax') }}
</button> </button>
<button class="btn btn-small" data-bind="click: function() { $root.saveCfg({closing: true}) }" title="{{ _('Save Config and Close') }}">
<i class="fas fa-save"></i> {{ _('Save & Close') }}
</button>
<button class="btn btn-small" data-bind="click: saveCfg" title="{{ _('Save Config') }}"> <button class="btn btn-small" data-bind="click: saveCfg" title="{{ _('Save Config') }}">
<i class="fas fa-save"></i> {{ _('Save Config') }} <i class="fas fa-save"></i> {{ _('Save') }}
</button> </button>
</div> </div>
</div> </div>

View File

@ -1,3 +1,3 @@
<!-- ko if: settings.settings.plugins.klipper.configuration.shortStatus_navbar --> <!-- ko if: settings.settings.plugins.klipper.configuration.shortStatus_navbar -->
<a title="{{ _('Go to OctoKlipper Tab') }}" data-bind="text: shortStatus_navbar, click: navbarClicked"></a> <a data-bind="attr: { title: shortStatus_navbar_hover }, text: shortStatus_navbar, click: navbarClicked"></a>
<!-- /ko --> <!-- /ko -->

View File

@ -21,6 +21,13 @@
data-bind="checked: settings.settings.plugins.klipper.connection.replace_connection_panel"> data-bind="checked: settings.settings.plugins.klipper.connection.replace_connection_panel">
</div> </div>
</div> </div>
<div class="control-group">
<label class="control-label">{{ _('Hide \'Open Editor\' Button\nin the Connection Panel') }}</label>
<div class="controls">
<input class="controls-checkbox" title="{{ _('Hide \'Open Editor\' Button\nin the Connection Panel') }}" type="checkbox"
data-bind="checked: settings.settings.plugins.klipper.connection.hide_editor_button">
</div>
</div>
<div class="control-group border"> <div class="control-group border">
<label class="control-label">{{ _('Show Short Messages') }}</label> <label class="control-label">{{ _('Show Short Messages') }}</label>
<div class="controls"> <div class="controls">
@ -37,6 +44,13 @@
data-bind="checked: settings.settings.plugins.klipper.configuration.debug_logging" /> data-bind="checked: settings.settings.plugins.klipper.configuration.debug_logging" />
</div> </div>
</div> </div>
<div class="control-group">
<label class="control-label">{{ _('Hide Error PopUps') }}</label>
<div class="controls">
<input class="controls-checkbox" title="{{ _('Hide Error PopUps') }}" type="checkbox"
data-bind="checked: settings.settings.plugins.klipper.configuration.hide_error_popups" />
</div>
</div>
<div class="control-group border"> <div class="control-group border">
<label class="control-label">{{ _('Config Editor') }}</label> <label class="control-label">{{ _('Config Editor') }}</label>
<div class="controls"> <div class="controls">
@ -52,7 +66,13 @@
<div class="control-group"> <div class="control-group">
<label class="control-label">{{ _('Klipper Config Directory') }}</label> <label class="control-label">{{ _('Klipper Config Directory') }}</label>
<div class="controls"> <div class="controls">
<input type="text" class="input-block-level" data-bind="value: settings.settings.plugins.klipper.configuration.configpath" /> <input type="text" class="input-block-level" data-bind="value: settings.settings.plugins.klipper.configuration.config_path" />
</div>
</div>
<div class="control-group">
<label class="control-label" title="{{ _('The filename of the base config that Klipper is loading. (default is printer.cfg)') }}">{{ _('Klipper Base Config Filename') }}</label>
<div class="controls">
<input type="text" class="input-block-level" data-bind="value: settings.settings.plugins.klipper.configuration.baseconfig" />
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
@ -62,7 +82,7 @@
</div> </div>
</div> </div>
<div class="control-group border"> <div class="control-group border">
<label class="control-label">{{ _('Configuration Reload Command') }}</label> <label class="control-label">{{ _('Configuration Restart Command') }}</label>
<div class="controls"> <div class="controls">
<select data-bind="value: settings.settings.plugins.klipper.configuration.reload_command"> <select data-bind="value: settings.settings.plugins.klipper.configuration.reload_command">
<option value="RESTART">RESTART</option> <option value="RESTART">RESTART</option>
@ -71,8 +91,11 @@
<span class="help-block" style="margin-top:5px;"> <span class="help-block" style="margin-top:5px;">
{{ _('The command that is executed if you want to restart klipper.') }} {{ _('The command that is executed if you want to restart klipper.') }}
</span> </span>
<label class="checkbox" title="{{ _('Reload klipper on editor save?') }}"><input type="checkbox" <label class="checkbox" title="{{ _('Restart klipper on editor save?') }}"><input type="checkbox"
data-bind="checked: settings.settings.plugins.klipper.configuration.restart_onsave" /> {{ _('Reload klipper on editor save?') }} data-bind="checked: settings.settings.plugins.klipper.configuration.restart_onsave" /> {{ _('Restart Klipper on editor save?') }}
</label>
<label class="checkbox" title="{{ _('Show Confirmation before restarting Klipper?') }}"><input type="checkbox"
data-bind="checked: settings.settings.plugins.klipper.configuration.confirm_reload" /> {{ _('Confirmation before restarting Klipper?') }}
</label> </label>
</div> </div>
</div> </div>
@ -87,6 +110,12 @@
</div> </div>
<!-- Macros --> <!-- Macros -->
<div class="tab-pane" id="macros"> <div class="tab-pane" id="macros">
<div class="control-group">
<span class="help-block">
{{ _('These macros are only meant to be used in OctoPrint.') }}
{{ _('They are not the ones that can be defined in the printer.cfg.') }}<br />
</span>
</div>
<div class="control-group" style="margin-bottom: 0px;"> <div class="control-group" style="margin-bottom: 0px;">
<div class="controls" style="margin-left: 82px;"> <div class="controls" style="margin-left: 82px;">
<div class="row-fluid"> <div class="row-fluid">
@ -151,9 +180,7 @@
<div class="tab-pane" id="level"> <div class="tab-pane" id="level">
<div class="control-group"> <div class="control-group">
<span class="help-block"> <span class="help-block">
{{ _('This feature assists in manually leveling you print bed by moving the head to the defined points in {{ _('This feature assists in manually leveling your print bed by moving the head to the defined points in sequence.<br />If you use a piece of paper for leveling, set "Probe Height" to the paper thickness eg. "0.1".') }}
sequence.<br />
If you use a piece of paper for leveling, set "Probe Height" to the paper thickness eg. "0.1".') }}
</span> </span>
</div> </div>
<div class="control-group"> <div class="control-group">
@ -253,7 +280,8 @@
<i class="icon-refresh"></i> {{ _('Refresh Files') }} <i class="icon-refresh"></i> {{ _('Refresh Files') }}
</button> </button>
<button class="btn btn-small" <button class="btn btn-small"
data-bind="click: removeMarkedFiles, enable: markedForFileRemove().length > 0">{{ _('Delete selected') }}</button> data-bind="click: removeMarkedFiles, enable: markedForFileRemove().length > 0">{{ _('Delete selected') }}
</button>
</div> </div>
<div class="pull-right"> <div class="pull-right">
<div class="btn-group"> <div class="btn-group">
@ -272,6 +300,7 @@
</div> </div>
</div> </div>
</div> </div>
<p class="klipper-inline" data-bind="text: PathToConfigs" title="{{ _('Path to the config files.')}}"></p>
<div class="scroll-y"> <div class="scroll-y">
<table class="table table-striped table-hover table-condensed table-hover table-fixed" id="klipper_cfg_files"> <table class="table table-striped table-hover table-condensed table-hover table-fixed" id="klipper_cfg_files">
<thead> <thead>

View File

@ -3,12 +3,16 @@
<label for="connection_printers" data-bind="css: {disabled: !connectionState.isErrorOrClosed()}, enable: connectionState.isErrorOrClosed() && loginState.isUser()">{{ _('Printer Profile') }}</label> <label for="connection_printers" data-bind="css: {disabled: !connectionState.isErrorOrClosed()}, enable: connectionState.isErrorOrClosed() && loginState.isUser()">{{ _('Printer Profile') }}</label>
<select id="connection_printers" data-bind="options: connectionState.printerOptions, optionsText: 'name', optionsValue: 'id', value: connectionState.selectedPrinter, css: {disabled: !connectionState.isErrorOrClosed()}, enable: connectionState.isErrorOrClosed() && loginState.isUser()"></select> <select id="connection_printers" data-bind="options: connectionState.printerOptions, optionsText: 'name', optionsValue: 'id', value: connectionState.selectedPrinter, css: {disabled: !connectionState.isErrorOrClosed()}, enable: connectionState.isErrorOrClosed() && loginState.isUser()"></select>
<button class="btn btn-block" data-bind="click: connectionState.connect, text: connectionState.buttonText(), enable: loginState.isUser()">{{ _('Connect') }}</button> <button class="btn btn-block" data-bind="click: connectionState.connect, text: connectionState.buttonText(), enable: loginState.isUser()">{{ _('Connect') }}</button>
<!-- ko ifnot: settings.settings.plugins.klipper.connection.hide_editor_button -->
<button class="btn btn-block" title="{{ _('Open Editor') }}" data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: showEditorDialog">{{ _('Open Editor') }}</button> <button class="btn btn-block" title="{{ _('Open Editor') }}" data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: showEditorDialog">{{ _('Open Editor') }}</button>
<!-- /ko -->
</div> </div>
</div> </div>
<!-- ko if: settings.settings.plugins.klipper.configuration.shortStatus_sidebar --> <!-- ko if: settings.settings.plugins.klipper.configuration.shortStatus_sidebar -->
<div class="plugin-klipper-sidebar"> <div id="shortStatus_SideBar" class="plugin-klipper-sidebar">
<a title="{{ _('Go to OctoKlipper Tab') }}" data-bind="text: shortStatus_sidebar, click: navbarClicked"></a> <a title="{{ _('Go to OctoKlipper Tab') }}" data-bind="click: navbarClicked">
<div data-bind="html: shortStatus_sidebar" class="msg"></div>
</a>
</div> </div>
<!-- /ko --> <!-- /ko -->
<div class="control-group" data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_MACRO)"> <div class="control-group" data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_MACRO)">

View File

@ -1,6 +1,11 @@
<div class="row-fluid"> <div class="row-fluid">
<div id="left-side"> <div id="left-side">
<label> <i class="icon-tasks"></i> {{ _("Messages") }} </label> <label class="klipper-inline"> <i class="icon-tasks"></i> {{ _("Messages") }} </label>
<button class="btn btn-small pull-right"
data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: openOctoKlipperSettings('klipper-basic')"
title="{{ _('Open the OctoKlipper Settings') }}">
<i class="fa icon-black fa-wrench"></i>
</button>
<div class="plugin-klipper-log" data-bind="foreach: logMessages"> <div class="plugin-klipper-log" data-bind="foreach: logMessages">
<div class="log-item" data-bind="css: type"> <div class="log-item" data-bind="css: type">
<div data-bind="text: time" class="ts"></div> <div data-bind="text: time" class="ts"></div>
@ -21,11 +26,6 @@
title="{{ _('Query Klipper for its current status') }}"> title="{{ _('Query Klipper for its current status') }}">
<i class="fa icon-black fa-info-circle"></i> {{ _("Get Status") }} <i class="fa icon-black fa-info-circle"></i> {{ _("Get Status") }}
</button> </button>
<button class="btn btn-block btn-small"
data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: openOctoKlipperSettings('klipper-basic')"
title="{{ _('Open the OctoKlipper Settings') }}">
{{ _("Open OctoKlipper Settings") }}
</button>
<button class="btn btn-block btn-small" <button class="btn btn-block btn-small"
data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: showEditorDialog" data-bind="visible: $root.loginState.hasPermissionKo($root.access.permissions.PLUGIN_KLIPPER_CONFIG), click: showEditorDialog"
title="{{ _('Show the Editor') }}"> title="{{ _('Show the Editor') }}">

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OctoKlipper 0.3.8.2\n" "Project-Id-Version: OctoKlipper 0.3.8.2\n"
"Report-Msgid-Bugs-To: i18n@octoprint.org\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n"
"POT-Creation-Date: 2021-09-17 08:18+0200\n" "POT-Creation-Date: 2021-11-21 00:46+0100\n"
"PO-Revision-Date: 2021-05-13 17:32+0200\n" "PO-Revision-Date: 2021-05-13 17:32+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n" "Language: de\n"
@ -27,37 +27,74 @@ msgstr "Erlaubt Klipper zu konfigurieren"
msgid "Allows to use klipper macros" msgid "Allows to use klipper macros"
msgstr "Erlaubt Makros zu benutzen" msgstr "Erlaubt Makros zu benutzen"
#: octoprint_klipper/__init__.py:608 #: octoprint_klipper/__init__.py:599
msgid "Restart Klipper" msgid "Restart Klipper"
msgstr "Neustart Klipper" msgstr "Klipper Neustart"
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "You are about to restart Klipper!" msgid "You are about to restart Klipper!"
msgstr "Sie sind dabei Klipper neu zu starten!" msgstr "Sie sind dabei Klipper neu zu starten!"
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "This will stop ongoing prints!" msgid "This will stop ongoing prints!"
msgstr "Dies wird angehende Aufträge abbrechen!" msgstr "Dies wird laufende Aufträge abbrechen!"
#: octoprint_klipper/cfgUtils.py:95 #: octoprint_klipper/cfgUtils.py:86
msgid "Error: Klipper config file not found at:"
msgstr "Fehler: Klipper Konfigurationsdatei nicht gefunden:"
#: octoprint_klipper/cfgUtils.py:89
msgid "IOError:"
msgstr "IOFehler"
#: octoprint_klipper/cfgUtils.py:96
msgid "Decode Error:"
msgstr "Dekodierungsfehler:"
#: octoprint_klipper/cfgUtils.py:100
msgid "Please convert your config files to utf-8!"
msgstr "Bitte die Konfigurationsdateien nach utf-8 konvertieren!"
#: octoprint_klipper/cfgUtils.py:102
msgid ""
"Or you can also paste your config \n"
"into the Editor and save it."
msgstr ""
"Sie können auch die Konfiguration \n"
"in den Editor einfügen und dann speichern."
#: octoprint_klipper/cfgUtils.py:109
msgid "File not found!" msgid "File not found!"
msgstr "Datei nicht gefunden!" msgstr "Datei nicht gefunden!"
#: octoprint_klipper/static/js/klipper.js:259 #: octoprint_klipper/static/js/klipper.js:220
#: octoprint_klipper/templates/klipper_sidebar.jinja2:13
msgid "Go to OctoKlipper Tab"
msgstr "Gehe zum OctoKlipper Reiter"
#: octoprint_klipper/static/js/klipper.js:340
msgid "Restarted Klipper"
msgstr "Klipper neu gestartet"
#: octoprint_klipper/static/js/klipper.js:348
msgid "All ongoing Prints will be stopped!" msgid "All ongoing Prints will be stopped!"
msgstr "Alle laufende Drucke werden gestoppt!" msgstr "Alle laufende Drucke werden gestoppt!"
#: octoprint_klipper/static/js/klipper.js:262 #: octoprint_klipper/static/js/klipper.js:353
msgid "Klipper restart?" msgid "Restart Klipper?"
msgstr "Klipper neu starten?" msgstr "Klipper neu starten?"
#: octoprint_klipper/static/js/klipper.js:264 #: octoprint_klipper/static/js/klipper.js:355
#: octoprint_klipper/static/js/klipper_backup.js:159 #: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Proceed" msgid "Restart"
msgstr "Weiter" msgstr "Neustart"
#: octoprint_klipper/static/js/klipper.js:355
msgid "Restart and don't ask this again."
msgstr "Neu starten und dies nicht wieder nachfragen."
#: octoprint_klipper/static/js/klipper_backup.js:126 #: octoprint_klipper/static/js/klipper_backup.js:126
#: octoprint_klipper/static/js/klipper_settings.js:124 #: octoprint_klipper/static/js/klipper_settings.js:134
#, python-format #, python-format
msgid "" msgid ""
"Failed to remove config %(name)s.</p><p>Please consult octoprint.log for " "Failed to remove config %(name)s.</p><p>Please consult octoprint.log for "
@ -67,13 +104,13 @@ msgstr ""
"nachsehen für weitere Details.</p>" "nachsehen für weitere Details.</p>"
#: octoprint_klipper/static/js/klipper_backup.js:129 #: octoprint_klipper/static/js/klipper_backup.js:129
#: octoprint_klipper/static/js/klipper_settings.js:127 #: octoprint_klipper/static/js/klipper_settings.js:137
msgid "Could not remove config" msgid "Could not remove config"
msgstr "Konnte Konfiguration nicht löschen" msgstr "Konnte Konfiguration nicht löschen"
#: octoprint_klipper/static/js/klipper_backup.js:138 #: octoprint_klipper/static/js/klipper_backup.js:138
#, python-format #, python-format
msgid "You are about to delete backuped config file \"%(name)s\"." msgid "You are about to delete backed config file \"%(name)s\"."
msgstr "Sie sind dabei die gesicherte Konfigurationsdatei \"%(name)s\" zu löschen." msgstr "Sie sind dabei die gesicherte Konfigurationsdatei \"%(name)s\" zu löschen."
#: octoprint_klipper/static/js/klipper_backup.js:154 #: octoprint_klipper/static/js/klipper_backup.js:154
@ -86,16 +123,21 @@ msgstr ""
msgid "Are you sure you want to restore now?" msgid "Are you sure you want to restore now?"
msgstr "Sind sie sicher jetzt wiederherzustellen?" msgstr "Sind sie sicher jetzt wiederherzustellen?"
#: octoprint_klipper/static/js/klipper_backup.js:159
#: octoprint_klipper/static/js/klipper_editor.js:173
msgid "Proceed"
msgstr "Weiter"
#: octoprint_klipper/static/js/klipper_backup.js:184 #: octoprint_klipper/static/js/klipper_backup.js:184
#, python-format #, python-format
msgid "You are about to restore %(count)d backuped config files." msgid "You are about to restore %(count)d backed config files."
msgstr "" msgstr ""
"Sie sind dabei %(count)d gesicherte Konfigurationsdateien " "Sie sind dabei %(count)d gesicherte Konfigurationsdateien "
"wiederherzustellen." "wiederherzustellen."
#: octoprint_klipper/static/js/klipper_backup.js:199 #: octoprint_klipper/static/js/klipper_backup.js:199
#, python-format #, python-format
msgid "You are about to delete %(count)d backuped config files." msgid "You are about to delete %(count)d backed config files."
msgstr "Sie sind dabei %(count)d gesicherte Konfigurationsdateien zu löschen." msgstr "Sie sind dabei %(count)d gesicherte Konfigurationsdateien zu löschen."
#: octoprint_klipper/static/js/klipper_backup.js:209 #: octoprint_klipper/static/js/klipper_backup.js:209
@ -104,7 +146,7 @@ msgstr "Stelle Klipper Konfigdatei wieder her"
#: octoprint_klipper/static/js/klipper_backup.js:211 #: octoprint_klipper/static/js/klipper_backup.js:211
#, python-format #, python-format
msgid "Restoring %(count)d backuped config files..." msgid "Restoring %(count)d backed config files..."
msgstr "Stelle %(count)d gesicherte Konfigurationsdateien wieder her." msgstr "Stelle %(count)d gesicherte Konfigurationsdateien wieder her."
#: octoprint_klipper/static/js/klipper_backup.js:220 #: octoprint_klipper/static/js/klipper_backup.js:220
@ -123,95 +165,141 @@ msgstr "Lösche gesicherte Dateien"
#: octoprint_klipper/static/js/klipper_backup.js:265 #: octoprint_klipper/static/js/klipper_backup.js:265
#, python-format #, python-format
msgid "Deleting %(count)d backup files..." msgid "Deleting %(count)d backed files..."
msgstr "Lösche %(count)d gesicherte Konfigurationsdateien..." msgstr "Lösche %(count)d gesicherte Konfigurationsdateien..."
#: octoprint_klipper/static/js/klipper_backup.js:273 #: octoprint_klipper/static/js/klipper_backup.js:273
#: octoprint_klipper/static/js/klipper_settings.js:183 #: octoprint_klipper/static/js/klipper_settings.js:193
#, python-format #, python-format
msgid "Deleted %(filename)s..." msgid "Deleted %(filename)s..."
msgstr "%(filename)s gelöscht..." msgstr "%(filename)s gelöscht..."
#: octoprint_klipper/static/js/klipper_backup.js:279 #: octoprint_klipper/static/js/klipper_backup.js:279
#: octoprint_klipper/static/js/klipper_settings.js:193 #: octoprint_klipper/static/js/klipper_settings.js:203
#, python-format #, python-format
msgid "Deleting of %(filename)s failed, continuing..." msgid "Deleting of %(filename)s failed, continuing..."
msgstr "Löschung von Datei %(filename)s gescheitert, setze fort... " msgstr "Löschung von Datei %(filename)s gescheitert, setze fort... "
#: octoprint_klipper/static/js/klipper_editor.js:61 #: octoprint_klipper/static/js/klipper_editor.js:79
msgid "Closing without saving"
msgstr "Schließen ohne zu Speichern?"
#: octoprint_klipper/static/js/klipper_editor.js:80
msgid "Your file seems to have changed." msgid "Your file seems to have changed."
msgstr "Datei scheint geändert worden zu sein." msgstr "Datei scheint geändert worden zu sein."
#: octoprint_klipper/static/js/klipper_editor.js:64 #: octoprint_klipper/static/js/klipper_editor.js:82
msgid "Do you really want to close it?" msgid "Do you really want to close it?"
msgstr "Wollen sie wirklich schliessen?" msgstr "Wollen sie wirklich schließen?"
#: octoprint_klipper/static/js/klipper_editor.js:65 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "No" #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgstr "Nein" msgid "Close"
msgstr "Schließen"
#: octoprint_klipper/static/js/klipper_editor.js:66 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "Yes" msgid "Do not close"
msgstr "Ja" msgstr "Nicht schließen"
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:83
#: octoprint_klipper/static/js/klipper_editor.js:134 #: octoprint_klipper/templates/klipper_editor.jinja2:38
msgid "Save & Close"
msgstr "Speichern & Schließen"
#: octoprint_klipper/static/js/klipper_editor.js:168
msgid "Reload Configfile after SAVE_CONFIG?"
msgstr "Konfiguration neuladen nach SAVE_CONFIG?"
#: octoprint_klipper/static/js/klipper_editor.js:171
msgid "Externally changed config"
msgstr "Extern geänderte Konfiguration"
#: octoprint_klipper/static/js/klipper_editor.js:183
msgid "Your configuration seems to be faulty."
msgstr "Ihre Konfiguration sieht fehlerhaft aus."
#: octoprint_klipper/static/js/klipper_editor.js:187
msgid "Save faulty Configuration?"
msgstr "Speichere fehlerhafte Konfiguration?"
#: octoprint_klipper/static/js/klipper_editor.js:189
msgid "Do not save!"
msgstr "Datei nicht speichern!"
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway!"
msgstr "Speichere trotzdem!"
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway and don't ask this again."
msgstr "Speichere trotzdem und dies nicht wieder nachfragen."
#: octoprint_klipper/static/js/klipper_editor.js:214
msgid "SyntaxCheck" msgid "SyntaxCheck"
msgstr "Syntaxprüfung" msgstr "Syntaxprüfung"
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:214
#, fuzzy
msgid "SyntaxCheck OK" msgid "SyntaxCheck OK"
msgstr "Syntaxprüfung OK" msgstr "Syntaxprüfung OK"
#: octoprint_klipper/static/js/klipper_editor.js:130 #: octoprint_klipper/static/js/klipper_editor.js:249
msgid "Syntax NOK" msgid "Faulty config not saved!"
msgstr "Syntax ist nicht ok!" msgstr "Fehlerhafte Datei nicht gespeichert!"
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:251
#: octoprint_klipper/static/js/klipper_editor.js:161 #: octoprint_klipper/static/js/klipper_editor.js:275
#: octoprint_klipper/static/js/klipper_editor.js:393
#: octoprint_klipper/static/js/klipper_editor.js:406
#: octoprint_klipper/templates/klipper_editor.jinja2:40 #: octoprint_klipper/templates/klipper_editor.jinja2:40
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save Config" msgid "Save Config"
msgstr "Speichere Konfig" msgstr "Speichere Konfig"
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:273
msgid "File saved." #: octoprint_klipper/static/js/klipper_editor.js:349
msgstr "Datei gespeichert." msgid "No filename set"
msgstr "Dateiname nicht angegeben"
#: octoprint_klipper/static/js/klipper_editor.js:157 #: octoprint_klipper/static/js/klipper_editor.js:325
#, fuzzy #: octoprint_klipper/static/js/klipper_editor.js:343
msgid "File not saved!" #: octoprint_klipper/static/js/klipper_editor.js:351
msgstr "Datei nicht gespeichert."
#: octoprint_klipper/static/js/klipper_editor.js:226
#: octoprint_klipper/static/js/klipper_editor.js:243
msgid "Reload File" msgid "Reload File"
msgstr "Datei neuladen" msgstr "Datei neuladen"
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "Reload Config" msgid "Reload Config"
msgstr "Datei neuladen" msgstr "Datei neuladen"
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "File reloaded." msgid "File reloaded."
msgstr "Datei neugeladen." msgstr "Datei neugeladen."
#: octoprint_klipper/static/js/klipper_settings.js:136 #: octoprint_klipper/static/js/klipper_editor.js:393
msgid "File saved."
msgstr "Datei gespeichert."
#: octoprint_klipper/static/js/klipper_editor.js:404
msgid "File not saved!"
msgstr "Datei nicht gespeichert."
#: octoprint_klipper/static/js/klipper_settings.js:103
msgid "Path: "
msgstr "Pfad: "
#: octoprint_klipper/static/js/klipper_settings.js:146
#, python-format #, python-format
msgid "You are about to delete config file \"%(name)s\"." msgid "You are about to delete config file \"%(name)s\"."
msgstr "Sie sind dabei Konfigurationsdatei \"%(name)s\" zu löschen." msgstr "Sie sind dabei Konfigurationsdatei \"%(name)s\" zu löschen."
#: octoprint_klipper/static/js/klipper_settings.js:163 #: octoprint_klipper/static/js/klipper_settings.js:173
#, python-format #, python-format
msgid "You are about to delete %(count)d config files." msgid "You are about to delete %(count)d config files."
msgstr "Sie sind dabei %(count)d Konfigurationsdateien zu löschen." msgstr "Sie sind dabei %(count)d Konfigurationsdateien zu löschen."
#: octoprint_klipper/static/js/klipper_settings.js:173 #: octoprint_klipper/static/js/klipper_settings.js:183
msgid "Deleting config files" msgid "Deleting config files"
msgstr "Lösche Konfigurationsdateien" msgstr "Lösche Konfigurationsdateien"
#: octoprint_klipper/static/js/klipper_settings.js:174 #: octoprint_klipper/static/js/klipper_settings.js:184
#, python-format #, python-format
msgid "Deleting %(count)d config files..." msgid "Deleting %(count)d config files..."
msgstr "Lösche %(count)d Konfigurationsdateien..." msgstr "Lösche %(count)d Konfigurationsdateien..."
@ -221,27 +309,27 @@ msgid "Backups"
msgstr "Sicherungen" msgstr "Sicherungen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17
#: octoprint_klipper/templates/klipper_settings.jinja2:240 #: octoprint_klipper/templates/klipper_settings.jinja2:267
msgid "Select all on this page" msgid "Select all on this page"
msgstr "Wähle alle auf dieser Seite aus" msgstr "Wähle alle auf dieser Seite aus"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20
#: octoprint_klipper/templates/klipper_settings.jinja2:241 #: octoprint_klipper/templates/klipper_settings.jinja2:268
msgid "Select all" msgid "Select all"
msgstr "Alles Auswählen" msgstr "Alles Auswählen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:243 #: octoprint_klipper/templates/klipper_settings.jinja2:270
msgid "Clear selection" msgid "Clear selection"
msgstr "Auswahl zurücksetzen" msgstr "Auswahl zurücksetzen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29
#: octoprint_klipper/templates/klipper_settings.jinja2:252 #: octoprint_klipper/templates/klipper_settings.jinja2:279
msgid "Refresh file list" msgid "Refresh file list"
msgstr "Aktualisiere Dateiliste" msgstr "Aktualisiere Dateiliste"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30
#: octoprint_klipper/templates/klipper_settings.jinja2:253 #: octoprint_klipper/templates/klipper_settings.jinja2:280
msgid "Refresh Files" msgid "Refresh Files"
msgstr "Aktualisieren" msgstr "Aktualisieren"
@ -250,55 +338,55 @@ msgid "Restore selected"
msgstr "Ausgewählte wiederherstellen" msgstr "Ausgewählte wiederherstellen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:256 #: octoprint_klipper/templates/klipper_settings.jinja2:283
msgid "Delete selected" msgid "Delete selected"
msgstr "Ausgewählte löschen" msgstr "Ausgewählte löschen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46
#: octoprint_klipper/templates/klipper_settings.jinja2:263 #: octoprint_klipper/templates/klipper_settings.jinja2:291
msgid "Sort by name" msgid "Sort by name"
msgstr "Sortiere nach Name" msgstr "Sortiere nach Name"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47
#: octoprint_klipper/templates/klipper_settings.jinja2:264 #: octoprint_klipper/templates/klipper_settings.jinja2:292
msgid "ascending" msgid "ascending"
msgstr "aufwärts" msgstr "aufsteigend"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50
#: octoprint_klipper/templates/klipper_settings.jinja2:266 #: octoprint_klipper/templates/klipper_settings.jinja2:294
msgid "Sort by date" msgid "Sort by date"
msgstr "Sortiere nach Datum" msgstr "Sortiere nach Datum"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55
#: octoprint_klipper/templates/klipper_settings.jinja2:267 #: octoprint_klipper/templates/klipper_settings.jinja2:295
#: octoprint_klipper/templates/klipper_settings.jinja2:270 #: octoprint_klipper/templates/klipper_settings.jinja2:298
msgid "descending" msgid "descending"
msgstr "abwärts" msgstr "absteigend"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54
#: octoprint_klipper/templates/klipper_settings.jinja2:269 #: octoprint_klipper/templates/klipper_settings.jinja2:297
msgid "Sort by file size" msgid "Sort by file size"
msgstr "Sortie nach Dateigröße" msgstr "Sortiere nach Dateigröße"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65
#: octoprint_klipper/templates/klipper_settings.jinja2:101 #: octoprint_klipper/templates/klipper_settings.jinja2:130
#: octoprint_klipper/templates/klipper_settings.jinja2:280 #: octoprint_klipper/templates/klipper_settings.jinja2:309
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66
#: octoprint_klipper/templates/klipper_settings.jinja2:281 #: octoprint_klipper/templates/klipper_settings.jinja2:310
msgid "Size" msgid "Size"
msgstr "Größe" msgstr "Größe"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67
#: octoprint_klipper/templates/klipper_settings.jinja2:282 #: octoprint_klipper/templates/klipper_settings.jinja2:311
msgid "Action" msgid "Action"
msgstr "Aktion" msgstr "Aktion"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78
#: octoprint_klipper/templates/klipper_settings.jinja2:294 #: octoprint_klipper/templates/klipper_settings.jinja2:323
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
@ -307,7 +395,7 @@ msgid "Restore"
msgstr "Wiederherstellen" msgstr "Wiederherstellen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84
#: octoprint_klipper/templates/klipper_settings.jinja2:297 #: octoprint_klipper/templates/klipper_settings.jinja2:326
msgid "Download" msgid "Download"
msgstr "Runterladen" msgstr "Runterladen"
@ -334,14 +422,17 @@ msgstr "Datei neuladen"
#: octoprint_klipper/templates/klipper_editor.jinja2:34 #: octoprint_klipper/templates/klipper_editor.jinja2:34
#: octoprint_klipper/templates/klipper_editor.jinja2:35 #: octoprint_klipper/templates/klipper_editor.jinja2:35
msgid "Reload last version"
msgstr "Lade letzte Version"
#: octoprint_klipper/templates/klipper_editor.jinja2:37
#: octoprint_klipper/templates/klipper_editor.jinja2:38
msgid "Check Syntax" msgid "Check Syntax"
msgstr "Syntax prüfen" msgstr "Syntax prüfen"
#: octoprint_klipper/templates/klipper_editor.jinja2:37
msgid "Save Config and Close"
msgstr "Speichern und schließen"
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save"
msgstr "Speichern"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4
msgid "Performance Graph" msgid "Performance Graph"
msgstr "Performancediagramm" msgstr "Performancediagramm"
@ -362,10 +453,6 @@ msgstr "Auswählen"
msgid "Analyze Log" msgid "Analyze Log"
msgstr "Log analysieren" msgstr "Log analysieren"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgid "Close"
msgstr "Schließen"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35
msgid "Depending on the size of the log file this might take a while." msgid "Depending on the size of the log file this might take a while."
msgstr "Abhängig von der Größe der Logdatei kann es etwas dauern." msgstr "Abhängig von der Größe der Logdatei kann es etwas dauern."
@ -395,11 +482,6 @@ msgstr "Nächster"
msgid "Stop" msgid "Stop"
msgstr "Stop" msgstr "Stop"
#: octoprint_klipper/templates/klipper_navbar.jinja2:2
#: octoprint_klipper/templates/klipper_sidebar.jinja2:11
msgid "Go to OctoKlipper Tab"
msgstr "Gehe zum OctoKlipper Reiter"
#: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4
#: octoprint_klipper/templates/klipper_tab_main.jinja2:63 #: octoprint_klipper/templates/klipper_tab_main.jinja2:63
msgid "Coordinate Offset" msgid "Coordinate Offset"
@ -455,7 +537,7 @@ msgid "Basic"
msgstr "Haupteinstellungen" msgstr "Haupteinstellungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:4 #: octoprint_klipper/templates/klipper_settings.jinja2:4
#: octoprint_klipper/templates/klipper_sidebar.jinja2:16 #: octoprint_klipper/templates/klipper_sidebar.jinja2:20
#: octoprint_klipper/templates/klipper_tab_main.jinja2:72 #: octoprint_klipper/templates/klipper_tab_main.jinja2:72
msgid "Macros" msgid "Macros"
msgstr "Makros" msgstr "Makros"
@ -478,169 +560,215 @@ msgid "Replace Connection Panel"
msgstr "Ersetze Verbindungsmenu" msgstr "Ersetze Verbindungsmenu"
#: octoprint_klipper/templates/klipper_settings.jinja2:25 #: octoprint_klipper/templates/klipper_settings.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:27
msgid ""
"Hide 'Open Editor' Button\n"
"in the Connection Panel"
msgstr ""
"Verberge 'Öffne Editor' Schaltfläche\n"
"auf der Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:32
msgid "Show Short Messages" msgid "Show Short Messages"
msgstr "Zeige Kurzmeldungen" msgstr "Zeige Kurzmeldungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:27 #: octoprint_klipper/templates/klipper_settings.jinja2:34
#: octoprint_klipper/templates/klipper_settings.jinja2:28 #: octoprint_klipper/templates/klipper_settings.jinja2:35
msgid "on NavBar" msgid "on NavBar"
msgstr "auf Nav-leiste" msgstr "auf Nav-leiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:29 #: octoprint_klipper/templates/klipper_settings.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:30 #: octoprint_klipper/templates/klipper_settings.jinja2:37
msgid "on SideBar" msgid "on SideBar"
msgstr "auf Seitenleiste" msgstr "auf Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:34 #: octoprint_klipper/templates/klipper_settings.jinja2:41
#: octoprint_klipper/templates/klipper_settings.jinja2:36 #: octoprint_klipper/templates/klipper_settings.jinja2:43
msgid "Enable debug logging" msgid "Enable debug logging"
msgstr "Aktiviere Debugloging" msgstr "Aktiviere Debugloging"
#: octoprint_klipper/templates/klipper_settings.jinja2:41 #: octoprint_klipper/templates/klipper_settings.jinja2:48
#: octoprint_klipper/templates/klipper_settings.jinja2:50
msgid "Hide Error PopUps"
msgstr "Verberge Fehler PopUps"
#: octoprint_klipper/templates/klipper_settings.jinja2:55
msgid "Config Editor" msgid "Config Editor"
msgstr "Konfig Editor" msgstr "Konfig Editor"
#: octoprint_klipper/templates/klipper_settings.jinja2:43 #: octoprint_klipper/templates/klipper_settings.jinja2:57
#: octoprint_klipper/templates/klipper_settings.jinja2:44 #: octoprint_klipper/templates/klipper_settings.jinja2:58
msgid "Check parsing on save" msgid "Check parsing on save"
msgstr "Prüfe Syntax beim speichern" msgstr "Prüfe Syntax beim speichern"
#: octoprint_klipper/templates/klipper_settings.jinja2:46 #: octoprint_klipper/templates/klipper_settings.jinja2:60
#: octoprint_klipper/templates/klipper_settings.jinja2:48 #: octoprint_klipper/templates/klipper_settings.jinja2:62
msgid "Fontsize" msgid "Fontsize"
msgstr "Fontgröße" msgstr "Fontgröße"
#: octoprint_klipper/templates/klipper_settings.jinja2:53 #: octoprint_klipper/templates/klipper_settings.jinja2:67
msgid "Klipper Config Directory" msgid "Klipper Config Directory"
msgstr "Klipper Konfig Pfad" msgstr "Klipper Konfig Pfad"
#: octoprint_klipper/templates/klipper_settings.jinja2:59 #: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid ""
"The filename of the base config that Klipper is loading. (default is "
"printer.cfg)"
msgstr ""
"Der Dateiname der Haupt-Konfigurationsdatei, die Klipper läd.(Standard "
"ist printer.cfg)"
#: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid "Klipper Base Config Filename"
msgstr "Klipper Haupt-Konfigurationsdatei"
#: octoprint_klipper/templates/klipper_settings.jinja2:79
msgid "Klipper Log File" msgid "Klipper Log File"
msgstr "Klipper Logdatei" msgstr "Klipper Logdatei"
#: octoprint_klipper/templates/klipper_settings.jinja2:65 #: octoprint_klipper/templates/klipper_settings.jinja2:85
msgid "Configuration Reload Command" msgid "Configuration Restart Command"
msgstr "Konfiguration Neustart Befehl" msgstr "Konfiguration Neustart Befehl"
#: octoprint_klipper/templates/klipper_settings.jinja2:72 #: octoprint_klipper/templates/klipper_settings.jinja2:92
msgid "The command that is executed if you want to restart klipper." msgid "The command that is executed if you want to restart klipper."
msgstr "Der Befehl, der ausgeführt wird, um Klipper neu zu starten." msgstr "Der Befehl, der ausgeführt wird, um Klipper neu zu starten."
#: octoprint_klipper/templates/klipper_settings.jinja2:74 #: octoprint_klipper/templates/klipper_settings.jinja2:94
#: octoprint_klipper/templates/klipper_settings.jinja2:75 msgid "Restart klipper on editor save?"
msgid "Reload klipper on editor save?"
msgstr "Klipper neu starten nach speichern im Editor?" msgstr "Klipper neu starten nach speichern im Editor?"
#: octoprint_klipper/templates/klipper_settings.jinja2:80 #: octoprint_klipper/templates/klipper_settings.jinja2:95
msgid "Restart Klipper on editor save?"
msgstr "Klipper neu starten nach speichern im Editor?"
#: octoprint_klipper/templates/klipper_settings.jinja2:97
msgid "Show Confirmation before restarting Klipper?"
msgstr "Zeige Bestätigung vor Klipper Neustart?"
#: octoprint_klipper/templates/klipper_settings.jinja2:98
msgid "Confirmation before restarting Klipper?"
msgstr "Bestätigung vor Klipper Neustart?"
#: octoprint_klipper/templates/klipper_settings.jinja2:103
msgid "Config Backup" msgid "Config Backup"
msgstr "Konfig Sicherungen" msgstr "Konfig Sicherungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:82 #: octoprint_klipper/templates/klipper_settings.jinja2:105
#: octoprint_klipper/templates/klipper_settings.jinja2:83 #: octoprint_klipper/templates/klipper_settings.jinja2:106
msgid "Show Backups" msgid "Show Backups"
msgstr "Zeige Sicherungen" msgstr "Zeige Sicherungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:93 #: octoprint_klipper/templates/klipper_settings.jinja2:115
msgid "Add macro button to:" msgid "These macros are only meant to be used in OctoPrint."
msgstr "Makroschaltfläche anzeigen auf:" msgstr "Diese Makros sind nur für OctoPrint gedacht."
#: octoprint_klipper/templates/klipper_settings.jinja2:94 #: octoprint_klipper/templates/klipper_settings.jinja2:116
#: octoprint_klipper/templates/klipper_settings.jinja2:108 msgid "They are not the ones that can be defined in the printer.cfg."
msgstr "Es sind nicht die, die in der printer.cfg definiert werden können."
#: octoprint_klipper/templates/klipper_settings.jinja2:122
msgid "Add macro button to:"
msgstr "Zeige Makroschaltfläche auf:"
#: octoprint_klipper/templates/klipper_settings.jinja2:123
#: octoprint_klipper/templates/klipper_settings.jinja2:137
msgid "Klipper Tab" msgid "Klipper Tab"
msgstr "Klipper Reiter" msgstr "Klipper Reiter"
#: octoprint_klipper/templates/klipper_settings.jinja2:95 #: octoprint_klipper/templates/klipper_settings.jinja2:124
#: octoprint_klipper/templates/klipper_settings.jinja2:111 #: octoprint_klipper/templates/klipper_settings.jinja2:140
msgid "Sidebar" msgid "Sidebar"
msgstr "Seitenleiste" msgstr "Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:120 #: octoprint_klipper/templates/klipper_settings.jinja2:149
msgid "Command" msgid "Command"
msgstr "Befehl" msgstr "Befehl"
#: octoprint_klipper/templates/klipper_settings.jinja2:133 #: octoprint_klipper/templates/klipper_settings.jinja2:162
msgid "Add Macro" msgid "Add Macro"
msgstr "Makro hinzufügen" msgstr "Makro hinzufügen"
#: octoprint_klipper/templates/klipper_settings.jinja2:138 #: octoprint_klipper/templates/klipper_settings.jinja2:167
msgid "" msgid ""
"To show a dialog that asks for parameters you can write your macro like " "To show a dialog that asks for parameters you can write your macro like "
"in the following example:" "in the following example:"
msgstr "" msgstr ""
"Um ein Dialog anzeigen zu lassen, welches nach Parametern fragt, <br>\n" "Um ein Dialog anzeigen zu lassen, welches nach Parametern fragt, kann man"
"kann man ein Makro wie im nächsten Beispiel schreiben:" " ein Makro wie im nächsten Beispiel schreiben:"
#: octoprint_klipper/templates/klipper_settings.jinja2:154 #: octoprint_klipper/templates/klipper_settings.jinja2:183
msgid "" msgid ""
"This feature assists in manually leveling you print bed by moving the " "This feature assists in manually leveling your print bed by moving the "
"head to the defined points in\n" "head to the defined points in sequence.<br />If you use a piece of paper "
" sequence.<br />\n" "for leveling, set \"Probe Height\" to the paper thickness eg. \"0.1\"."
" If you use a piece of paper for leveling, set \"Probe Height\" "
"to the paper thickness eg. \"0.1\"."
msgstr "" msgstr ""
"Diese Funktion hilft beim Einstellen des Druckbettes, <br>\n" "Diese Funktion hilft beim Einstellen des Druckbettes, da es die "
"da es die angegebenen Punkte automatisch nacheinander anfährt.<br>\n" "angegebenen Punkte automatisch nacheinander anfährt. <br />Wenn man ein "
"Wenn man ein Papier zum messen nimmt, setzt man \"Messhöhe\" <br>\n" "Papier zum messen nimmt, setzt man \"Messhöhe\" auf die Papierstärke "
"auf die Papierstärke zBsp.: \"0.1\"." "zBsp.: \"0.1\"."
#: octoprint_klipper/templates/klipper_settings.jinja2:160 #: octoprint_klipper/templates/klipper_settings.jinja2:187
msgid "Probe Height" msgid "Probe Height"
msgstr "Messhöhe" msgstr "Messhöhe"
#: octoprint_klipper/templates/klipper_settings.jinja2:166 #: octoprint_klipper/templates/klipper_settings.jinja2:193
msgid "Z-height to probe at" msgid "Z-height to probe at"
msgstr "Höhe bei der gemessen wird" msgstr "Höhe bei der gemessen wird"
#: octoprint_klipper/templates/klipper_settings.jinja2:170 #: octoprint_klipper/templates/klipper_settings.jinja2:197
msgid "Probe Lift" msgid "Probe Lift"
msgstr "Höhe für Seitenbewegung" msgstr "Höhe für Seitenbewegung"
#: octoprint_klipper/templates/klipper_settings.jinja2:176 #: octoprint_klipper/templates/klipper_settings.jinja2:203
msgid "Lift Head by this amount before moving." msgid "Lift Head by this amount before moving."
msgstr "Hebe Druckkopf auf diese Höhe vor einer Seitenbewegung" msgstr "Hebe Druckkopf auf diese Höhe vor einer Seitenbewegung"
#: octoprint_klipper/templates/klipper_settings.jinja2:180 #: octoprint_klipper/templates/klipper_settings.jinja2:207
msgid "Probe Feedrate Z" msgid "Probe Feedrate Z"
msgstr "Geschwindigkeit Z" msgstr "Geschwindigkeit Z"
#: octoprint_klipper/templates/klipper_settings.jinja2:189 #: octoprint_klipper/templates/klipper_settings.jinja2:216
msgid "Feedrate X/Y" msgid "Feedrate X/Y"
msgstr "Geschwindigkeit X/Y" msgstr "Geschwindigkeit X/Y"
#: octoprint_klipper/templates/klipper_settings.jinja2:198 #: octoprint_klipper/templates/klipper_settings.jinja2:225
msgid "Probe Points" msgid "Probe Points"
msgstr "Messpunkte" msgstr "Messpunkte"
#: octoprint_klipper/templates/klipper_settings.jinja2:225 #: octoprint_klipper/templates/klipper_settings.jinja2:252
msgid "Add Point" msgid "Add Point"
msgstr "Füge Messpunkt hinzu" msgstr "Füge Messpunkt hinzu"
#: octoprint_klipper/templates/klipper_settings.jinja2:232 #: octoprint_klipper/templates/klipper_settings.jinja2:259
msgid "Config Files" msgid "Config Files"
msgstr "Konfig Dateien" msgstr "Konfig Dateien"
#: octoprint_klipper/templates/klipper_settings.jinja2:246 #: octoprint_klipper/templates/klipper_settings.jinja2:273
msgid "Add new File" msgid "Add new File"
msgstr "Erstelle neue Datei" msgstr "Erstelle neue Datei"
#: octoprint_klipper/templates/klipper_settings.jinja2:247 #: octoprint_klipper/templates/klipper_settings.jinja2:274
msgid "New File" msgid "New File"
msgstr "Neue Datei" msgstr "Neue Datei"
#: octoprint_klipper/templates/klipper_settings.jinja2:249 #: octoprint_klipper/templates/klipper_settings.jinja2:276
msgid "Open last config" msgid "Open last config"
msgstr "Öffne letzte Konfig" msgstr "Öffne letzte Konfig"
#: octoprint_klipper/templates/klipper_settings.jinja2:250 #: octoprint_klipper/templates/klipper_settings.jinja2:277
#, fuzzy
msgid "Open last Editor" msgid "Open last Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
#: octoprint_klipper/templates/klipper_settings.jinja2:300 #: octoprint_klipper/templates/klipper_settings.jinja2:303
msgid "Path to the config files."
msgstr "Pfad zu den Konfigurationsdateien"
#: octoprint_klipper/templates/klipper_settings.jinja2:329
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: octoprint_klipper/templates/klipper_settings.jinja2:329 #: octoprint_klipper/templates/klipper_settings.jinja2:358
msgid "Donate" msgid "Donate"
msgstr "Spenden" msgstr "Spenden"
@ -652,7 +780,7 @@ msgstr "Druckerprofil"
msgid "Connect" msgid "Connect"
msgstr "Verbinde" msgstr "Verbinde"
#: octoprint_klipper/templates/klipper_sidebar.jinja2:6 #: octoprint_klipper/templates/klipper_sidebar.jinja2:7
msgid "Open Editor" msgid "Open Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
@ -660,39 +788,31 @@ msgstr "Öffne Editor"
msgid "Messages" msgid "Messages"
msgstr "Nachricht" msgstr "Nachricht"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:11 #: octoprint_klipper/templates/klipper_tab_main.jinja2:6
#: octoprint_klipper/templates/klipper_tab_main.jinja2:12
msgid "Clear Log"
msgstr "Log löschen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:21
msgid "Query Klipper for its current status"
msgstr "Aktuellen Status von Klipper anfordern"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:22
msgid "Get Status"
msgstr "Statusabfrage"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Open the OctoKlipper Settings" msgid "Open the OctoKlipper Settings"
msgstr "Öffne die OctoKlipper Einstellungen" msgstr "Öffne die OctoKlipper Einstellungen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:16
#: octoprint_klipper/templates/klipper_tab_main.jinja2:17
msgid "Clear Log"
msgstr "Log löschen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Query Klipper for its current status"
msgstr "Aktuellen Status von Klipper anfordern"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:27 #: octoprint_klipper/templates/klipper_tab_main.jinja2:27
msgid "Open OctoKlipper Settings" msgid "Get Status"
msgstr "Öffne OctoKlipper Einstellungen" msgstr "Statusabfrage"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:31 #: octoprint_klipper/templates/klipper_tab_main.jinja2:31
msgid "Show the Editor" msgid "Show the Editor"
msgstr "Öffne Editor" msgstr "Öffne den Editor"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:33 #: octoprint_klipper/templates/klipper_tab_main.jinja2:33
msgid "Show Editor" msgid "Show Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Restart"
msgstr "Neustart"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:41 #: octoprint_klipper/templates/klipper_tab_main.jinja2:41
msgid "" msgid ""
"This will cause the host software to reload its config and perform an " "This will cause the host software to reload its config and perform an "

View File

@ -1,8 +1,96 @@
def log_info(self, message):
self._octoklipper_logger.info(message)
send_message(
self,
type = "log",
subtype = "info",
title = message,
payload = message
)
def log_debug(self, message):
self._octoklipper_logger.debug(message)
self._logger.info(message)
send_message(
self,
type = "console",
subtype = "debug",
title = message,
payload = message
)
def log_error(self, error):
self._octoklipper_logger.error(error)
self._logger.error(error)
send_message(
self,
type = "log",
subtype = "error",
title = error,
payload = error
)
def migrate_old_settings(self, settings):
'''
For Old settings
'''
migrate_settings(settings, "serialport", "connection", "port")
migrate_settings(settings, "replace_connection_panel", "connection", "replace_connection_panel")
migrate_settings(settings, "probeHeight", "probe", "height")
migrate_settings(settings, "probeLift", "probe", "lift")
migrate_settings(settings, "probeSpeedXy", "probe", "speed_xy")
migrate_settings(settings, "probeSpeedZ", "probe", "speed_z")
migrate_settings(settings, "configPath", "configuration", "configpath")
if settings.has(["probePoints"]):
points = settings.get(["probePoints"])
points_new = [dict(name="", x=int(p["x"]), y=int(p["y"]), z=0) for p in points]
settings.set(["probe", "points"], points_new)
settings.remove(["probePoints"])
def migrate_settings(self, settings, old, new, new2=""):
"""migrate setting to setting with an additional path
Args:
settings (any): instance of self._settings
old (str): the old setting to migrate
new (str): group or only new setting if there is no new2
new2 (str, optional): the new setting to migrate to. Defaults to "".
""" ''''''
if settings.has(old):
if new2 != "":
log_info(self, "migrate setting for '" + old + "' -> '" + new + "/" + new2 + "'")
settings.set([new, new2], settings.get(old))
else:
log_info(self, "migrate setting for '" + old + "' -> '" + new + "'")
settings.set([new], settings.get(old))
settings.remove(old)
def migrate_settings_configuration(self, settings, new, old):
"""migrate setting in path configuration to new name
:param settings: the class of the mixin
:type settings: class
:param new: new name
:type new: str
:param old: the old name
:type old: str
"""
if settings.has(["configuration", old]):
log_info(self, "migrate setting for 'configuration/" + old + "' -> 'configuration/" + new + "'")
settings.set(["configuration", new], settings.get(["configuration", old]))
settings.remove(["configuration", old])
def poll_status(self): def poll_status(self):
self._printer.commands("STATUS") self._printer.commands("STATUS")
def update_status(self, type, status): def update_status(self, subtype, status):
send_message(self, "status", type, status, status) send_message(
self,
type = "status",
subtype = subtype,
payload = status)
def file_exist(self, filepath): def file_exist(self, filepath):
''' '''
@ -10,8 +98,13 @@ def file_exist(self, filepath):
''' '''
from os import path from os import path
if not path.isfile(filepath): if not path.isfile(filepath):
send_message(self, "PopUp", "warning", "OctoKlipper Settings", log_debug(self, "File: <br />" + filepath + "<br /> does not exist!")
"File: <br />" + filepath + "<br /> does not exist!") send_message(
self,
type = "PopUp",
subtype = "warning",
title = "OctoKlipper Settings",
payload = "File: <br />" + filepath + "<br /> does not exist!")
return False return False
else: else:
return True return True
@ -24,7 +117,7 @@ def key_exist(dict, key1, key2):
else: else:
return True return True
def send_message(self, type, subtype, title, payload): def send_message(self, type, subtype, title = "", payload = ""):
""" """
Send Message over API to FrontEnd Send Message over API to FrontEnd
""" """

View File

@ -19,7 +19,7 @@ plugin_package = "octoprint_klipper"
plugin_name = "OctoKlipper" plugin_name = "OctoKlipper"
plugin_version = "0.3.8.3" plugin_version = "0.3.9.3"
plugin_description = """A plugin for OctoPrint to configure,control and monitor the Klipper 3D printer software.""" plugin_description = """A plugin for OctoPrint to configure,control and monitor the Klipper 3D printer software."""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OctoKlipper 0.3.8.2\n" "Project-Id-Version: OctoKlipper 0.3.8.2\n"
"Report-Msgid-Bugs-To: i18n@octoprint.org\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n"
"POT-Creation-Date: 2021-09-17 08:18+0200\n" "POT-Creation-Date: 2021-11-21 00:46+0100\n"
"PO-Revision-Date: 2021-05-13 17:32+0200\n" "PO-Revision-Date: 2021-05-13 17:32+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n" "Language: de\n"
@ -27,37 +27,74 @@ msgstr "Erlaubt Klipper zu konfigurieren"
msgid "Allows to use klipper macros" msgid "Allows to use klipper macros"
msgstr "Erlaubt Makros zu benutzen" msgstr "Erlaubt Makros zu benutzen"
#: octoprint_klipper/__init__.py:608 #: octoprint_klipper/__init__.py:599
msgid "Restart Klipper" msgid "Restart Klipper"
msgstr "Neustart Klipper" msgstr "Klipper Neustart"
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "You are about to restart Klipper!" msgid "You are about to restart Klipper!"
msgstr "Sie sind dabei Klipper neu zu starten!" msgstr "Sie sind dabei Klipper neu zu starten!"
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "This will stop ongoing prints!" msgid "This will stop ongoing prints!"
msgstr "Dies wird angehende Aufträge abbrechen!" msgstr "Dies wird laufende Aufträge abbrechen!"
#: octoprint_klipper/cfgUtils.py:95 #: octoprint_klipper/cfgUtils.py:86
msgid "Error: Klipper config file not found at:"
msgstr "Fehler: Klipper Konfigurationsdatei nicht gefunden:"
#: octoprint_klipper/cfgUtils.py:89
msgid "IOError:"
msgstr "IOFehler"
#: octoprint_klipper/cfgUtils.py:96
msgid "Decode Error:"
msgstr "Dekodierungsfehler:"
#: octoprint_klipper/cfgUtils.py:100
msgid "Please convert your config files to utf-8!"
msgstr "Bitte die Konfigurationsdateien nach utf-8 konvertieren!"
#: octoprint_klipper/cfgUtils.py:102
msgid ""
"Or you can also paste your config \n"
"into the Editor and save it."
msgstr ""
"Sie können auch die Konfiguration \n"
"in den Editor einfügen und dann speichern."
#: octoprint_klipper/cfgUtils.py:109
msgid "File not found!" msgid "File not found!"
msgstr "Datei nicht gefunden!" msgstr "Datei nicht gefunden!"
#: octoprint_klipper/static/js/klipper.js:259 #: octoprint_klipper/static/js/klipper.js:220
#: octoprint_klipper/templates/klipper_sidebar.jinja2:13
msgid "Go to OctoKlipper Tab"
msgstr "Gehe zum OctoKlipper Reiter"
#: octoprint_klipper/static/js/klipper.js:340
msgid "Restarted Klipper"
msgstr "Klipper neu gestartet"
#: octoprint_klipper/static/js/klipper.js:348
msgid "All ongoing Prints will be stopped!" msgid "All ongoing Prints will be stopped!"
msgstr "Alle laufende Drucke werden gestoppt!" msgstr "Alle laufende Drucke werden gestoppt!"
#: octoprint_klipper/static/js/klipper.js:262 #: octoprint_klipper/static/js/klipper.js:353
msgid "Klipper restart?" msgid "Restart Klipper?"
msgstr "Klipper neu starten?" msgstr "Klipper neu starten?"
#: octoprint_klipper/static/js/klipper.js:264 #: octoprint_klipper/static/js/klipper.js:355
#: octoprint_klipper/static/js/klipper_backup.js:159 #: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Proceed" msgid "Restart"
msgstr "Weiter" msgstr "Neustart"
#: octoprint_klipper/static/js/klipper.js:355
msgid "Restart and don't ask this again."
msgstr "Neu starten und dies nicht wieder nachfragen."
#: octoprint_klipper/static/js/klipper_backup.js:126 #: octoprint_klipper/static/js/klipper_backup.js:126
#: octoprint_klipper/static/js/klipper_settings.js:124 #: octoprint_klipper/static/js/klipper_settings.js:134
#, python-format #, python-format
msgid "" msgid ""
"Failed to remove config %(name)s.</p><p>Please consult octoprint.log for " "Failed to remove config %(name)s.</p><p>Please consult octoprint.log for "
@ -67,13 +104,13 @@ msgstr ""
"nachsehen für weitere Details.</p>" "nachsehen für weitere Details.</p>"
#: octoprint_klipper/static/js/klipper_backup.js:129 #: octoprint_klipper/static/js/klipper_backup.js:129
#: octoprint_klipper/static/js/klipper_settings.js:127 #: octoprint_klipper/static/js/klipper_settings.js:137
msgid "Could not remove config" msgid "Could not remove config"
msgstr "Konnte Konfiguration nicht löschen" msgstr "Konnte Konfiguration nicht löschen"
#: octoprint_klipper/static/js/klipper_backup.js:138 #: octoprint_klipper/static/js/klipper_backup.js:138
#, python-format #, python-format
msgid "You are about to delete backuped config file \"%(name)s\"." msgid "You are about to delete backed config file \"%(name)s\"."
msgstr "Sie sind dabei die gesicherte Konfigurationsdatei \"%(name)s\" zu löschen." msgstr "Sie sind dabei die gesicherte Konfigurationsdatei \"%(name)s\" zu löschen."
#: octoprint_klipper/static/js/klipper_backup.js:154 #: octoprint_klipper/static/js/klipper_backup.js:154
@ -86,16 +123,21 @@ msgstr ""
msgid "Are you sure you want to restore now?" msgid "Are you sure you want to restore now?"
msgstr "Sind sie sicher jetzt wiederherzustellen?" msgstr "Sind sie sicher jetzt wiederherzustellen?"
#: octoprint_klipper/static/js/klipper_backup.js:159
#: octoprint_klipper/static/js/klipper_editor.js:173
msgid "Proceed"
msgstr "Weiter"
#: octoprint_klipper/static/js/klipper_backup.js:184 #: octoprint_klipper/static/js/klipper_backup.js:184
#, python-format #, python-format
msgid "You are about to restore %(count)d backuped config files." msgid "You are about to restore %(count)d backed config files."
msgstr "" msgstr ""
"Sie sind dabei %(count)d gesicherte Konfigurationsdateien " "Sie sind dabei %(count)d gesicherte Konfigurationsdateien "
"wiederherzustellen." "wiederherzustellen."
#: octoprint_klipper/static/js/klipper_backup.js:199 #: octoprint_klipper/static/js/klipper_backup.js:199
#, python-format #, python-format
msgid "You are about to delete %(count)d backuped config files." msgid "You are about to delete %(count)d backed config files."
msgstr "Sie sind dabei %(count)d gesicherte Konfigurationsdateien zu löschen." msgstr "Sie sind dabei %(count)d gesicherte Konfigurationsdateien zu löschen."
#: octoprint_klipper/static/js/klipper_backup.js:209 #: octoprint_klipper/static/js/klipper_backup.js:209
@ -104,7 +146,7 @@ msgstr "Stelle Klipper Konfigdatei wieder her"
#: octoprint_klipper/static/js/klipper_backup.js:211 #: octoprint_klipper/static/js/klipper_backup.js:211
#, python-format #, python-format
msgid "Restoring %(count)d backuped config files..." msgid "Restoring %(count)d backed config files..."
msgstr "Stelle %(count)d gesicherte Konfigurationsdateien wieder her." msgstr "Stelle %(count)d gesicherte Konfigurationsdateien wieder her."
#: octoprint_klipper/static/js/klipper_backup.js:220 #: octoprint_klipper/static/js/klipper_backup.js:220
@ -123,95 +165,141 @@ msgstr "Lösche gesicherte Dateien"
#: octoprint_klipper/static/js/klipper_backup.js:265 #: octoprint_klipper/static/js/klipper_backup.js:265
#, python-format #, python-format
msgid "Deleting %(count)d backup files..." msgid "Deleting %(count)d backed files..."
msgstr "Lösche %(count)d gesicherte Konfigurationsdateien..." msgstr "Lösche %(count)d gesicherte Konfigurationsdateien..."
#: octoprint_klipper/static/js/klipper_backup.js:273 #: octoprint_klipper/static/js/klipper_backup.js:273
#: octoprint_klipper/static/js/klipper_settings.js:183 #: octoprint_klipper/static/js/klipper_settings.js:193
#, python-format #, python-format
msgid "Deleted %(filename)s..." msgid "Deleted %(filename)s..."
msgstr "%(filename)s gelöscht..." msgstr "%(filename)s gelöscht..."
#: octoprint_klipper/static/js/klipper_backup.js:279 #: octoprint_klipper/static/js/klipper_backup.js:279
#: octoprint_klipper/static/js/klipper_settings.js:193 #: octoprint_klipper/static/js/klipper_settings.js:203
#, python-format #, python-format
msgid "Deleting of %(filename)s failed, continuing..." msgid "Deleting of %(filename)s failed, continuing..."
msgstr "Löschung von Datei %(filename)s gescheitert, setze fort... " msgstr "Löschung von Datei %(filename)s gescheitert, setze fort... "
#: octoprint_klipper/static/js/klipper_editor.js:61 #: octoprint_klipper/static/js/klipper_editor.js:79
msgid "Closing without saving"
msgstr "Schließen ohne zu Speichern?"
#: octoprint_klipper/static/js/klipper_editor.js:80
msgid "Your file seems to have changed." msgid "Your file seems to have changed."
msgstr "Datei scheint geändert worden zu sein." msgstr "Datei scheint geändert worden zu sein."
#: octoprint_klipper/static/js/klipper_editor.js:64 #: octoprint_klipper/static/js/klipper_editor.js:82
msgid "Do you really want to close it?" msgid "Do you really want to close it?"
msgstr "Wollen sie wirklich schliessen?" msgstr "Wollen sie wirklich schließen?"
#: octoprint_klipper/static/js/klipper_editor.js:65 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "No" #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgstr "Nein" msgid "Close"
msgstr "Schließen"
#: octoprint_klipper/static/js/klipper_editor.js:66 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "Yes" msgid "Do not close"
msgstr "Ja" msgstr "Nicht schließen"
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:83
#: octoprint_klipper/static/js/klipper_editor.js:134 #: octoprint_klipper/templates/klipper_editor.jinja2:38
msgid "Save & Close"
msgstr "Speichern & Schließen"
#: octoprint_klipper/static/js/klipper_editor.js:168
msgid "Reload Configfile after SAVE_CONFIG?"
msgstr "Konfiguration neuladen nach SAVE_CONFIG?"
#: octoprint_klipper/static/js/klipper_editor.js:171
msgid "Externally changed config"
msgstr "Extern geänderte Konfiguration"
#: octoprint_klipper/static/js/klipper_editor.js:183
msgid "Your configuration seems to be faulty."
msgstr "Ihre Konfiguration sieht fehlerhaft aus."
#: octoprint_klipper/static/js/klipper_editor.js:187
msgid "Save faulty Configuration?"
msgstr "Speichere fehlerhafte Konfiguration?"
#: octoprint_klipper/static/js/klipper_editor.js:189
msgid "Do not save!"
msgstr "Datei nicht speichern!"
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway!"
msgstr "Speichere trotzdem!"
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway and don't ask this again."
msgstr "Speichere trotzdem und dies nicht wieder nachfragen."
#: octoprint_klipper/static/js/klipper_editor.js:214
msgid "SyntaxCheck" msgid "SyntaxCheck"
msgstr "Syntaxprüfung" msgstr "Syntaxprüfung"
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:214
#, fuzzy
msgid "SyntaxCheck OK" msgid "SyntaxCheck OK"
msgstr "Syntaxprüfung OK" msgstr "Syntaxprüfung OK"
#: octoprint_klipper/static/js/klipper_editor.js:130 #: octoprint_klipper/static/js/klipper_editor.js:249
msgid "Syntax NOK" msgid "Faulty config not saved!"
msgstr "Syntax ist nicht ok!" msgstr "Fehlerhafte Datei nicht gespeichert!"
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:251
#: octoprint_klipper/static/js/klipper_editor.js:161 #: octoprint_klipper/static/js/klipper_editor.js:275
#: octoprint_klipper/static/js/klipper_editor.js:393
#: octoprint_klipper/static/js/klipper_editor.js:406
#: octoprint_klipper/templates/klipper_editor.jinja2:40 #: octoprint_klipper/templates/klipper_editor.jinja2:40
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save Config" msgid "Save Config"
msgstr "Speichere Konfig" msgstr "Speichere Konfig"
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:273
msgid "File saved." #: octoprint_klipper/static/js/klipper_editor.js:349
msgstr "Datei gespeichert." msgid "No filename set"
msgstr "Dateiname nicht angegeben"
#: octoprint_klipper/static/js/klipper_editor.js:157 #: octoprint_klipper/static/js/klipper_editor.js:325
#, fuzzy #: octoprint_klipper/static/js/klipper_editor.js:343
msgid "File not saved!" #: octoprint_klipper/static/js/klipper_editor.js:351
msgstr "Datei nicht gespeichert."
#: octoprint_klipper/static/js/klipper_editor.js:226
#: octoprint_klipper/static/js/klipper_editor.js:243
msgid "Reload File" msgid "Reload File"
msgstr "Datei neuladen" msgstr "Datei neuladen"
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "Reload Config" msgid "Reload Config"
msgstr "Datei neuladen" msgstr "Datei neuladen"
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "File reloaded." msgid "File reloaded."
msgstr "Datei neugeladen." msgstr "Datei neugeladen."
#: octoprint_klipper/static/js/klipper_settings.js:136 #: octoprint_klipper/static/js/klipper_editor.js:393
msgid "File saved."
msgstr "Datei gespeichert."
#: octoprint_klipper/static/js/klipper_editor.js:404
msgid "File not saved!"
msgstr "Datei nicht gespeichert."
#: octoprint_klipper/static/js/klipper_settings.js:103
msgid "Path: "
msgstr "Pfad: "
#: octoprint_klipper/static/js/klipper_settings.js:146
#, python-format #, python-format
msgid "You are about to delete config file \"%(name)s\"." msgid "You are about to delete config file \"%(name)s\"."
msgstr "Sie sind dabei Konfigurationsdatei \"%(name)s\" zu löschen." msgstr "Sie sind dabei Konfigurationsdatei \"%(name)s\" zu löschen."
#: octoprint_klipper/static/js/klipper_settings.js:163 #: octoprint_klipper/static/js/klipper_settings.js:173
#, python-format #, python-format
msgid "You are about to delete %(count)d config files." msgid "You are about to delete %(count)d config files."
msgstr "Sie sind dabei %(count)d Konfigurationsdateien zu löschen." msgstr "Sie sind dabei %(count)d Konfigurationsdateien zu löschen."
#: octoprint_klipper/static/js/klipper_settings.js:173 #: octoprint_klipper/static/js/klipper_settings.js:183
msgid "Deleting config files" msgid "Deleting config files"
msgstr "Lösche Konfigurationsdateien" msgstr "Lösche Konfigurationsdateien"
#: octoprint_klipper/static/js/klipper_settings.js:174 #: octoprint_klipper/static/js/klipper_settings.js:184
#, python-format #, python-format
msgid "Deleting %(count)d config files..." msgid "Deleting %(count)d config files..."
msgstr "Lösche %(count)d Konfigurationsdateien..." msgstr "Lösche %(count)d Konfigurationsdateien..."
@ -221,27 +309,27 @@ msgid "Backups"
msgstr "Sicherungen" msgstr "Sicherungen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17
#: octoprint_klipper/templates/klipper_settings.jinja2:240 #: octoprint_klipper/templates/klipper_settings.jinja2:267
msgid "Select all on this page" msgid "Select all on this page"
msgstr "Wähle alle auf dieser Seite aus" msgstr "Wähle alle auf dieser Seite aus"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20
#: octoprint_klipper/templates/klipper_settings.jinja2:241 #: octoprint_klipper/templates/klipper_settings.jinja2:268
msgid "Select all" msgid "Select all"
msgstr "Alles Auswählen" msgstr "Alles Auswählen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:243 #: octoprint_klipper/templates/klipper_settings.jinja2:270
msgid "Clear selection" msgid "Clear selection"
msgstr "Auswahl zurücksetzen" msgstr "Auswahl zurücksetzen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29
#: octoprint_klipper/templates/klipper_settings.jinja2:252 #: octoprint_klipper/templates/klipper_settings.jinja2:279
msgid "Refresh file list" msgid "Refresh file list"
msgstr "Aktualisiere Dateiliste" msgstr "Aktualisiere Dateiliste"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30
#: octoprint_klipper/templates/klipper_settings.jinja2:253 #: octoprint_klipper/templates/klipper_settings.jinja2:280
msgid "Refresh Files" msgid "Refresh Files"
msgstr "Aktualisieren" msgstr "Aktualisieren"
@ -250,55 +338,55 @@ msgid "Restore selected"
msgstr "Ausgewählte wiederherstellen" msgstr "Ausgewählte wiederherstellen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:256 #: octoprint_klipper/templates/klipper_settings.jinja2:283
msgid "Delete selected" msgid "Delete selected"
msgstr "Ausgewählte löschen" msgstr "Ausgewählte löschen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46
#: octoprint_klipper/templates/klipper_settings.jinja2:263 #: octoprint_klipper/templates/klipper_settings.jinja2:291
msgid "Sort by name" msgid "Sort by name"
msgstr "Sortiere nach Name" msgstr "Sortiere nach Name"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47
#: octoprint_klipper/templates/klipper_settings.jinja2:264 #: octoprint_klipper/templates/klipper_settings.jinja2:292
msgid "ascending" msgid "ascending"
msgstr "aufwärts" msgstr "aufsteigend"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50
#: octoprint_klipper/templates/klipper_settings.jinja2:266 #: octoprint_klipper/templates/klipper_settings.jinja2:294
msgid "Sort by date" msgid "Sort by date"
msgstr "Sortiere nach Datum" msgstr "Sortiere nach Datum"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55
#: octoprint_klipper/templates/klipper_settings.jinja2:267 #: octoprint_klipper/templates/klipper_settings.jinja2:295
#: octoprint_klipper/templates/klipper_settings.jinja2:270 #: octoprint_klipper/templates/klipper_settings.jinja2:298
msgid "descending" msgid "descending"
msgstr "abwärts" msgstr "absteigend"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54
#: octoprint_klipper/templates/klipper_settings.jinja2:269 #: octoprint_klipper/templates/klipper_settings.jinja2:297
msgid "Sort by file size" msgid "Sort by file size"
msgstr "Sortie nach Dateigröße" msgstr "Sortiere nach Dateigröße"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65
#: octoprint_klipper/templates/klipper_settings.jinja2:101 #: octoprint_klipper/templates/klipper_settings.jinja2:130
#: octoprint_klipper/templates/klipper_settings.jinja2:280 #: octoprint_klipper/templates/klipper_settings.jinja2:309
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66
#: octoprint_klipper/templates/klipper_settings.jinja2:281 #: octoprint_klipper/templates/klipper_settings.jinja2:310
msgid "Size" msgid "Size"
msgstr "Größe" msgstr "Größe"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67
#: octoprint_klipper/templates/klipper_settings.jinja2:282 #: octoprint_klipper/templates/klipper_settings.jinja2:311
msgid "Action" msgid "Action"
msgstr "Aktion" msgstr "Aktion"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78
#: octoprint_klipper/templates/klipper_settings.jinja2:294 #: octoprint_klipper/templates/klipper_settings.jinja2:323
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
@ -307,7 +395,7 @@ msgid "Restore"
msgstr "Wiederherstellen" msgstr "Wiederherstellen"
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84
#: octoprint_klipper/templates/klipper_settings.jinja2:297 #: octoprint_klipper/templates/klipper_settings.jinja2:326
msgid "Download" msgid "Download"
msgstr "Runterladen" msgstr "Runterladen"
@ -334,14 +422,17 @@ msgstr "Datei neuladen"
#: octoprint_klipper/templates/klipper_editor.jinja2:34 #: octoprint_klipper/templates/klipper_editor.jinja2:34
#: octoprint_klipper/templates/klipper_editor.jinja2:35 #: octoprint_klipper/templates/klipper_editor.jinja2:35
msgid "Reload last version"
msgstr "Lade letzte Version"
#: octoprint_klipper/templates/klipper_editor.jinja2:37
#: octoprint_klipper/templates/klipper_editor.jinja2:38
msgid "Check Syntax" msgid "Check Syntax"
msgstr "Syntax prüfen" msgstr "Syntax prüfen"
#: octoprint_klipper/templates/klipper_editor.jinja2:37
msgid "Save Config and Close"
msgstr "Speichern und schließen"
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save"
msgstr "Speichern"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4
msgid "Performance Graph" msgid "Performance Graph"
msgstr "Performancediagramm" msgstr "Performancediagramm"
@ -362,10 +453,6 @@ msgstr "Auswählen"
msgid "Analyze Log" msgid "Analyze Log"
msgstr "Log analysieren" msgstr "Log analysieren"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgid "Close"
msgstr "Schließen"
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35
msgid "Depending on the size of the log file this might take a while." msgid "Depending on the size of the log file this might take a while."
msgstr "Abhängig von der Größe der Logdatei kann es etwas dauern." msgstr "Abhängig von der Größe der Logdatei kann es etwas dauern."
@ -395,11 +482,6 @@ msgstr "Nächster"
msgid "Stop" msgid "Stop"
msgstr "Stop" msgstr "Stop"
#: octoprint_klipper/templates/klipper_navbar.jinja2:2
#: octoprint_klipper/templates/klipper_sidebar.jinja2:11
msgid "Go to OctoKlipper Tab"
msgstr "Gehe zum OctoKlipper Reiter"
#: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4
#: octoprint_klipper/templates/klipper_tab_main.jinja2:63 #: octoprint_klipper/templates/klipper_tab_main.jinja2:63
msgid "Coordinate Offset" msgid "Coordinate Offset"
@ -455,7 +537,7 @@ msgid "Basic"
msgstr "Haupteinstellungen" msgstr "Haupteinstellungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:4 #: octoprint_klipper/templates/klipper_settings.jinja2:4
#: octoprint_klipper/templates/klipper_sidebar.jinja2:16 #: octoprint_klipper/templates/klipper_sidebar.jinja2:20
#: octoprint_klipper/templates/klipper_tab_main.jinja2:72 #: octoprint_klipper/templates/klipper_tab_main.jinja2:72
msgid "Macros" msgid "Macros"
msgstr "Makros" msgstr "Makros"
@ -478,169 +560,215 @@ msgid "Replace Connection Panel"
msgstr "Ersetze Verbindungsmenu" msgstr "Ersetze Verbindungsmenu"
#: octoprint_klipper/templates/klipper_settings.jinja2:25 #: octoprint_klipper/templates/klipper_settings.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:27
msgid ""
"Hide 'Open Editor' Button\n"
"in the Connection Panel"
msgstr ""
"Verberge 'Öffne Editor' Schaltfläche\n"
"auf der Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:32
msgid "Show Short Messages" msgid "Show Short Messages"
msgstr "Zeige Kurzmeldungen" msgstr "Zeige Kurzmeldungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:27 #: octoprint_klipper/templates/klipper_settings.jinja2:34
#: octoprint_klipper/templates/klipper_settings.jinja2:28 #: octoprint_klipper/templates/klipper_settings.jinja2:35
msgid "on NavBar" msgid "on NavBar"
msgstr "auf Nav-leiste" msgstr "auf Nav-leiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:29 #: octoprint_klipper/templates/klipper_settings.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:30 #: octoprint_klipper/templates/klipper_settings.jinja2:37
msgid "on SideBar" msgid "on SideBar"
msgstr "auf Seitenleiste" msgstr "auf Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:34 #: octoprint_klipper/templates/klipper_settings.jinja2:41
#: octoprint_klipper/templates/klipper_settings.jinja2:36 #: octoprint_klipper/templates/klipper_settings.jinja2:43
msgid "Enable debug logging" msgid "Enable debug logging"
msgstr "Aktiviere Debugloging" msgstr "Aktiviere Debugloging"
#: octoprint_klipper/templates/klipper_settings.jinja2:41 #: octoprint_klipper/templates/klipper_settings.jinja2:48
#: octoprint_klipper/templates/klipper_settings.jinja2:50
msgid "Hide Error PopUps"
msgstr "Verberge Fehler PopUps"
#: octoprint_klipper/templates/klipper_settings.jinja2:55
msgid "Config Editor" msgid "Config Editor"
msgstr "Konfig Editor" msgstr "Konfig Editor"
#: octoprint_klipper/templates/klipper_settings.jinja2:43 #: octoprint_klipper/templates/klipper_settings.jinja2:57
#: octoprint_klipper/templates/klipper_settings.jinja2:44 #: octoprint_klipper/templates/klipper_settings.jinja2:58
msgid "Check parsing on save" msgid "Check parsing on save"
msgstr "Prüfe Syntax beim speichern" msgstr "Prüfe Syntax beim speichern"
#: octoprint_klipper/templates/klipper_settings.jinja2:46 #: octoprint_klipper/templates/klipper_settings.jinja2:60
#: octoprint_klipper/templates/klipper_settings.jinja2:48 #: octoprint_klipper/templates/klipper_settings.jinja2:62
msgid "Fontsize" msgid "Fontsize"
msgstr "Fontgröße" msgstr "Fontgröße"
#: octoprint_klipper/templates/klipper_settings.jinja2:53 #: octoprint_klipper/templates/klipper_settings.jinja2:67
msgid "Klipper Config Directory" msgid "Klipper Config Directory"
msgstr "Klipper Konfig Pfad" msgstr "Klipper Konfig Pfad"
#: octoprint_klipper/templates/klipper_settings.jinja2:59 #: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid ""
"The filename of the base config that Klipper is loading. (default is "
"printer.cfg)"
msgstr ""
"Der Dateiname der Haupt-Konfigurationsdatei, die Klipper läd.(Standard "
"ist printer.cfg)"
#: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid "Klipper Base Config Filename"
msgstr "Klipper Haupt-Konfigurationsdatei"
#: octoprint_klipper/templates/klipper_settings.jinja2:79
msgid "Klipper Log File" msgid "Klipper Log File"
msgstr "Klipper Logdatei" msgstr "Klipper Logdatei"
#: octoprint_klipper/templates/klipper_settings.jinja2:65 #: octoprint_klipper/templates/klipper_settings.jinja2:85
msgid "Configuration Reload Command" msgid "Configuration Restart Command"
msgstr "Konfiguration Neustart Befehl" msgstr "Konfiguration Neustart Befehl"
#: octoprint_klipper/templates/klipper_settings.jinja2:72 #: octoprint_klipper/templates/klipper_settings.jinja2:92
msgid "The command that is executed if you want to restart klipper." msgid "The command that is executed if you want to restart klipper."
msgstr "Der Befehl, der ausgeführt wird, um Klipper neu zu starten." msgstr "Der Befehl, der ausgeführt wird, um Klipper neu zu starten."
#: octoprint_klipper/templates/klipper_settings.jinja2:74 #: octoprint_klipper/templates/klipper_settings.jinja2:94
#: octoprint_klipper/templates/klipper_settings.jinja2:75 msgid "Restart klipper on editor save?"
msgid "Reload klipper on editor save?"
msgstr "Klipper neu starten nach speichern im Editor?" msgstr "Klipper neu starten nach speichern im Editor?"
#: octoprint_klipper/templates/klipper_settings.jinja2:80 #: octoprint_klipper/templates/klipper_settings.jinja2:95
msgid "Restart Klipper on editor save?"
msgstr "Klipper neu starten nach speichern im Editor?"
#: octoprint_klipper/templates/klipper_settings.jinja2:97
msgid "Show Confirmation before restarting Klipper?"
msgstr "Zeige Bestätigung vor Klipper Neustart?"
#: octoprint_klipper/templates/klipper_settings.jinja2:98
msgid "Confirmation before restarting Klipper?"
msgstr "Bestätigung vor Klipper Neustart?"
#: octoprint_klipper/templates/klipper_settings.jinja2:103
msgid "Config Backup" msgid "Config Backup"
msgstr "Konfig Sicherungen" msgstr "Konfig Sicherungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:82 #: octoprint_klipper/templates/klipper_settings.jinja2:105
#: octoprint_klipper/templates/klipper_settings.jinja2:83 #: octoprint_klipper/templates/klipper_settings.jinja2:106
msgid "Show Backups" msgid "Show Backups"
msgstr "Zeige Sicherungen" msgstr "Zeige Sicherungen"
#: octoprint_klipper/templates/klipper_settings.jinja2:93 #: octoprint_klipper/templates/klipper_settings.jinja2:115
msgid "Add macro button to:" msgid "These macros are only meant to be used in OctoPrint."
msgstr "Makroschaltfläche anzeigen auf:" msgstr "Diese Makros sind nur für OctoPrint gedacht."
#: octoprint_klipper/templates/klipper_settings.jinja2:94 #: octoprint_klipper/templates/klipper_settings.jinja2:116
#: octoprint_klipper/templates/klipper_settings.jinja2:108 msgid "They are not the ones that can be defined in the printer.cfg."
msgstr "Es sind nicht die, die in der printer.cfg definiert werden können."
#: octoprint_klipper/templates/klipper_settings.jinja2:122
msgid "Add macro button to:"
msgstr "Zeige Makroschaltfläche auf:"
#: octoprint_klipper/templates/klipper_settings.jinja2:123
#: octoprint_klipper/templates/klipper_settings.jinja2:137
msgid "Klipper Tab" msgid "Klipper Tab"
msgstr "Klipper Reiter" msgstr "Klipper Reiter"
#: octoprint_klipper/templates/klipper_settings.jinja2:95 #: octoprint_klipper/templates/klipper_settings.jinja2:124
#: octoprint_klipper/templates/klipper_settings.jinja2:111 #: octoprint_klipper/templates/klipper_settings.jinja2:140
msgid "Sidebar" msgid "Sidebar"
msgstr "Seitenleiste" msgstr "Seitenleiste"
#: octoprint_klipper/templates/klipper_settings.jinja2:120 #: octoprint_klipper/templates/klipper_settings.jinja2:149
msgid "Command" msgid "Command"
msgstr "Befehl" msgstr "Befehl"
#: octoprint_klipper/templates/klipper_settings.jinja2:133 #: octoprint_klipper/templates/klipper_settings.jinja2:162
msgid "Add Macro" msgid "Add Macro"
msgstr "Makro hinzufügen" msgstr "Makro hinzufügen"
#: octoprint_klipper/templates/klipper_settings.jinja2:138 #: octoprint_klipper/templates/klipper_settings.jinja2:167
msgid "" msgid ""
"To show a dialog that asks for parameters you can write your macro like " "To show a dialog that asks for parameters you can write your macro like "
"in the following example:" "in the following example:"
msgstr "" msgstr ""
"Um ein Dialog anzeigen zu lassen, welches nach Parametern fragt, <br>\n" "Um ein Dialog anzeigen zu lassen, welches nach Parametern fragt, kann man"
"kann man ein Makro wie im nächsten Beispiel schreiben:" " ein Makro wie im nächsten Beispiel schreiben:"
#: octoprint_klipper/templates/klipper_settings.jinja2:154 #: octoprint_klipper/templates/klipper_settings.jinja2:183
msgid "" msgid ""
"This feature assists in manually leveling you print bed by moving the " "This feature assists in manually leveling your print bed by moving the "
"head to the defined points in\n" "head to the defined points in sequence.<br />If you use a piece of paper "
" sequence.<br />\n" "for leveling, set \"Probe Height\" to the paper thickness eg. \"0.1\"."
" If you use a piece of paper for leveling, set \"Probe Height\" "
"to the paper thickness eg. \"0.1\"."
msgstr "" msgstr ""
"Diese Funktion hilft beim Einstellen des Druckbettes, <br>\n" "Diese Funktion hilft beim Einstellen des Druckbettes, da es die "
"da es die angegebenen Punkte automatisch nacheinander anfährt.<br>\n" "angegebenen Punkte automatisch nacheinander anfährt. <br />Wenn man ein "
"Wenn man ein Papier zum messen nimmt, setzt man \"Messhöhe\" <br>\n" "Papier zum messen nimmt, setzt man \"Messhöhe\" auf die Papierstärke "
"auf die Papierstärke zBsp.: \"0.1\"." "zBsp.: \"0.1\"."
#: octoprint_klipper/templates/klipper_settings.jinja2:160 #: octoprint_klipper/templates/klipper_settings.jinja2:187
msgid "Probe Height" msgid "Probe Height"
msgstr "Messhöhe" msgstr "Messhöhe"
#: octoprint_klipper/templates/klipper_settings.jinja2:166 #: octoprint_klipper/templates/klipper_settings.jinja2:193
msgid "Z-height to probe at" msgid "Z-height to probe at"
msgstr "Höhe bei der gemessen wird" msgstr "Höhe bei der gemessen wird"
#: octoprint_klipper/templates/klipper_settings.jinja2:170 #: octoprint_klipper/templates/klipper_settings.jinja2:197
msgid "Probe Lift" msgid "Probe Lift"
msgstr "Höhe für Seitenbewegung" msgstr "Höhe für Seitenbewegung"
#: octoprint_klipper/templates/klipper_settings.jinja2:176 #: octoprint_klipper/templates/klipper_settings.jinja2:203
msgid "Lift Head by this amount before moving." msgid "Lift Head by this amount before moving."
msgstr "Hebe Druckkopf auf diese Höhe vor einer Seitenbewegung" msgstr "Hebe Druckkopf auf diese Höhe vor einer Seitenbewegung"
#: octoprint_klipper/templates/klipper_settings.jinja2:180 #: octoprint_klipper/templates/klipper_settings.jinja2:207
msgid "Probe Feedrate Z" msgid "Probe Feedrate Z"
msgstr "Geschwindigkeit Z" msgstr "Geschwindigkeit Z"
#: octoprint_klipper/templates/klipper_settings.jinja2:189 #: octoprint_klipper/templates/klipper_settings.jinja2:216
msgid "Feedrate X/Y" msgid "Feedrate X/Y"
msgstr "Geschwindigkeit X/Y" msgstr "Geschwindigkeit X/Y"
#: octoprint_klipper/templates/klipper_settings.jinja2:198 #: octoprint_klipper/templates/klipper_settings.jinja2:225
msgid "Probe Points" msgid "Probe Points"
msgstr "Messpunkte" msgstr "Messpunkte"
#: octoprint_klipper/templates/klipper_settings.jinja2:225 #: octoprint_klipper/templates/klipper_settings.jinja2:252
msgid "Add Point" msgid "Add Point"
msgstr "Füge Messpunkt hinzu" msgstr "Füge Messpunkt hinzu"
#: octoprint_klipper/templates/klipper_settings.jinja2:232 #: octoprint_klipper/templates/klipper_settings.jinja2:259
msgid "Config Files" msgid "Config Files"
msgstr "Konfig Dateien" msgstr "Konfig Dateien"
#: octoprint_klipper/templates/klipper_settings.jinja2:246 #: octoprint_klipper/templates/klipper_settings.jinja2:273
msgid "Add new File" msgid "Add new File"
msgstr "Erstelle neue Datei" msgstr "Erstelle neue Datei"
#: octoprint_klipper/templates/klipper_settings.jinja2:247 #: octoprint_klipper/templates/klipper_settings.jinja2:274
msgid "New File" msgid "New File"
msgstr "Neue Datei" msgstr "Neue Datei"
#: octoprint_klipper/templates/klipper_settings.jinja2:249 #: octoprint_klipper/templates/klipper_settings.jinja2:276
msgid "Open last config" msgid "Open last config"
msgstr "Öffne letzte Konfig" msgstr "Öffne letzte Konfig"
#: octoprint_klipper/templates/klipper_settings.jinja2:250 #: octoprint_klipper/templates/klipper_settings.jinja2:277
#, fuzzy
msgid "Open last Editor" msgid "Open last Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
#: octoprint_klipper/templates/klipper_settings.jinja2:300 #: octoprint_klipper/templates/klipper_settings.jinja2:303
msgid "Path to the config files."
msgstr "Pfad zu den Konfigurationsdateien"
#: octoprint_klipper/templates/klipper_settings.jinja2:329
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: octoprint_klipper/templates/klipper_settings.jinja2:329 #: octoprint_klipper/templates/klipper_settings.jinja2:358
msgid "Donate" msgid "Donate"
msgstr "Spenden" msgstr "Spenden"
@ -652,7 +780,7 @@ msgstr "Druckerprofil"
msgid "Connect" msgid "Connect"
msgstr "Verbinde" msgstr "Verbinde"
#: octoprint_klipper/templates/klipper_sidebar.jinja2:6 #: octoprint_klipper/templates/klipper_sidebar.jinja2:7
msgid "Open Editor" msgid "Open Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
@ -660,39 +788,31 @@ msgstr "Öffne Editor"
msgid "Messages" msgid "Messages"
msgstr "Nachricht" msgstr "Nachricht"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:11 #: octoprint_klipper/templates/klipper_tab_main.jinja2:6
#: octoprint_klipper/templates/klipper_tab_main.jinja2:12
msgid "Clear Log"
msgstr "Log löschen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:21
msgid "Query Klipper for its current status"
msgstr "Aktuellen Status von Klipper anfordern"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:22
msgid "Get Status"
msgstr "Statusabfrage"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Open the OctoKlipper Settings" msgid "Open the OctoKlipper Settings"
msgstr "Öffne die OctoKlipper Einstellungen" msgstr "Öffne die OctoKlipper Einstellungen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:16
#: octoprint_klipper/templates/klipper_tab_main.jinja2:17
msgid "Clear Log"
msgstr "Log löschen"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Query Klipper for its current status"
msgstr "Aktuellen Status von Klipper anfordern"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:27 #: octoprint_klipper/templates/klipper_tab_main.jinja2:27
msgid "Open OctoKlipper Settings" msgid "Get Status"
msgstr "Öffne OctoKlipper Einstellungen" msgstr "Statusabfrage"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:31 #: octoprint_klipper/templates/klipper_tab_main.jinja2:31
msgid "Show the Editor" msgid "Show the Editor"
msgstr "Öffne Editor" msgstr "Öffne den Editor"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:33 #: octoprint_klipper/templates/klipper_tab_main.jinja2:33
msgid "Show Editor" msgid "Show Editor"
msgstr "Öffne Editor" msgstr "Öffne Editor"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Restart"
msgstr "Neustart"
#: octoprint_klipper/templates/klipper_tab_main.jinja2:41 #: octoprint_klipper/templates/klipper_tab_main.jinja2:41
msgid "" msgid ""
"This will cause the host software to reload its config and perform an " "This will cause the host software to reload its config and perform an "

View File

@ -7,9 +7,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OctoKlipper 0.3.8.3\n" "Project-Id-Version: OctoKlipper 0.3.9.1\n"
"Report-Msgid-Bugs-To: i18n@octoprint.org\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n"
"POT-Creation-Date: 2021-09-17 08:18+0200\n" "POT-Creation-Date: 2021-11-21 00:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -26,37 +26,72 @@ msgstr ""
msgid "Allows to use klipper macros" msgid "Allows to use klipper macros"
msgstr "" msgstr ""
#: octoprint_klipper/__init__.py:608 #: octoprint_klipper/__init__.py:599
msgid "Restart Klipper" msgid "Restart Klipper"
msgstr "" msgstr ""
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "You are about to restart Klipper!" msgid "You are about to restart Klipper!"
msgstr "" msgstr ""
#: octoprint_klipper/__init__.py:609 #: octoprint_klipper/__init__.py:600
msgid "This will stop ongoing prints!" msgid "This will stop ongoing prints!"
msgstr "" msgstr ""
#: octoprint_klipper/cfgUtils.py:95 #: octoprint_klipper/cfgUtils.py:86
msgid "Error: Klipper config file not found at:"
msgstr ""
#: octoprint_klipper/cfgUtils.py:89
msgid "IOError:"
msgstr ""
#: octoprint_klipper/cfgUtils.py:96
msgid "Decode Error:"
msgstr ""
#: octoprint_klipper/cfgUtils.py:100
msgid "Please convert your config files to utf-8!"
msgstr ""
#: octoprint_klipper/cfgUtils.py:102
msgid ""
"Or you can also paste your config \n"
"into the Editor and save it."
msgstr ""
#: octoprint_klipper/cfgUtils.py:109
msgid "File not found!" msgid "File not found!"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper.js:259 #: octoprint_klipper/static/js/klipper.js:220
#: octoprint_klipper/templates/klipper_sidebar.jinja2:13
msgid "Go to OctoKlipper Tab"
msgstr ""
#: octoprint_klipper/static/js/klipper.js:340
msgid "Restarted Klipper"
msgstr ""
#: octoprint_klipper/static/js/klipper.js:348
msgid "All ongoing Prints will be stopped!" msgid "All ongoing Prints will be stopped!"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper.js:262 #: octoprint_klipper/static/js/klipper.js:353
msgid "Klipper restart?" msgid "Restart Klipper?"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper.js:264 #: octoprint_klipper/static/js/klipper.js:355
#: octoprint_klipper/static/js/klipper_backup.js:159 #: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Proceed" msgid "Restart"
msgstr ""
#: octoprint_klipper/static/js/klipper.js:355
msgid "Restart and don't ask this again."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:126 #: octoprint_klipper/static/js/klipper_backup.js:126
#: octoprint_klipper/static/js/klipper_settings.js:124 #: octoprint_klipper/static/js/klipper_settings.js:134
#, python-format #, python-format
msgid "" msgid ""
"Failed to remove config %(name)s.</p><p>Please consult octoprint.log for " "Failed to remove config %(name)s.</p><p>Please consult octoprint.log for "
@ -64,13 +99,13 @@ msgid ""
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:129 #: octoprint_klipper/static/js/klipper_backup.js:129
#: octoprint_klipper/static/js/klipper_settings.js:127 #: octoprint_klipper/static/js/klipper_settings.js:137
msgid "Could not remove config" msgid "Could not remove config"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:138 #: octoprint_klipper/static/js/klipper_backup.js:138
#, python-format #, python-format
msgid "You are about to delete backuped config file \"%(name)s\"." msgid "You are about to delete backed config file \"%(name)s\"."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:154 #: octoprint_klipper/static/js/klipper_backup.js:154
@ -81,14 +116,19 @@ msgstr ""
msgid "Are you sure you want to restore now?" msgid "Are you sure you want to restore now?"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:159
#: octoprint_klipper/static/js/klipper_editor.js:173
msgid "Proceed"
msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:184 #: octoprint_klipper/static/js/klipper_backup.js:184
#, python-format #, python-format
msgid "You are about to restore %(count)d backuped config files." msgid "You are about to restore %(count)d backed config files."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:199 #: octoprint_klipper/static/js/klipper_backup.js:199
#, python-format #, python-format
msgid "You are about to delete %(count)d backuped config files." msgid "You are about to delete %(count)d backed config files."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:209 #: octoprint_klipper/static/js/klipper_backup.js:209
@ -97,7 +137,7 @@ msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:211 #: octoprint_klipper/static/js/klipper_backup.js:211
#, python-format #, python-format
msgid "Restoring %(count)d backuped config files..." msgid "Restoring %(count)d backed config files..."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:220 #: octoprint_klipper/static/js/klipper_backup.js:220
@ -116,93 +156,141 @@ msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:265 #: octoprint_klipper/static/js/klipper_backup.js:265
#, python-format #, python-format
msgid "Deleting %(count)d backup files..." msgid "Deleting %(count)d backed files..."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:273 #: octoprint_klipper/static/js/klipper_backup.js:273
#: octoprint_klipper/static/js/klipper_settings.js:183 #: octoprint_klipper/static/js/klipper_settings.js:193
#, python-format #, python-format
msgid "Deleted %(filename)s..." msgid "Deleted %(filename)s..."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_backup.js:279 #: octoprint_klipper/static/js/klipper_backup.js:279
#: octoprint_klipper/static/js/klipper_settings.js:193 #: octoprint_klipper/static/js/klipper_settings.js:203
#, python-format #, python-format
msgid "Deleting of %(filename)s failed, continuing..." msgid "Deleting of %(filename)s failed, continuing..."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:61 #: octoprint_klipper/static/js/klipper_editor.js:79
msgid "Closing without saving"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:80
msgid "Your file seems to have changed." msgid "Your file seems to have changed."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:64 #: octoprint_klipper/static/js/klipper_editor.js:82
msgid "Do you really want to close it?" msgid "Do you really want to close it?"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:65 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "No" #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgid "Close"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:66 #: octoprint_klipper/static/js/klipper_editor.js:83
msgid "Yes" msgid "Do not close"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:83
#: octoprint_klipper/static/js/klipper_editor.js:134 #: octoprint_klipper/templates/klipper_editor.jinja2:38
msgid "Save & Close"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:168
msgid "Reload Configfile after SAVE_CONFIG?"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:171
msgid "Externally changed config"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:183
msgid "Your configuration seems to be faulty."
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:187
msgid "Save faulty Configuration?"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:189
msgid "Do not save!"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway!"
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:190
msgid "Save anyway and don't ask this again."
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:214
msgid "SyntaxCheck" msgid "SyntaxCheck"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:127 #: octoprint_klipper/static/js/klipper_editor.js:214
msgid "SyntaxCheck OK" msgid "SyntaxCheck OK"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:130 #: octoprint_klipper/static/js/klipper_editor.js:249
msgid "Syntax NOK" msgid "Faulty config not saved!"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:251
#: octoprint_klipper/static/js/klipper_editor.js:161 #: octoprint_klipper/static/js/klipper_editor.js:275
#: octoprint_klipper/static/js/klipper_editor.js:393
#: octoprint_klipper/static/js/klipper_editor.js:406
#: octoprint_klipper/templates/klipper_editor.jinja2:40 #: octoprint_klipper/templates/klipper_editor.jinja2:40
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save Config" msgid "Save Config"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:151 #: octoprint_klipper/static/js/klipper_editor.js:273
msgid "File saved." #: octoprint_klipper/static/js/klipper_editor.js:349
msgid "No filename set"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:157 #: octoprint_klipper/static/js/klipper_editor.js:325
msgid "File not saved!" #: octoprint_klipper/static/js/klipper_editor.js:343
msgstr "" #: octoprint_klipper/static/js/klipper_editor.js:351
#: octoprint_klipper/static/js/klipper_editor.js:226
#: octoprint_klipper/static/js/klipper_editor.js:243
msgid "Reload File" msgid "Reload File"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "Reload Config" msgid "Reload Config"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:230 #: octoprint_klipper/static/js/klipper_editor.js:329
msgid "File reloaded." msgid "File reloaded."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:136 #: octoprint_klipper/static/js/klipper_editor.js:393
msgid "File saved."
msgstr ""
#: octoprint_klipper/static/js/klipper_editor.js:404
msgid "File not saved!"
msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:103
msgid "Path: "
msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:146
#, python-format #, python-format
msgid "You are about to delete config file \"%(name)s\"." msgid "You are about to delete config file \"%(name)s\"."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:163 #: octoprint_klipper/static/js/klipper_settings.js:173
#, python-format #, python-format
msgid "You are about to delete %(count)d config files." msgid "You are about to delete %(count)d config files."
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:173 #: octoprint_klipper/static/js/klipper_settings.js:183
msgid "Deleting config files" msgid "Deleting config files"
msgstr "" msgstr ""
#: octoprint_klipper/static/js/klipper_settings.js:174 #: octoprint_klipper/static/js/klipper_settings.js:184
#, python-format #, python-format
msgid "Deleting %(count)d config files..." msgid "Deleting %(count)d config files..."
msgstr "" msgstr ""
@ -212,27 +300,27 @@ msgid "Backups"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:17
#: octoprint_klipper/templates/klipper_settings.jinja2:240 #: octoprint_klipper/templates/klipper_settings.jinja2:267
msgid "Select all on this page" msgid "Select all on this page"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:20
#: octoprint_klipper/templates/klipper_settings.jinja2:241 #: octoprint_klipper/templates/klipper_settings.jinja2:268
msgid "Select all" msgid "Select all"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:243 #: octoprint_klipper/templates/klipper_settings.jinja2:270
msgid "Clear selection" msgid "Clear selection"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:29
#: octoprint_klipper/templates/klipper_settings.jinja2:252 #: octoprint_klipper/templates/klipper_settings.jinja2:279
msgid "Refresh file list" msgid "Refresh file list"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:30
#: octoprint_klipper/templates/klipper_settings.jinja2:253 #: octoprint_klipper/templates/klipper_settings.jinja2:280
msgid "Refresh Files" msgid "Refresh Files"
msgstr "" msgstr ""
@ -241,55 +329,55 @@ msgid "Restore selected"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:256 #: octoprint_klipper/templates/klipper_settings.jinja2:283
msgid "Delete selected" msgid "Delete selected"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:46
#: octoprint_klipper/templates/klipper_settings.jinja2:263 #: octoprint_klipper/templates/klipper_settings.jinja2:291
msgid "Sort by name" msgid "Sort by name"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:47
#: octoprint_klipper/templates/klipper_settings.jinja2:264 #: octoprint_klipper/templates/klipper_settings.jinja2:292
msgid "ascending" msgid "ascending"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:50
#: octoprint_klipper/templates/klipper_settings.jinja2:266 #: octoprint_klipper/templates/klipper_settings.jinja2:294
msgid "Sort by date" msgid "Sort by date"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:51
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:55
#: octoprint_klipper/templates/klipper_settings.jinja2:267 #: octoprint_klipper/templates/klipper_settings.jinja2:295
#: octoprint_klipper/templates/klipper_settings.jinja2:270 #: octoprint_klipper/templates/klipper_settings.jinja2:298
msgid "descending" msgid "descending"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:54
#: octoprint_klipper/templates/klipper_settings.jinja2:269 #: octoprint_klipper/templates/klipper_settings.jinja2:297
msgid "Sort by file size" msgid "Sort by file size"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:65
#: octoprint_klipper/templates/klipper_settings.jinja2:101 #: octoprint_klipper/templates/klipper_settings.jinja2:130
#: octoprint_klipper/templates/klipper_settings.jinja2:280 #: octoprint_klipper/templates/klipper_settings.jinja2:309
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:66
#: octoprint_klipper/templates/klipper_settings.jinja2:281 #: octoprint_klipper/templates/klipper_settings.jinja2:310
msgid "Size" msgid "Size"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:67
#: octoprint_klipper/templates/klipper_settings.jinja2:282 #: octoprint_klipper/templates/klipper_settings.jinja2:311
msgid "Action" msgid "Action"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:78
#: octoprint_klipper/templates/klipper_settings.jinja2:294 #: octoprint_klipper/templates/klipper_settings.jinja2:323
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
@ -298,7 +386,7 @@ msgid "Restore"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84 #: octoprint_klipper/templates/klipper_backups_dialog.jinja2:84
#: octoprint_klipper/templates/klipper_settings.jinja2:297 #: octoprint_klipper/templates/klipper_settings.jinja2:326
msgid "Download" msgid "Download"
msgstr "" msgstr ""
@ -325,12 +413,15 @@ msgstr ""
#: octoprint_klipper/templates/klipper_editor.jinja2:34 #: octoprint_klipper/templates/klipper_editor.jinja2:34
#: octoprint_klipper/templates/klipper_editor.jinja2:35 #: octoprint_klipper/templates/klipper_editor.jinja2:35
msgid "Reload last version" msgid "Check Syntax"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_editor.jinja2:37 #: octoprint_klipper/templates/klipper_editor.jinja2:37
#: octoprint_klipper/templates/klipper_editor.jinja2:38 msgid "Save Config and Close"
msgid "Check Syntax" msgstr ""
#: octoprint_klipper/templates/klipper_editor.jinja2:41
msgid "Save"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:4
@ -353,10 +444,6 @@ msgstr ""
msgid "Analyze Log" msgid "Analyze Log"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:27
msgid "Close"
msgstr ""
#: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35 #: octoprint_klipper/templates/klipper_graph_dialog.jinja2:35
msgid "Depending on the size of the log file this might take a while." msgid "Depending on the size of the log file this might take a while."
msgstr "" msgstr ""
@ -386,11 +473,6 @@ msgstr ""
msgid "Stop" msgid "Stop"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_navbar.jinja2:2
#: octoprint_klipper/templates/klipper_sidebar.jinja2:11
msgid "Go to OctoKlipper Tab"
msgstr ""
#: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4 #: octoprint_klipper/templates/klipper_offset_dialog.jinja2:4
#: octoprint_klipper/templates/klipper_tab_main.jinja2:63 #: octoprint_klipper/templates/klipper_tab_main.jinja2:63
msgid "Coordinate Offset" msgid "Coordinate Offset"
@ -446,7 +528,7 @@ msgid "Basic"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:4 #: octoprint_klipper/templates/klipper_settings.jinja2:4
#: octoprint_klipper/templates/klipper_sidebar.jinja2:16 #: octoprint_klipper/templates/klipper_sidebar.jinja2:20
#: octoprint_klipper/templates/klipper_tab_main.jinja2:72 #: octoprint_klipper/templates/klipper_tab_main.jinja2:72
msgid "Macros" msgid "Macros"
msgstr "" msgstr ""
@ -469,162 +551,205 @@ msgid "Replace Connection Panel"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:25 #: octoprint_klipper/templates/klipper_settings.jinja2:25
#: octoprint_klipper/templates/klipper_settings.jinja2:27
msgid ""
"Hide 'Open Editor' Button\n"
"in the Connection Panel"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:32
msgid "Show Short Messages" msgid "Show Short Messages"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:27 #: octoprint_klipper/templates/klipper_settings.jinja2:34
#: octoprint_klipper/templates/klipper_settings.jinja2:28 #: octoprint_klipper/templates/klipper_settings.jinja2:35
msgid "on NavBar" msgid "on NavBar"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:29 #: octoprint_klipper/templates/klipper_settings.jinja2:36
#: octoprint_klipper/templates/klipper_settings.jinja2:30 #: octoprint_klipper/templates/klipper_settings.jinja2:37
msgid "on SideBar" msgid "on SideBar"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:34 #: octoprint_klipper/templates/klipper_settings.jinja2:41
#: octoprint_klipper/templates/klipper_settings.jinja2:36 #: octoprint_klipper/templates/klipper_settings.jinja2:43
msgid "Enable debug logging" msgid "Enable debug logging"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:41 #: octoprint_klipper/templates/klipper_settings.jinja2:48
#: octoprint_klipper/templates/klipper_settings.jinja2:50
msgid "Hide Error PopUps"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:55
msgid "Config Editor" msgid "Config Editor"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:43 #: octoprint_klipper/templates/klipper_settings.jinja2:57
#: octoprint_klipper/templates/klipper_settings.jinja2:44 #: octoprint_klipper/templates/klipper_settings.jinja2:58
msgid "Check parsing on save" msgid "Check parsing on save"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:46 #: octoprint_klipper/templates/klipper_settings.jinja2:60
#: octoprint_klipper/templates/klipper_settings.jinja2:48 #: octoprint_klipper/templates/klipper_settings.jinja2:62
msgid "Fontsize" msgid "Fontsize"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:53 #: octoprint_klipper/templates/klipper_settings.jinja2:67
msgid "Klipper Config Directory" msgid "Klipper Config Directory"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:59 #: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid ""
"The filename of the base config that Klipper is loading. (default is "
"printer.cfg)"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:73
msgid "Klipper Base Config Filename"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:79
msgid "Klipper Log File" msgid "Klipper Log File"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:65 #: octoprint_klipper/templates/klipper_settings.jinja2:85
msgid "Configuration Reload Command" msgid "Configuration Restart Command"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:72 #: octoprint_klipper/templates/klipper_settings.jinja2:92
msgid "The command that is executed if you want to restart klipper." msgid "The command that is executed if you want to restart klipper."
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:74
#: octoprint_klipper/templates/klipper_settings.jinja2:75
msgid "Reload klipper on editor save?"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:80
msgid "Config Backup"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:82
#: octoprint_klipper/templates/klipper_settings.jinja2:83
msgid "Show Backups"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:93
msgid "Add macro button to:"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:94 #: octoprint_klipper/templates/klipper_settings.jinja2:94
#: octoprint_klipper/templates/klipper_settings.jinja2:108 msgid "Restart klipper on editor save?"
msgid "Klipper Tab"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:95 #: octoprint_klipper/templates/klipper_settings.jinja2:95
#: octoprint_klipper/templates/klipper_settings.jinja2:111 msgid "Restart Klipper on editor save?"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:97
msgid "Show Confirmation before restarting Klipper?"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:98
msgid "Confirmation before restarting Klipper?"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:103
msgid "Config Backup"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:105
#: octoprint_klipper/templates/klipper_settings.jinja2:106
msgid "Show Backups"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:115
msgid "These macros are only meant to be used in OctoPrint."
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:116
msgid "They are not the ones that can be defined in the printer.cfg."
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:122
msgid "Add macro button to:"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:123
#: octoprint_klipper/templates/klipper_settings.jinja2:137
msgid "Klipper Tab"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:124
#: octoprint_klipper/templates/klipper_settings.jinja2:140
msgid "Sidebar" msgid "Sidebar"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:120 #: octoprint_klipper/templates/klipper_settings.jinja2:149
msgid "Command" msgid "Command"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:133 #: octoprint_klipper/templates/klipper_settings.jinja2:162
msgid "Add Macro" msgid "Add Macro"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:138 #: octoprint_klipper/templates/klipper_settings.jinja2:167
msgid "" msgid ""
"To show a dialog that asks for parameters you can write your macro like " "To show a dialog that asks for parameters you can write your macro like "
"in the following example:" "in the following example:"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:154 #: octoprint_klipper/templates/klipper_settings.jinja2:183
msgid "" msgid ""
"This feature assists in manually leveling you print bed by moving the " "This feature assists in manually leveling your print bed by moving the "
"head to the defined points in\n" "head to the defined points in sequence.<br />If you use a piece of paper "
" sequence.<br />\n" "for leveling, set \"Probe Height\" to the paper thickness eg. \"0.1\"."
" If you use a piece of paper for leveling, set \"Probe Height\" "
"to the paper thickness eg. \"0.1\"."
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:160 #: octoprint_klipper/templates/klipper_settings.jinja2:187
msgid "Probe Height" msgid "Probe Height"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:166 #: octoprint_klipper/templates/klipper_settings.jinja2:193
msgid "Z-height to probe at" msgid "Z-height to probe at"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:170 #: octoprint_klipper/templates/klipper_settings.jinja2:197
msgid "Probe Lift" msgid "Probe Lift"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:176 #: octoprint_klipper/templates/klipper_settings.jinja2:203
msgid "Lift Head by this amount before moving." msgid "Lift Head by this amount before moving."
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:180 #: octoprint_klipper/templates/klipper_settings.jinja2:207
msgid "Probe Feedrate Z" msgid "Probe Feedrate Z"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:189 #: octoprint_klipper/templates/klipper_settings.jinja2:216
msgid "Feedrate X/Y" msgid "Feedrate X/Y"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:198 #: octoprint_klipper/templates/klipper_settings.jinja2:225
msgid "Probe Points" msgid "Probe Points"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:225 #: octoprint_klipper/templates/klipper_settings.jinja2:252
msgid "Add Point" msgid "Add Point"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:232 #: octoprint_klipper/templates/klipper_settings.jinja2:259
msgid "Config Files" msgid "Config Files"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:246 #: octoprint_klipper/templates/klipper_settings.jinja2:273
msgid "Add new File" msgid "Add new File"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:247 #: octoprint_klipper/templates/klipper_settings.jinja2:274
msgid "New File" msgid "New File"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:249 #: octoprint_klipper/templates/klipper_settings.jinja2:276
msgid "Open last config" msgid "Open last config"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:250 #: octoprint_klipper/templates/klipper_settings.jinja2:277
msgid "Open last Editor" msgid "Open last Editor"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:300 #: octoprint_klipper/templates/klipper_settings.jinja2:303
msgid "Edit" msgid "Path to the config files."
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:329 #: octoprint_klipper/templates/klipper_settings.jinja2:329
msgid "Edit"
msgstr ""
#: octoprint_klipper/templates/klipper_settings.jinja2:358
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@ -636,7 +761,7 @@ msgstr ""
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_sidebar.jinja2:6 #: octoprint_klipper/templates/klipper_sidebar.jinja2:7
msgid "Open Editor" msgid "Open Editor"
msgstr "" msgstr ""
@ -644,25 +769,21 @@ msgstr ""
msgid "Messages" msgid "Messages"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:11 #: octoprint_klipper/templates/klipper_tab_main.jinja2:6
#: octoprint_klipper/templates/klipper_tab_main.jinja2:12
msgid "Clear Log"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:21
msgid "Query Klipper for its current status"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:22
msgid "Get Status"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Open the OctoKlipper Settings" msgid "Open the OctoKlipper Settings"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:16
#: octoprint_klipper/templates/klipper_tab_main.jinja2:17
msgid "Clear Log"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:26
msgid "Query Klipper for its current status"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:27 #: octoprint_klipper/templates/klipper_tab_main.jinja2:27
msgid "Open OctoKlipper Settings" msgid "Get Status"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:31 #: octoprint_klipper/templates/klipper_tab_main.jinja2:31
@ -673,10 +794,6 @@ msgstr ""
msgid "Show Editor" msgid "Show Editor"
msgstr "" msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:39
msgid "Restart"
msgstr ""
#: octoprint_klipper/templates/klipper_tab_main.jinja2:41 #: octoprint_klipper/templates/klipper_tab_main.jinja2:41
msgid "" msgid ""
"This will cause the host software to reload its config and perform an " "This will cause the host software to reload its config and perform an "