Add a background job to upload material archives

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

Contributes to issue CURA-8609.
This commit is contained in:
Ghostkeeper 2021-10-08 15:15:57 +02:00
parent a7f172d836
commit 599c59bd3a
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A
3 changed files with 35 additions and 0 deletions

View file

@ -16,6 +16,7 @@ from UM.Signal import postponeSignals, CompressTechnique
import cura.CuraApplication # Imported like this to prevent circular imports. import cura.CuraApplication # Imported like this to prevent circular imports.
from cura.Machines.ContainerTree import ContainerTree 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. from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To find the sets of materials belonging to each other, and currently loaded extruder stacks.
if TYPE_CHECKING: if TYPE_CHECKING:
@ -385,3 +386,11 @@ class MaterialManagementModel(QObject):
archive.writestr(filename, material.serialize()) archive.writestr(filename, material.serialize())
except OSError as e: except OSError as e:
Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {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()

View file

@ -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.

View file

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