mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-18 04:07:57 -06:00

Took a while to figure out exactly what to do here. But the task itself is simple. The Ultimaker software apparently doesn't accept special characters here. The regex here is exactly the inverse of the regex that they use to accept job names. Done as a 5 minute fix.
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
# Copyright (c) 2021 Ultimaker B.V.
|
|
# Cura is released under the terms of the LGPLv3 or higher.
|
|
|
|
import re # Filtering out invalid characters.
|
|
from typing import List, Optional
|
|
|
|
from UM.FileHandler.FileHandler import FileHandler
|
|
from UM.FileHandler.WriteFileJob import WriteFileJob
|
|
from UM.Logger import Logger
|
|
from UM.Scene.SceneNode import SceneNode
|
|
from cura.CuraApplication import CuraApplication
|
|
|
|
from .MeshFormatHandler import MeshFormatHandler
|
|
|
|
|
|
class ExportFileJob(WriteFileJob):
|
|
"""Job that exports the build plate to the correct file format for the target cluster."""
|
|
|
|
def __init__(self, file_handler: Optional[FileHandler], nodes: List[SceneNode], firmware_version: str) -> None:
|
|
|
|
self._mesh_format_handler = MeshFormatHandler(file_handler, firmware_version)
|
|
if not self._mesh_format_handler.is_valid:
|
|
Logger.log("e", "Missing file or mesh writer!")
|
|
return
|
|
|
|
super().__init__(self._mesh_format_handler.writer, self._mesh_format_handler.createStream(), nodes,
|
|
self._mesh_format_handler.file_mode)
|
|
|
|
# Determine the filename.
|
|
job_name = CuraApplication.getInstance().getPrintInformation().jobName
|
|
job_name = re.sub("[^\w\-. ()]", "-", job_name)
|
|
extension = self._mesh_format_handler.preferred_format.get("extension", "")
|
|
self.setFileName("{}.{}".format(job_name, extension))
|
|
|
|
def getMimeType(self) -> str:
|
|
"""Get the mime type of the selected export file type."""
|
|
|
|
return self._mesh_format_handler.mime_type
|
|
|
|
def getOutput(self) -> bytes:
|
|
"""Get the job result as bytes as that is what we need to upload to the cluster."""
|
|
|
|
output = self.getStream().getvalue()
|
|
if isinstance(output, str):
|
|
output = output.encode("utf-8")
|
|
return output
|