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(/\/$/, "");
+ var currentDirectory = self.getCurrentDirectory().replace('/','').replace(/\/$/, "") + '/';
+
+ 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);
+ }
- var fileDirectory = file.directory.replace('/','').replace(/\/$/, "").split('/');
+ // only take the first section of the path
+ fileDirectory = fileDirectory.split('/');
- if (fileDirectory.length === 1) {
+ 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,
size: 0,
id: file.parentId
};
- self.add(dir, {insert: true});
+ fd = self.add(dir, {insert: true});
}
- } else {
- fileDirectory = fileDirectory[0];
- }
- 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));
+ // 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));
+ }
return;
}
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 = {
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;
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');
});
});
});