diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index 4f93403baf5fc40c190a5c74578b563792669ba2..47d1188b511adf72f0eb768fa9ac67f4b2cd6dd3 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -124,43 +124,12 @@ function supportAjaxUploadWithProgress() { //TODO clean uploads when all progress has completed OC.Upload = { - /** - * map to lookup the selections for a given directory. - * @type Array - */ - _selections: {}, - _selectionCount: 0, - /* - * queue which progress tracker to use for the next upload - * @type Array - */ - _queue: [], - queueUpload:function(data) { - // add to queue - this._queue.push(data); //remember what to upload next - if ( ! this.isProcessing() ) { - this.startUpload(); - } - }, - getSelection:function(originalFiles) { - if (!originalFiles.selectionKey) { - originalFiles.selectionKey = 'selection-' + this._selectionCount++; - this._selections[originalFiles.selectionKey] = { - selectionKey:originalFiles.selectionKey, - files:{}, - totalBytes:0, - loadedBytes:0, - currentFile:0, - uploads:{}, - checked:false - }; - } - return this._selections[originalFiles.selectionKey]; - }, + _uploads: [], cancelUpload:function(dir, filename) { var self = this; var deleted = false; - jQuery.each(this._selections, function(i, selection) { + //FIXME _selections + jQuery.each(this._uploads, function(i, jqXHR) { if (selection.dir === dir && selection.uploads[filename]) { deleted = self.deleteSelectionUpload(selection, filename); return false; // end searching through selections @@ -168,69 +137,34 @@ OC.Upload = { }); return deleted; }, + deleteUpload:function(data) { + delete data.jqXHR; + }, cancelUploads:function() { console.log('canceling uploads'); - var self = this; - jQuery.each(this._selections,function(i, selection){ - self.deleteSelection(selection.selectionKey); + jQuery.each(this._uploads,function(i, jqXHR){ + jqXHR.abort(); }); - this._queue = []; - this._isProcessing = false; - }, - _isProcessing:false, - isProcessing:function(){ - return this._isProcessing; + this._uploads = []; + }, - startUpload:function(){ - if (this._queue.length > 0) { - this._isProcessing = true; - this.nextUpload(); - return true; - } else { - return false; + rememberUpload:function(jqXHR){ + if (jqXHR) { + this._uploads.push(jqXHR); } }, - nextUpload:function(){ - if (this._queue.length > 0) { - var data = this._queue.pop(); - var selection = this.getSelection(data.originalFiles); - selection.uploads[data.files[0]] = data.submit(); - - } else { - //queue is empty, we are done - this._isProcessing = false; - OC.Upload.cancelUploads(); - } - }, - progressBytes: function() { - var total = 0; - var loaded = 0; - jQuery.each(this._selections, function (i, selection) { - total += selection.totalBytes; - loaded += selection.loadedBytes; - }); - return (loaded/total)*100; - }, - loadedBytes: function() { - var loaded = 0; - jQuery.each(this._selections, function (i, selection) { - loaded += selection.loadedBytes; - }); - return loaded; - }, - totalBytes: function() { - var total = 0; - jQuery.each(this._selections, function (i, selection) { - total += selection.totalBytes; + isProcessing:function(){ + var count = 0; + + jQuery.each(this._uploads,function(i, data){ + if (data.state() === 'pending') { + count++; + } }); - return total; + return count > 0; }, onCancel:function(data) { - //TODO cancel all uploads of this selection - - var selection = this.getSelection(data.originalFiles); - OC.Upload.deleteSelection(selection.selectionKey); - //FIXME hide progressbar + this.cancelUploads(); }, onContinue:function(conflicts) { var self = this; @@ -253,19 +187,16 @@ OC.Upload = { }); }, onSkip:function(data){ - OC.Upload.logStatus('skip', null, data); - //var selection = this.getSelection(data.originalFiles); - //selection.loadedBytes += data.loaded; - //this.nextUpload(); - //TODO trigger skip? what about progress? + this.logStatus('skip', null, data); + this.deleteUpload(data); }, onReplace:function(data){ - OC.Upload.logStatus('replace', null, data); + this.logStatus('replace', null, data); data.data.append('resolution', 'replace'); data.submit(); }, onAutorename:function(data){ - OC.Upload.logStatus('autorename', null, data); + this.logStatus('autorename', null, data); data.data.append('resolution', 'autorename'); data.submit(); }, @@ -415,6 +346,9 @@ $(document).ready(function() { start: function(e) { OC.Upload.logStatus('start', e, null); }, + submit: function (e, data) { + OC.Upload.rememberUpload(data); + }, fail: function(e, data) { OC.Upload.logStatus('fail', e, data); if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) { @@ -432,6 +366,7 @@ $(document).ready(function() { } //var selection = OC.Upload.getSelection(data.originalFiles); //OC.Upload.deleteSelectionUpload(selection, data.files[0].name); + OC.Upload.deleteUpload(data); }, /** * called for every successful upload @@ -449,8 +384,9 @@ $(document).ready(function() { response = data.result[0].body.innerText; } var result=$.parseJSON(response); - //var selection = OC.Upload.getSelection(data.originalFiles); + delete data.jqXHR; + if(typeof result[0] === 'undefined') { data.textStatus = 'servererror'; data.errorThrown = t('files', 'Could not get result from server.'); @@ -463,7 +399,7 @@ $(document).ready(function() { var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu); } else if (result[0].status !== 'success') { - delete data.jqXHR; + //delete data.jqXHR; data.textStatus = 'servererror'; data.errorThrown = t('files', result.data.message); var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 1bb9672f961a763e07dc6172bae06167b9297d3e..a96f555ac0b91ffa8353c95c277b2267f6714813 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -522,6 +522,9 @@ $(document).ready(function(){ var dropTarget = $(e.originalEvent.target).closest('tr'); if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder + // remember as context + data.context = dropTarget; + var dir = dropTarget.data('file'); // update folder in form @@ -546,19 +549,15 @@ $(document).ready(function(){ OC.Upload.logStatus('filelist handle fileuploadadd', e, data); // lookup selection for dir - var selection = OC.Upload.getSelection(data.originalFiles); + //var selection = OC.Upload.getSelection(data.originalFiles); if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file FileList.finishDelete(null, true); //delete file before continuing } // add ui visualization to existing folder - if(selection.dropTarget && selection.dropTarget.data('type') === 'dir') { + if(data.context && data.context.data('type') === 'dir') { // add to existing folder - var dirName = selection.dropTarget.data('file'); - - // set dir context - data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName); // update upload counter ui var uploadtext = data.context.find('.uploadtext'); @@ -578,6 +577,10 @@ $(document).ready(function(){ } }); + file_upload_start.on('fileuploadsend', function(e, data) { + OC.Upload.logStatus('filelist handle fileuploadsend', e, data); + return true; + }); file_upload_start.on('fileuploadstart', function(e, data) { OC.Upload.logStatus('filelist handle fileuploadstart', e, data); }); @@ -608,7 +611,7 @@ $(document).ready(function(){ var img = OC.imagePath('core', 'filetypes/folder.png'); data.context.find('td.filename').attr('style','background-image:url('+img+')'); uploadtext.text(translatedText); - uploadtext.show(); + uploadtext.hide(); } else { uploadtext.text(translatedText); } @@ -648,6 +651,7 @@ $(document).ready(function(){ } //if user pressed cancel hide upload chrome + /* if (! OC.Upload.isProcessing()) { //cleanup uploading to a dir var uploadtext = $('tr .uploadtext'); @@ -656,6 +660,7 @@ $(document).ready(function(){ uploadtext.fadeOut(); uploadtext.attr('currentUploads', 0); } + */ }); file_upload_start.on('fileuploadalways', function(e, data) { @@ -677,7 +682,7 @@ $(document).ready(function(){ OC.Upload.logStatus('filelist handle fileuploadstop', e, data); //if user pressed cancel hide upload chrome - if (! OC.Upload.isProcessing()) { + if (data.errorThrown === 'abort') { //cleanup uploading to a dir var uploadtext = $('tr .uploadtext'); var img = OC.imagePath('core', 'filetypes/folder.png'); diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js index fd77f5998b5ab2f74c4163326061f2d4637dea91..bc46079835072dad470d1160580ef5dc27f401f8 100644 --- a/core/js/oc-dialogs.js +++ b/core/js/oc-dialogs.js @@ -262,10 +262,10 @@ var OCdialogs = { //TODO show skip action for files with same size and mtime in bottom row }; - var selection = controller.getSelection(data.originalFiles); - if (selection.defaultAction) { - controller[selection.defaultAction](data); - } else { + //var selection = controller.getSelection(data.originalFiles); + //if (selection.defaultAction) { + // controller[selection.defaultAction](data); + //} else { var dialog_name = 'oc-dialog-fileexists-content'; var dialog_id = '#' + dialog_name; if (this._fileexistsshown) { @@ -306,6 +306,7 @@ var OCdialogs = { if ( typeof controller.onCancel !== 'undefined') { controller.onCancel(data); } + $(dialog_id).ocdialog('close'); $(dialog_id).ocdialog('destroy').remove(); } }, @@ -382,7 +383,7 @@ var OCdialogs = { alert(t('core', 'Error loading file exists template')); }); } - } + //} }, _getFilePickerTemplate: function() { var defer = $.Deferred();