]> source.dussan.org Git - nextcloud-server.git/commitdiff
Check for target folder available quota when uploading
authorJulius Härtl <jus@bitgrid.net>
Fri, 13 Nov 2020 11:46:12 +0000 (12:46 +0100)
committerJulius Härtl <jus@bitgrid.net>
Tue, 17 Nov 2020 14:33:54 +0000 (15:33 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
apps/files/js/file-upload.js
apps/files/js/filelist.js
apps/files/tests/js/filelistSpec.js

index 691131293a851a47f892397e77a06b3e785c2ab6..3c0ca31922506dc9393d746bc984a39d4e70643c 100644 (file)
@@ -918,7 +918,7 @@ OC.Uploader.prototype = _.extend({
                                 */
                                add: function(e, data) {
                                        self.log('add', e, data);
-                                       var that = $(this), freeSpace;
+                                       var that = $(this), freeSpace = 0;
 
                                        var upload = new OC.FileUpload(self, data);
                                        // can't link directly due to jQuery not liking cyclic deps on its ajax object
@@ -989,13 +989,20 @@ OC.Uploader.prototype = _.extend({
                                        }
 
                                        // check free space
-                                       freeSpace = $('#free_space').val();
+                                       if (!self.fileList || upload.getTargetFolder() === self.fileList.getCurrentDirectory()) {
+                                               // Use global free space if there is no file list to check or the current directory is the target
+                                               freeSpace = $('#free_space').val()
+                                       } else if (upload.getTargetFolder().indexOf(self.fileList.getCurrentDirectory()) === 0) {
+                                               // Check subdirectory free space if file is uploaded there
+                                               var targetSubdir = upload._targetFolder.replace(self.fileList.getCurrentDirectory(), '')
+                                               freeSpace = parseInt(upload.uploader.fileList.getModelForFile(targetSubdir).get('quotaAvailableBytes'))
+                                       }
                                        if (freeSpace >= 0 && selection.totalBytes > freeSpace) {
                                                data.textStatus = 'notenoughspace';
                                                data.errorThrown = t('files',
                                                        'Not enough free space, you are uploading {size1} but only {size2} is left', {
                                                        'size1': OC.Util.humanFileSize(selection.totalBytes),
-                                                       'size2': OC.Util.humanFileSize($('#free_space').val())
+                                                       'size2': OC.Util.humanFileSize(freeSpace)
                                                });
                                        }
 
index e157b91b04d0991c91741ef55c982baf69ace76a..f2ea902ab90890897602a64c22125d88f3841111 100644 (file)
                                mtime: parseInt($el.attr('data-mtime'), 10),
                                type: $el.attr('data-type'),
                                etag: $el.attr('data-etag'),
+                               quotaAvailableBytes: $el.attr('data-quota'),
                                permissions: parseInt($el.attr('data-permissions'), 10),
                                hasPreview: $el.attr('data-has-preview') === 'true',
                                isEncrypted: $el.attr('data-e2eencrypted') === 'true'
                                "data-mime": mime,
                                "data-mtime": mtime,
                                "data-etag": fileData.etag,
+                               "data-quota": fileData.quotaAvailableBytes,
                                "data-permissions": permissions,
                                "data-has-preview": fileData.hasPreview !== false,
                                "data-e2eencrypted": fileData.isEncrypted === true
index ee70a1452a9212b4c8f497c2c97e1726a0a5c6ac..90861faee55ac13e3e1a7a22986d4ea9bfe515af 100644 (file)
@@ -2232,6 +2232,7 @@ describe('OCA.Files.FileList tests', function() {
                                        type: 'file',
                                        size: 12,
                                        etag: 'abc',
+                                       quotaAvailableBytes: '-1',
                                        permissions: OC.PERMISSION_ALL,
                                        hasPreview: true,
                                        isEncrypted: false
@@ -2243,6 +2244,7 @@ describe('OCA.Files.FileList tests', function() {
                                        mimetype: 'application/pdf',
                                        mtime: 234560000,
                                        size: 58009,
+                                       quotaAvailableBytes: '-1',
                                        etag: '123',
                                        permissions: OC.PERMISSION_ALL,
                                        hasPreview: true,
@@ -2255,6 +2257,7 @@ describe('OCA.Files.FileList tests', function() {
                                        mimetype: 'httpd/unix-directory',
                                        mtime: 134560000,
                                        size: 250,
+                                       quotaAvailableBytes: '-1',
                                        etag: '456',
                                        permissions: OC.PERMISSION_ALL,
                                        hasPreview: true,
@@ -2278,6 +2281,7 @@ describe('OCA.Files.FileList tests', function() {
                                        mtime: 123456789,
                                        type: 'file',
                                        size: 12,
+                                       quotaAvailableBytes: '-1',
                                        etag: 'abc',
                                        permissions: OC.PERMISSION_ALL,
                                        hasPreview: true,
@@ -2290,6 +2294,7 @@ describe('OCA.Files.FileList tests', function() {
                                        mimetype: 'httpd/unix-directory',
                                        mtime: 134560000,
                                        size: 250,
+                                       quotaAvailableBytes: '-1',
                                        etag: '456',
                                        permissions: OC.PERMISSION_ALL,
                                        hasPreview: true,