From cc3d34635ef56a88653e940c97832a48766bf45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 5 Jul 2017 16:37:03 +0200 Subject: [PATCH] Add API function to (re)analyse files --- src/octoprint/filemanager/__init__.py | 20 ++++++++++++++++++++ src/octoprint/server/api/files.py | 12 ++++++++++++ src/octoprint/static/js/app/client/files.js | 4 ++++ src/octoprint/templates/sidebar/files.jinja2 | 1 + 4 files changed, 37 insertions(+) diff --git a/src/octoprint/filemanager/__init__.py b/src/octoprint/filemanager/__init__.py index de78ecad..a5b1bf6a 100644 --- a/src/octoprint/filemanager/__init__.py +++ b/src/octoprint/filemanager/__init__.py @@ -253,6 +253,26 @@ class FileManager(object): def default_slicer(self): return self._slicing_manager.default_slicer + def analyse(self, destination, path, printer_profile_id=None): + if not self.file_exists(destination, path): + return + + if printer_profile_id is None: + printer_profile = self._printer_profile_manager.get_current_or_default() + else: + printer_profile = self._printer_profile_manager.get(printer_profile_id) + if printer_profile is None: + printer_profile = self._printer_profile_manager.get_current_or_default() + + queue_entry = self._analysis_queue_entry(destination, path) + self._analysis_queue.dequeue(queue_entry) + + queue_entry = self._analysis_queue_entry(destination, path, printer_profile=printer_profile) + if queue_entry: + return self._analysis_queue.enqueue(queue_entry, high_priority=True) + + return False + def slice(self, slicer_name, source_location, source_path, dest_location, dest_path, position=None, profile=None, printer_profile_id=None, overrides=None, callback=None, callback_args=None): absolute_source_path = self.path_on_disk(source_location, source_path) diff --git a/src/octoprint/server/api/files.py b/src/octoprint/server/api/files.py index 4895760e..91fcaaa5 100644 --- a/src/octoprint/server/api/files.py +++ b/src/octoprint/server/api/files.py @@ -464,6 +464,7 @@ def gcodeFileCommand(filename, target): valid_commands = { "select": [], "slice": [], + "analyse": [], "copy": ["destination"], "move": ["destination"] } @@ -616,6 +617,17 @@ def gcodeFileCommand(filename, target): r.headers["Location"] = location return r + elif command == "analyse": + if not _verifyFileExists(target, filename): + return make_response("File not found on '%s': %s" % (target, filename), 404) + + printer_profile = None + if "printerProfile" in data and data["printerProfile"]: + printer_profile = data["printerProfile"] + + if not fileManager.analyse(target, filename, printer_profile_id=printer_profile): + return make_response("No analysis possible for {} on {}".format(filename, target), 400) + elif command == "copy" or command == "move": # Copy and move are only possible on local storage if not target in [FileDestinations.LOCAL]: diff --git a/src/octoprint/static/js/app/client/files.js b/src/octoprint/static/js/app/client/files.js index 726949c8..dc5d6c7e 100644 --- a/src/octoprint/static/js/app/client/files.js +++ b/src/octoprint/static/js/app/client/files.js @@ -89,6 +89,10 @@ return this.issueEntryCommand(location, path, "select", data, opts); }; + OctoPrintFilesClient.prototype.analyse = function (location, path, parameters, opts) { + return this.issueEntryCommand(location, path, "analyse", parameters || {}, opts); + }; + OctoPrintFilesClient.prototype.slice = function (location, path, parameters, opts) { return this.issueEntryCommand(location, path, "slice", parameters || {}, opts); diff --git a/src/octoprint/templates/sidebar/files.jinja2 b/src/octoprint/templates/sidebar/files.jinja2 index 80a8e46b..14281950 100644 --- a/src/octoprint/templates/sidebar/files.jinja2 +++ b/src/octoprint/templates/sidebar/files.jinja2 @@ -18,6 +18,7 @@
+