diff options
author | Ghostkeeper <rubend@tutanota.com> | 2021-10-11 14:11:54 +0300 |
---|---|---|
committer | Ghostkeeper <rubend@tutanota.com> | 2021-10-11 14:11:54 +0300 |
commit | e7b49ee551590ce5652d18b782350772e33e8abb (patch) | |
tree | a98da20acda66094aed09f20a9b18645e33e695b | |
parent | 9729f4f3d2320a23181b544f4188089b35a382ef (diff) |
Disable sync button while in progress
Need to show a bit more feedback I think. Let's see what the design said...
Contributes to issue CURA-8609.
-rw-r--r-- | cura/Machines/Models/MaterialManagementModel.py | 23 | ||||
-rw-r--r-- | cura/PrinterOutput/UploadMaterialsJob.py | 4 | ||||
-rw-r--r-- | resources/qml/Preferences/Materials/MaterialsSyncDialog.qml | 8 |
3 files changed, 30 insertions, 5 deletions
diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index 2994b48918..ecd809fef0 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import copy # To duplicate materials. -from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl +from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl from PyQt5.QtGui import QDesktopServices from typing import Any, Dict, Optional, TYPE_CHECKING import uuid # To generate new GUIDs for new materials. @@ -35,6 +35,7 @@ class MaterialManagementModel(QObject): def __init__(self, parent: QObject = None): super().__init__(parent) self._sync_all_dialog = None # type: Optional[QObject] + self._export_upload_status = "idle" self._checkIfNewMaterialsWereInstalled() def _checkIfNewMaterialsWereInstalled(self) -> None: @@ -330,12 +331,11 @@ class MaterialManagementModel(QObject): """ if self._sync_all_dialog is None: qml_path = Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.QmlFiles, "Preferences", "Materials", "MaterialsSyncDialog.qml") - self._sync_all_dialog = cura.CuraApplication.CuraApplication.getInstance().createQmlComponent(qml_path, { - "materialManagementModel": self, - "pageIndex": 0 - }) + self._sync_all_dialog = cura.CuraApplication.CuraApplication.getInstance().createQmlComponent(qml_path, {}) if self._sync_all_dialog is None: # Failed to load QML file. return + self._sync_all_dialog.setProperty("materialManagementModel", self) + self._sync_all_dialog.setProperty("pageIndex", 0) # Return to first page. self._sync_all_dialog.show() @pyqtSlot(result = QUrl) @@ -388,10 +388,23 @@ class MaterialManagementModel(QObject): except OSError as e: Logger.log("e", f"An error has occurred while writing the material \'{metadata['id']}\' in the file \'{filename}\': {e}.") + exportUploadStatusChanged = pyqtSignal() + + @pyqtProperty(str, notify = exportUploadStatusChanged) + def exportUploadStatus(self): + return self._export_upload_status + @pyqtSlot() def exportUpload(self) -> None: """ Export all materials and upload them to the user's account. """ + self._export_upload_status = "uploading" + self.exportUploadStatusChanged.emit() job = UploadMaterialsJob() + job.uploadCompleted.connect(self.exportUploadCompleted) job.start() + + def exportUploadCompleted(self): + self._export_upload_status = "idle" + self.exportUploadStatusChanged.emit()
\ No newline at end of file diff --git a/cura/PrinterOutput/UploadMaterialsJob.py b/cura/PrinterOutput/UploadMaterialsJob.py index e675524ec4..13e97a5093 100644 --- a/cura/PrinterOutput/UploadMaterialsJob.py +++ b/cura/PrinterOutput/UploadMaterialsJob.py @@ -11,6 +11,7 @@ from cura.UltimakerCloud import UltimakerCloudConstants # To know where the API from cura.UltimakerCloud.UltimakerCloudScope import UltimakerCloudScope # To know how to communicate with this server. from UM.Job import Job from UM.Logger import Logger +from UM.Signal import Signal from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To call the API. from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope @@ -33,6 +34,8 @@ class UploadMaterialsJob(Job): super().__init__() self._scope = JsonDecoratorScope(UltimakerCloudScope(cura.CuraApplication.CuraApplication.getInstance())) # type: JsonDecoratorScope + uploadCompleted = Signal() + def run(self): archive_file = tempfile.NamedTemporaryFile("wb", delete = False) archive_file.close() @@ -78,6 +81,7 @@ class UploadMaterialsJob(Job): self.setResult(self.Result.FAILED) return self.setResult(self.Result.SUCCESS) + self.uploadCompleted.emit() def onError(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]): pass # TODO: Handle errors.
\ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml b/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml index 489bfc237a..d3d794287d 100644 --- a/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml +++ b/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml @@ -355,6 +355,14 @@ Window anchors.right: parent.right text: catalog.i18nc("@button", "Sync") onClicked: materialManagementModel.exportUpload() + enabled: + { + if(!materialManagementModel) + { + return false; + } + return materialManagementModel.exportUploadStatus != "uploading"; + } } } } |