Merge pull request #24102 from nextcloud/bugfix/noid/quota-upload
Check quota of subdirectories when uploading to them
This commit is contained in:
commit
5acabcf5cb
|
@ -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)
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2238,6 +2238,7 @@ describe('OCA.Files.FileList tests', function() {
|
|||
type: 'file',
|
||||
size: 12,
|
||||
etag: 'abc',
|
||||
quotaAvailableBytes: '-1',
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
hasPreview: true,
|
||||
isEncrypted: false
|
||||
|
@ -2249,6 +2250,7 @@ describe('OCA.Files.FileList tests', function() {
|
|||
mimetype: 'application/pdf',
|
||||
mtime: 234560000,
|
||||
size: 58009,
|
||||
quotaAvailableBytes: '-1',
|
||||
etag: '123',
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
hasPreview: true,
|
||||
|
@ -2261,6 +2263,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,
|
||||
|
@ -2284,6 +2287,7 @@ describe('OCA.Files.FileList tests', function() {
|
|||
mtime: 123456789,
|
||||
type: 'file',
|
||||
size: 12,
|
||||
quotaAvailableBytes: '-1',
|
||||
etag: 'abc',
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
hasPreview: true,
|
||||
|
@ -2296,6 +2300,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
|
@ -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) || {})
|
||||
|
|
|
@ -139,6 +139,8 @@
|
|||
* @type int
|
||||
*/
|
||||
sharePermissions: null,
|
||||
|
||||
quotaAvailableBytes: -1,
|
||||
}
|
||||
|
||||
if (!OC.Files) {
|
||||
|
|
Loading…
Reference in New Issue