diff --git a/app/static/app/js/components/ProjectListItem.jsx b/app/static/app/js/components/ProjectListItem.jsx index 31d6ec42..7c7bdf23 100644 --- a/app/static/app/js/components/ProjectListItem.jsx +++ b/app/static/app/js/components/ProjectListItem.jsx @@ -60,6 +60,7 @@ class ProjectListItem extends React.Component { this.toggleTaskList = this.toggleTaskList.bind(this); this.closeUploadError = this.closeUploadError.bind(this); this.cancelUpload = this.cancelUpload.bind(this); + this.handleCancel = this.handleCancel.bind(this); this.handleTaskSaved = this.handleTaskSaved.bind(this); this.viewMap = this.viewMap.bind(this); this.handleDelete = this.handleDelete.bind(this); @@ -248,13 +249,19 @@ class ProjectListItem extends React.Component { } } }catch(e){ - this.setUploadState({error: `${e.message}`, uploading: false}); - this.dz.cancelUpload(); + if (this.manuallyCanceled){ + // Manually canceled, ignore error + this.setUploadState({uploading: false}); + }else{ + this.setUploadState({error: `${e.message}`, uploading: false}); + } + + if (this.dz.files.length) this.dz.cancelUpload(); } }) .on("queuecomplete", () => { const remainingFilesCount = this.state.upload.totalCount - this.state.upload.uploadedCount; - if (remainingFilesCount === 0){ + if (remainingFilesCount === 0 && this.state.upload.uploadedCount > 0){ // All files have uploaded! this.setUploadState({uploading: false}); @@ -332,10 +339,26 @@ class ProjectListItem extends React.Component { this.setUploadState({error: ""}); } - cancelUpload(e){ + cancelUpload(){ this.dz.removeAllFiles(true); } + handleCancel(){ + this.manuallyCanceled = true; + this.cancelUpload(); + if (this.dz._taskInfo && this.dz._taskInfo.id !== undefined){ + $.ajax({ + url: `/api/projects/${this.state.data.id}/tasks/${this.dz._taskInfo.id}/remove/`, + contentType: 'application/json', + dataType: 'json', + type: 'POST' + }); + } + setTimeout(() => { + this.manuallyCanceled = false; + }, 500); + } + taskDeleted(){ this.refresh(); } @@ -628,7 +651,7 @@ class ProjectListItem extends React.Component { diff --git a/app/static/app/js/vendor/dropzone.js b/app/static/app/js/vendor/dropzone.js index 0beabbb3..e904e1f7 100644 --- a/app/static/app/js/vendor/dropzone.js +++ b/app/static/app/js/vendor/dropzone.js @@ -2199,6 +2199,8 @@ var Dropzone = function (_Emitter) { }, { key: "cancelUpload", value: function cancelUpload(file) { + if (file === undefined) return; + if (file.status === Dropzone.UPLOADING) { var groupedFiles = this._getFilesWithXhr(file.xhr); for (var _iterator19 = groupedFiles, _isArray19 = true, _i20 = 0, _iterator19 = _isArray19 ? _iterator19 : _iterator19[Symbol.iterator]();;) { diff --git a/package.json b/package.json index 1018c1b4..d18eabf8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "WebODM", - "version": "2.2.0", + "version": "2.2.1", "description": "User-friendly, extendable application and API for processing aerial imagery.", "main": "index.js", "scripts": {