Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/DigitalLibrary/src/ExportFileJob.py')
-rw-r--r--plugins/DigitalLibrary/src/ExportFileJob.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/plugins/DigitalLibrary/src/ExportFileJob.py b/plugins/DigitalLibrary/src/ExportFileJob.py
new file mode 100644
index 0000000000..3e4c6dfea2
--- /dev/null
+++ b/plugins/DigitalLibrary/src/ExportFileJob.py
@@ -0,0 +1,55 @@
+# Copyright (c) 2021 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+import io
+from typing import List, Optional, Union
+
+from UM.FileHandler.FileHandler import FileHandler
+from UM.FileHandler.FileWriter import FileWriter
+from UM.FileHandler.WriteFileJob import WriteFileJob
+from UM.Logger import Logger
+from UM.MimeTypeDatabase import MimeTypeDatabase
+from UM.OutputDevice import OutputDeviceError
+from UM.Scene.SceneNode import SceneNode
+
+
+class ExportFileJob(WriteFileJob):
+ """Job that exports the build plate to the correct file format for the Digital Factory Library project."""
+
+ def __init__(self, file_handler: FileHandler, nodes: List[SceneNode], job_name: str, extension: str) -> None:
+ file_types = file_handler.getSupportedFileTypesWrite()
+ if len(file_types) == 0:
+ Logger.log("e", "There are no file types available to write with!")
+ raise OutputDeviceError.WriteRequestFailedError("There are no file types available to write with!")
+
+ mode = None
+ file_writer = None
+ for file_type in file_types:
+ if file_type["extension"] == extension:
+ file_writer = file_handler.getWriter(file_type["id"])
+ mode = file_type.get("mode")
+ super().__init__(file_writer, self.createStream(mode = mode), nodes, mode)
+
+ # Determine the filename.
+ self.setFileName("{}.{}".format(job_name, extension))
+
+ def getOutput(self) -> bytes:
+ """Get the job result as bytes as that is what we need to upload to the Digital Factory Library."""
+
+ output = self.getStream().getvalue()
+ if isinstance(output, str):
+ output = output.encode("utf-8")
+ return output
+
+ def getMimeType(self) -> str:
+ """Get the mime type of the selected export file type."""
+ return MimeTypeDatabase.getMimeTypeForFile(self.getFileName()).name
+
+ @staticmethod
+ def createStream(mode) -> Union[io.BytesIO, io.StringIO]:
+ """Creates the right kind of stream based on the preferred format."""
+
+ if mode == FileWriter.OutputMode.TextMode:
+ return io.StringIO()
+ else:
+ return io.BytesIO()