Fix appending of rows after upload

When uploading files or folders, they only need to be appended or
updated when their path or a section of their path is inside the current
directory (which happens for folder upload)

Fixes issue where file was appended when dragging on a parent directory
onto the breadcrumb.

Fixes appending issue when uploading folders.
This commit is contained in:
Vincent Petry 2014-06-19 17:19:28 +02:00
parent 9ef7410abe
commit 8ae2468345
2 changed files with 33 additions and 40 deletions

View File

@ -1649,15 +1649,34 @@
data.context.find('td.filesize').text(humanFileSize(size));
} else {
// only append new file if uploaded into the current folder
if (file.directory !== '/' && file.directory !== self.getCurrentDirectory()) {
if (file.directory !== self.getCurrentDirectory()) {
// Uploading folders actually uploads a list of files
// for which the target directory (file.directory) might lie deeper
// than the current directory
var fileDirectory = file.directory.replace('/','').replace(/\/$/, "").split('/');
var fileDirectory = file.directory.replace('/','').replace(/\/$/, "");
var currentDirectory = self.getCurrentDirectory().replace('/','').replace(/\/$/, "") + '/';
if (fileDirectory.length === 1) {
if (currentDirectory !== '/') {
// abort if fileDirectory does not start with current one
if (fileDirectory.indexOf(currentDirectory) !== 0) {
return;
}
// remove the current directory part
fileDirectory = fileDirectory.substr(currentDirectory.length);
}
// only take the first section of the path
fileDirectory = fileDirectory.split('/');
var fd;
// if the first section exists / is a subdir
if (fileDirectory.length) {
fileDirectory = fileDirectory[0];
// Get the directory
var fd = self.findFileEl(fileDirectory);
// See whether it is already in the list
fd = self.findFileEl(fileDirectory);
if (fd.length === 0) {
var dir = {
name: fileDirectory,
@ -1667,20 +1686,16 @@
size: 0,
id: file.parentId
};
self.add(dir, {insert: true});
fd = self.add(dir, {insert: true});
}
} else {
fileDirectory = fileDirectory[0];
// update folder size
size = parseInt(fd.attr('data-size'), 10);
size += parseInt(file.size, 10);
fd.attr('data-size', size);
fd.find('td.filesize').text(OC.Util.humanFileSize(size));
}
fileDirectory = self.findFileEl(fileDirectory);
// update folder size
size = parseInt(fileDirectory.attr('data-size'), 10);
size += parseInt(file.size, 10);
fileDirectory.attr('data-size', size);
fileDirectory.find('td.filesize').text(humanFileSize(size));
return;
}

View File

@ -1730,20 +1730,6 @@ describe('OCA.Files.FileList tests', function() {
return ev;
}
/**
* Convert form data to a flat list
*
* @param formData form data array as used by jquery.upload
* @return map based on the array's key values
*/
function decodeFormData(data) {
var map = {};
_.each(data.formData(), function(entry) {
map[entry.name] = entry.value;
});
return map;
}
beforeEach(function() {
// simulate data structure from jquery.upload
uploadData = {
@ -1803,11 +1789,7 @@ describe('OCA.Files.FileList tests', function() {
ev = dropOn(fileList.findFileEl('somedir').find('td:eq(2)'), uploadData);
expect(ev.result).not.toEqual(false);
expect(uploadData.formData).toBeDefined();
formData = decodeFormData(uploadData);
expect(formData.dir).toEqual('/subdir/somedir');
expect(formData.file_directory).toEqual('fileToUpload.txt');
expect(formData.requesttoken).toBeDefined();
expect(uploadData.targetDir).toEqual('/subdir/somedir');
});
it('drop on a breadcrumb inside the table triggers upload to target folder', function() {
var ev, formData;
@ -1815,11 +1797,7 @@ describe('OCA.Files.FileList tests', function() {
ev = dropOn(fileList.$el.find('.crumb:eq(2)'), uploadData);
expect(ev.result).not.toEqual(false);
expect(uploadData.formData).toBeDefined();
formData = decodeFormData(uploadData);
expect(formData.dir).toEqual('/a/b');
expect(formData.file_directory).toEqual('fileToUpload.txt');
expect(formData.requesttoken).toBeDefined();
expect(uploadData.targetDir).toEqual('/a/b');
});
});
});