diff options
-rw-r--r-- | filexfer.js | 12 | ||||
-rw-r--r-- | main.js | 9 |
2 files changed, 21 insertions, 0 deletions
diff --git a/filexfer.js b/filexfer.js index 2887e14..beabfd8 100644 --- a/filexfer.js +++ b/filexfer.js @@ -26,9 +26,20 @@ function SpiceFileXferTask(id, file) SpiceFileXferTask.prototype.create_progressbar = function() { + var _this = this; + var cancel = document.createElement("input"); this.progressbar_container = document.createElement("div"); this.progressbar = document.createElement("progress"); + cancel.type = 'button'; + cancel.value = 'Cancel'; + cancel.style.float = 'right'; + cancel.onclick = function() + { + _this.cancelled = true; + _this.remove_progressbar(); + }; + this.progressbar.setAttribute('max', this.file.size); this.progressbar.setAttribute('value', 0); this.progressbar.style.width = '100%'; @@ -38,6 +49,7 @@ SpiceFileXferTask.prototype.create_progressbar = function() this.progressbar_container.style.margin = 'auto'; this.progressbar_container.style.padding = '4px'; this.progressbar_container.textContent = this.file.name; + this.progressbar_container.appendChild(cancel); this.progressbar_container.appendChild(this.progressbar); document.getElementById('spice-xfer-area').appendChild(this.progressbar_container); } @@ -338,6 +338,15 @@ SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte) return; } + if (file_xfer_task.cancelled) + { + var xfer_status = new VDAgentFileXferStatusMessage(file_xfer_task.id, + VD_AGENT_FILE_XFER_STATUS_CANCELLED); + this.send_agent_message(VD_AGENT_FILE_XFER_STATUS, xfer_status); + delete this.file_xfer_tasks[file_xfer_task.id]; + return; + } + sb = start_byte || 0, eb = Math.min(sb + FILE_XFER_CHUNK_SIZE, file_xfer_task.file.size); |