mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
WIP: Make material export work
This commit is contained in:
parent
4f29fc9ab2
commit
0b859bb308
2 changed files with 41 additions and 10 deletions
|
@ -397,7 +397,7 @@ class ContainerManager(QObject):
|
||||||
@pyqtSlot(str, str, QUrl, result = "QVariantMap")
|
@pyqtSlot(str, str, QUrl, result = "QVariantMap")
|
||||||
def exportContainer(self, container_id: str, file_type: str, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
|
def exportContainer(self, container_id: str, file_type: str, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
|
||||||
if not container_id or not file_type or not file_url_or_string:
|
if not container_id or not file_type or not file_url_or_string:
|
||||||
return { "status": "error", "message": "Invalid arguments"}
|
return {"status": "error", "message": "Invalid arguments"}
|
||||||
|
|
||||||
if isinstance(file_url_or_string, QUrl):
|
if isinstance(file_url_or_string, QUrl):
|
||||||
file_url = file_url_or_string.toLocalFile()
|
file_url = file_url_or_string.toLocalFile()
|
||||||
|
@ -405,20 +405,20 @@ class ContainerManager(QObject):
|
||||||
file_url = file_url_or_string
|
file_url = file_url_or_string
|
||||||
|
|
||||||
if not file_url:
|
if not file_url:
|
||||||
return { "status": "error", "message": "Invalid path"}
|
return {"status": "error", "message": "Invalid path"}
|
||||||
|
|
||||||
mime_type = None
|
mime_type = None
|
||||||
if not file_type in self._container_name_filters:
|
if file_type not in self._container_name_filters:
|
||||||
try:
|
try:
|
||||||
mime_type = MimeTypeDatabase.getMimeTypeForFile(file_url)
|
mime_type = MimeTypeDatabase.getMimeTypeForFile(file_url)
|
||||||
except MimeTypeNotFoundError:
|
except MimeTypeNotFoundError:
|
||||||
return { "status": "error", "message": "Unknown File Type" }
|
return {"status": "error", "message": "Unknown File Type"}
|
||||||
else:
|
else:
|
||||||
mime_type = self._container_name_filters[file_type]["mime"]
|
mime_type = self._container_name_filters[file_type]["mime"]
|
||||||
|
|
||||||
containers = self._container_registry.findContainers(id = container_id)
|
containers = self._container_registry.findContainers(id = container_id)
|
||||||
if not containers:
|
if not containers:
|
||||||
return { "status": "error", "message": "Container not found"}
|
return {"status": "error", "message": "Container not found"}
|
||||||
container = containers[0]
|
container = containers[0]
|
||||||
|
|
||||||
if Platform.isOSX() and "." in file_url:
|
if Platform.isOSX() and "." in file_url:
|
||||||
|
@ -435,12 +435,12 @@ class ContainerManager(QObject):
|
||||||
result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"),
|
result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"),
|
||||||
catalog.i18nc("@label Don't translate the XML tag <filename>!", "The file <filename>{0}</filename> already exists. Are you sure you want to overwrite it?").format(file_url))
|
catalog.i18nc("@label Don't translate the XML tag <filename>!", "The file <filename>{0}</filename> already exists. Are you sure you want to overwrite it?").format(file_url))
|
||||||
if result == QMessageBox.No:
|
if result == QMessageBox.No:
|
||||||
return { "status": "cancelled", "message": "User cancelled"}
|
return {"status": "cancelled", "message": "User cancelled"}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
contents = container.serialize()
|
contents = container.serialize()
|
||||||
except NotImplementedError:
|
except NotImplementedError:
|
||||||
return { "status": "error", "message": "Unable to serialize container"}
|
return {"status": "error", "message": "Unable to serialize container"}
|
||||||
|
|
||||||
if contents is None:
|
if contents is None:
|
||||||
return {"status": "error", "message": "Serialization returned None. Unable to write to file"}
|
return {"status": "error", "message": "Serialization returned None. Unable to write to file"}
|
||||||
|
@ -448,7 +448,7 @@ class ContainerManager(QObject):
|
||||||
with SaveFile(file_url, "w") as f:
|
with SaveFile(file_url, "w") as f:
|
||||||
f.write(contents)
|
f.write(contents)
|
||||||
|
|
||||||
return { "status": "success", "message": "Succesfully exported container", "path": file_url}
|
return {"status": "success", "message": "Successfully exported container", "path": file_url}
|
||||||
|
|
||||||
## Imports a profile from a file
|
## Imports a profile from a file
|
||||||
#
|
#
|
||||||
|
|
|
@ -119,8 +119,8 @@ Item
|
||||||
text: catalog.i18nc("@action:button", "Export")
|
text: catalog.i18nc("@action:button", "Export")
|
||||||
iconName: "document-export"
|
iconName: "document-export"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
forceActiveFocus()
|
forceActiveFocus();
|
||||||
// TODO
|
exportMaterialDialog.open();
|
||||||
}
|
}
|
||||||
enabled: currentItem != null
|
enabled: currentItem != null
|
||||||
}
|
}
|
||||||
|
@ -144,6 +144,37 @@ Item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileDialog
|
||||||
|
{
|
||||||
|
id: exportMaterialDialog
|
||||||
|
title: catalog.i18nc("@title:window", "Export Material")
|
||||||
|
selectExisting: false
|
||||||
|
nameFilters: Cura.ContainerManager.getContainerNameFilters("material")
|
||||||
|
folder: CuraApplication.getDefaultPath("dialog_material_path")
|
||||||
|
onAccepted:
|
||||||
|
{
|
||||||
|
var result = Cura.ContainerManager.exportContainer(base.currentItem.root_material_id, selectedNameFilter, fileUrl);
|
||||||
|
|
||||||
|
messageDialog.title = catalog.i18nc("@title:window", "Export Material");
|
||||||
|
if (result.status == "error") {
|
||||||
|
messageDialog.icon = StandardIcon.Critical;
|
||||||
|
messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags <filename> and <message>!", "Failed to export material to <filename>%1</filename>: <message>%2</message>").arg(fileUrl).arg(result.message);
|
||||||
|
messageDialog.open();
|
||||||
|
}
|
||||||
|
else if (result.status == "success") {
|
||||||
|
messageDialog.icon = StandardIcon.Information;
|
||||||
|
messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag <filename>!", "Successfully exported material to <filename>%1</filename>").arg(result.path);
|
||||||
|
messageDialog.open();
|
||||||
|
}
|
||||||
|
CuraApplication.setDefaultPath("dialog_material_path", folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageDialog
|
||||||
|
{
|
||||||
|
id: messageDialog
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: contentsItem
|
id: contentsItem
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue