def finishedCallback(reply: QNetworkReply) -> None: progress_message.hide() try: with open(os.path.join(temp_dir, file_name), "wb+") as temp_file: bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) while bytes_read: temp_file.write(bytes_read) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) CuraApplication.getInstance().processEvents() temp_file_name = temp_file.name except IOError as ex: Logger.logException( "e", "Can't write Digital Library file {0}/{1} download to temp-directory {2}.", ex, project_name, file_name, temp_dir) Message( text="Failed to write to temporary file for '{}'.".format( file_name), title="File-system error", lifetime=10).show() return CuraApplication.getInstance().readLocalFile( QUrl.fromLocalFile(temp_file_name), add_to_recent_files=False)
def _onFinished(self, package_id: str, reply: QNetworkReply) -> None: self._progress[package_id]["received"] = self._progress[package_id]["total"] try: with tempfile.NamedTemporaryFile(mode = "wb+", suffix = ".curapackage", delete = False) as temp_file: bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) while bytes_read: temp_file.write(bytes_read) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) self._app.processEvents() self._progress[package_id]["file_written"] = temp_file.name except IOError as e: Logger.logException("e", "Failed to write downloaded package to temp file", e) self._onError(package_id) temp_file.close() self._checkDone()
def _onRestoreRequestCompleted( self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None) -> None: if not HttpRequestManager.replyIndicatesSuccess(reply, error): Logger.warning( "Requesting backup failed, response code %s while trying to connect to %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) self.restore_backup_error_message = self.DEFAULT_ERROR_MESSAGE self._job_done.set() return # We store the file in a temporary path fist to ensure integrity. temporary_backup_file = NamedTemporaryFile(delete=False) with open(temporary_backup_file.name, "wb") as write_backup: app = CuraApplication.getInstance() bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) while bytes_read: write_backup.write(bytes_read) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) app.processEvents() if not self._verifyMd5Hash(temporary_backup_file.name, self._backup.get("md5_hash", "")): # Don't restore the backup if the MD5 hashes do not match. # This can happen if the download was interrupted. Logger.log( "w", "Remote and local MD5 hashes do not match, not restoring backup." ) self.restore_backup_error_message = self.DEFAULT_ERROR_MESSAGE # Tell Cura to place the backup back in the user data folder. with open(temporary_backup_file.name, "rb") as read_backup: cura_api = CuraApplication.getInstance().getCuraAPI() cura_api.backups.restoreBackup(read_backup.read(), self._backup.get("metadata", {})) self._job_done.set()