Merge pull request #24181 from nextcloud/backport/24102/stable20

[stable20] Check quota of subdirectories when uploading to them
This commit is contained in:
Roeland Jago Douma 2020-11-19 10:40:11 +01:00 committed by GitHub
commit 8021bacbdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 30 additions and 13 deletions

View 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)
});
}

View File

@ -1236,6 +1236,7 @@
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'
@ -1495,6 +1496,7 @@
"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

View 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,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -82,6 +82,7 @@ import escapeHTML from 'escape-html'
Client.PROPERTY_GETCONTENTLENGTH = '{' + Client.NS_DAV + '}getcontentlength'
Client.PROPERTY_ISENCRYPTED = '{' + Client.NS_DAV + '}is-encrypted'
Client.PROPERTY_SHARE_PERMISSIONS = '{' + Client.NS_OCS + '}share-permissions'
Client.PROPERTY_QUOTA_AVAILABLE_BYTES = '{' + Client.NS_DAV + '}quota-available-bytes'
Client.PROTOCOL_HTTP = 'http'
Client.PROTOCOL_HTTPS = 'https'
@ -120,6 +121,7 @@ import escapeHTML from 'escape-html'
* File sizes
*/
[Client.NS_DAV, 'getcontentlength'],
[Client.NS_DAV, 'quota-available-bytes'],
/**
* Preview availability
*/
@ -397,6 +399,11 @@ import escapeHTML from 'escape-html'
data.mountType = mounTypeProp
}
const quotaAvailableBytes = props['{' + Client.NS_DAV + '}quota-available-bytes']
if (!_.isUndefined(quotaAvailableBytes)) {
data.quotaAvailableBytes = quotaAvailableBytes
}
// extend the parsed data using the custom parsers
_.each(this._fileInfoParsers, function(parserFunction) {
_.extend(data, parserFunction(response, data) || {})

View File

@ -139,6 +139,8 @@
* @type int
*/
sharePermissions: null,
quotaAvailableBytes: -1,
}
if (!OC.Files) {