Просмотр исходного кода

Add a background job to upload material archives

It creates the archive now. It doesn't yet upload it.

Contributes to issue CURA-8609.
Ghostkeeper 3 лет назад
Родитель
Сommit
599c59bd3a

+ 9 - 0
cura/Machines/Models/MaterialManagementModel.py

@@ -16,6 +16,7 @@ from UM.Signal import postponeSignals, CompressTechnique
 
 import cura.CuraApplication  # Imported like this to prevent circular imports.
 from cura.Machines.ContainerTree import ContainerTree
+from cura.PrinterOutput.UploadMaterialsJob import UploadMaterialsJob  # To export materials to the output printer.
 from cura.Settings.CuraContainerRegistry import CuraContainerRegistry  # To find the sets of materials belonging to each other, and currently loaded extruder stacks.
 
 if TYPE_CHECKING:
@@ -385,3 +386,11 @@ class MaterialManagementModel(QObject):
                 archive.writestr(filename, material.serialize())
             except OSError as e:
                 Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {e}.")
+
+    @pyqtSlot()
+    def exportUpload(self) -> None:
+        """
+        Export all materials and upload them to the user's account.
+        """
+        job = UploadMaterialsJob()
+        job.start()

+ 25 - 0
cura/PrinterOutput/UploadMaterialsJob.py

@@ -0,0 +1,25 @@
+# Copyright (c) 2021 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import QUrl
+import os  # To delete the archive when we're done.
+import tempfile  # To create an archive before we upload it.
+
+import cura.CuraApplication  # Imported like this to prevent circular imports.
+from UM.Job import Job
+
+
+class UploadMaterialsJob(Job):
+    """
+    Job that uploads a set of materials to the Digital Factory.
+    """
+
+    def run(self):
+        archive_file = tempfile.NamedTemporaryFile("wb", delete = False)
+        archive_file.close()
+
+        cura.CuraApplication.CuraApplication.getInstance().getMaterialManagementModel().exportAll(QUrl.fromLocalFile(archive_file.name))
+
+        print("Creating archive completed. Now we need to upload it.")  # TODO: Upload that file.
+
+        os.remove(archive_file.name)  # Clean up.

+ 1 - 0
resources/qml/Preferences/Materials/MaterialsSyncDialog.qml

@@ -354,6 +354,7 @@ Window
                     {
                         anchors.right: parent.right
                         text: catalog.i18nc("@button", "Sync")
+                        onClicked: materialManagementModel.exportUpload()
                     }
                 }
             }