Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Use correct unit for file sizes and fix user quota #40621

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/files/src/components/NavigationQuota.vue
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ export default {

computed: {
storageStatsTitle() {
const usedQuotaByte = formatFileSize(this.storageStats?.used, false, false)
const quotaByte = formatFileSize(this.storageStats?.quota, false, false)
const usedQuotaByte = formatFileSize(this.storageStats?.used, false)
const quotaByte = formatFileSize(this.storageStats?.quota, false)

// If no quota set
if (this.storageStats?.quota < 0) {
Expand Down
18 changes: 9 additions & 9 deletions apps/files/src/views/Navigation.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe('Navigation renders', () => {

before(() => {
cy.mockInitialState('files', 'storageStats', {
used: 1000 * 1000 * 1000,
used: 1024 * 1024 * 1024,
quota: -1,
})
})
Expand Down Expand Up @@ -178,7 +178,7 @@ describe('Quota rendering', () => {

it('Unlimited quota', () => {
cy.mockInitialState('files', 'storageStats', {
used: 1000 * 1000 * 1000,
used: 1024 * 1024 * 1024,
quota: -1,
})

Expand All @@ -194,14 +194,14 @@ describe('Quota rendering', () => {
})

cy.get('[data-cy-files-navigation-settings-quota]').should('be.visible')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '1 GB used')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '1 GiB used')
cy.get('[data-cy-files-navigation-settings-quota] progress').should('not.exist')
})

it('Non-reached quota', () => {
cy.mockInitialState('files', 'storageStats', {
used: 1000 * 1000 * 1000,
quota: 5 * 1000 * 1000 * 1000,
used: 1024 * 1024 * 1024,
quota: 5 * 1024 * 1024 * 1024,
relative: 20, // percent
})

Expand All @@ -217,15 +217,15 @@ describe('Quota rendering', () => {
})

cy.get('[data-cy-files-navigation-settings-quota]').should('be.visible')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '1 GB of 5 GB used')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '1 GiB of 5 GiB used')
cy.get('[data-cy-files-navigation-settings-quota] progress').should('be.visible')
cy.get('[data-cy-files-navigation-settings-quota] progress').should('have.attr', 'value', '20')
})

it('Reached quota', () => {
cy.mockInitialState('files', 'storageStats', {
used: 5 * 1000 * 1000 * 1000,
quota: 1000 * 1000 * 1000,
used: 5 * 1024 * 1024 * 1024,
quota: 1024 * 1024 * 1024,
relative: 500, // percent
})

Expand All @@ -241,7 +241,7 @@ describe('Quota rendering', () => {
})

cy.get('[data-cy-files-navigation-settings-quota]').should('be.visible')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '5 GB of 1 GB used')
cy.get('[data-cy-files-navigation-settings-quota]').should('contain.text', '5 GiB of 1 GiB used')
cy.get('[data-cy-files-navigation-settings-quota] progress').should('be.visible')
cy.get('[data-cy-files-navigation-settings-quota] progress').should('have.attr', 'value', '100') // progress max is 100
})
Expand Down
16 changes: 8 additions & 8 deletions apps/files/tests/js/filelistSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ describe('OCA.Files.FileList tests', function() {
.toEqual(OC.getRootPath() + '/remote.php/webdav/subdir/testName.txt');
expect($tr.find('.nametext').text().trim()).toEqual('testName.txt');

expect($tr.find('.filesize').text()).toEqual('1 KB');
expect($tr.find('.filesize').text()).toEqual('1 KiB');
expect($tr.find('.date').text()).not.toEqual('?');
expect(fileList.findFileEl('testName.txt')[0]).toEqual($tr[0]);
});
Expand Down Expand Up @@ -307,7 +307,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.attr('data-e2eencrypted')).toEqual('false');

expect($tr.find('.filesize').text()).toEqual('1 KB');
expect($tr.find('.filesize').text()).toEqual('1 KiB');
expect($tr.find('.date').text()).not.toEqual('?');

expect(fileList.findFileEl('testFolder')[0]).toEqual($tr[0]);
Expand Down Expand Up @@ -380,7 +380,7 @@ describe('OCA.Files.FileList tests', function() {
size: '0'
};
var $tr = fileList.add(fileData);
expect($tr.find('.filesize').text()).toEqual('0 KB');
expect($tr.find('.filesize').text()).toEqual('0 KiB');
});
it('generates file element with unknown date when mtime invalid', function() {
var fileData = {
Expand Down Expand Up @@ -539,7 +539,7 @@ describe('OCA.Files.FileList tests', function() {
expect($summary.find('.fileinfo').text()).toEqual('2 files');
expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
expect($summary.find('.filesize').text()).toEqual('70 KB');
expect($summary.find('.filesize').text()).toEqual('69 KiB');
expect(fileList.isEmpty).toEqual(false);
});
it('Shows empty content when removing last file', function() {
Expand Down Expand Up @@ -609,7 +609,7 @@ describe('OCA.Files.FileList tests', function() {
expect($summary.find('.fileinfo').text()).toEqual('1 file');
expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
expect($summary.find('.filesize').text()).toEqual('58 KB');
expect($summary.find('.filesize').text()).toEqual('57 KiB');
expect(fileList.isEmpty).toEqual(false);
expect($('.files-filestable thead th').hasClass('hidden')).toEqual(false);
expect($('.emptyfilelist.emptycontent').hasClass('hidden')).toEqual(true);
Expand Down Expand Up @@ -959,7 +959,7 @@ describe('OCA.Files.FileList tests', function() {

// folder size has increased
expect(fileList.findFileEl('somedir').data('size')).toEqual(12311);
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KB');
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KiB');

expect(notificationStub.notCalled).toEqual(true);
}).then(done, done);
Expand Down Expand Up @@ -1062,7 +1062,7 @@ describe('OCA.Files.FileList tests', function() {

// folder size has increased
expect(fileList.findFileEl('somedir').data('size')).toEqual(12311);
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KB');
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KiB');

expect(notificationStub.notCalled).toEqual(false);
}).then(done, done);
Expand Down Expand Up @@ -1138,7 +1138,7 @@ describe('OCA.Files.FileList tests', function() {
expect($summary.hasClass('hidden')).toEqual(false);
expect($summary.find('.dirinfo').text()).toEqual('1 folder');
expect($summary.find('.fileinfo').text()).toEqual('3 files');
expect($summary.find('.filesize').text()).toEqual('70 KB');
expect($summary.find('.filesize').text()).toEqual('69 KiB');
});
it('shows headers, summary and hide empty content message after setting files', function(){
fileList.setFiles(testFiles);
Expand Down
60 changes: 30 additions & 30 deletions apps/files/tests/js/filesummarySpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ describe('OCA.Files.FileSummary tests', function() {
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000
totalSize: 256*1024,
});
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('5 folders');
expect($container.find('.fileinfo').text()).toEqual('2 files');
expect($container.find('.filesize').text()).toEqual('256 KB');
expect($container.find('.filesize').text()).toEqual('256 KiB');
});
it('hides summary when no files or folders', function() {
var s = new FileSummary($container);
Expand All @@ -60,51 +60,51 @@ describe('OCA.Files.FileSummary tests', function() {
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000
totalSize: 256*1024
});
s.add({type: 'file', size: 256000});
s.add({type: 'file', size: 256*1024});
s.add({type: 'dir', size: 100});
s.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('6 folders');
expect($container.find('.fileinfo').text()).toEqual('3 files');
expect($container.find('.filesize').text()).toEqual('512 KB');
expect($container.find('.filesize').text()).toEqual('512 KiB');
expect(s.summary.totalDirs).toEqual(6);
expect(s.summary.totalFiles).toEqual(3);
expect(s.summary.totalSize).toEqual(512100);
expect(s.summary.totalSize).toEqual(512*1024 + 100);
});
it('decreases summary when removing files', function() {
var s = new FileSummary($container);
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000
totalSize: 256*1024
});
s.remove({type: 'file', size: 128000});
s.remove({type: 'file', size: 128*1024});
s.remove({type: 'dir', size: 100});
s.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('4 folders');
expect($container.find('.fileinfo').text()).toEqual('1 file');
expect($container.find('.filesize').text()).toEqual('128 KB');
expect($container.find('.filesize').text()).toEqual('128 KiB');
expect(s.summary.totalDirs).toEqual(4);
expect(s.summary.totalFiles).toEqual(1);
expect(s.summary.totalSize).toEqual(127900);
expect(s.summary.totalSize).toEqual(128*1024 - 100);
});

it('renders filtered summary as text', function() {
var s = new FileSummary($container);
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000,
totalSize: 256*1024,
filter: 'foo'
});
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('5 folders');
expect($container.find('.fileinfo').text()).toEqual('2 files');
expect($container.find('.filter').text()).toEqual(' match "foo"');
expect($container.find('.filesize').text()).toEqual('256 KB');
expect($container.find('.filesize').text()).toEqual('256 KiB');
});
it('hides filtered summary when no files or folders', function() {
var s = new FileSummary($container);
Expand All @@ -121,44 +121,44 @@ describe('OCA.Files.FileSummary tests', function() {
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000,
totalSize: 256*1024,
filter: 'foo'
});
s.add({name: 'bar.txt', type: 'file', size: 256000});
s.add({name: 'foo.txt', type: 'file', size: 256001});
s.add({name: 'bar.txt', type: 'file', size: 256*1024});
s.add({name: 'foo.txt', type: 'file', size: 256*1024 + 1});
s.add({name: 'bar', type: 'dir', size: 100});
s.add({name: 'foo', type: 'dir', size: 102});
s.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('6 folders');
expect($container.find('.fileinfo').text()).toEqual('3 files');
expect($container.find('.filter').text()).toEqual(' match "foo"');
expect($container.find('.filesize').text()).toEqual('512 KB');
expect($container.find('.filesize').text()).toEqual('512 KiB');
expect(s.summary.totalDirs).toEqual(6);
expect(s.summary.totalFiles).toEqual(3);
expect(s.summary.totalSize).toEqual(512103);
expect(s.summary.totalSize).toEqual(512*1024 + 1 + 102);
});
it('decreases filtered summary when removing files', function() {
var s = new FileSummary($container);
s.setSummary({
totalDirs: 5,
totalFiles: 2,
totalSize: 256000,
totalSize: 256*1024,
filter: 'foo'
});
s.remove({name: 'bar.txt', type: 'file', size: 128000});
s.remove({name: 'foo.txt', type: 'file', size: 127999});
s.remove({name: 'bar.txt', type: 'file', size: 128*1024});
s.remove({name: 'foo.txt', type: 'file', size: 128*1024 - 1});
s.remove({name: 'bar', type: 'dir', size: 100});
s.remove({name: 'foo', type: 'dir', size: 98});
s.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('4 folders');
expect($container.find('.fileinfo').text()).toEqual('1 file');
expect($container.find('.filter').text()).toEqual(' match "foo"');
expect($container.find('.filesize').text()).toEqual('128 KB');
expect($container.find('.filesize').text()).toEqual('128 KiB');
expect(s.summary.totalDirs).toEqual(4);
expect(s.summary.totalFiles).toEqual(1);
expect(s.summary.totalSize).toEqual(127903);
expect(s.summary.totalSize).toEqual(256*1024 - (128*1024 - 1) - 98);
});
it('properly sum up pending folder sizes after adding', function() {
var s = new FileSummary($container);
Expand Down Expand Up @@ -206,41 +206,41 @@ describe('OCA.Files.FileSummary tests', function() {
it('renders hidden count section when hidden files are hidden', function() {
window._nc_event_bus.emit('files:config:updated', { key: 'show_hidden', value: false });

summary.add({name: 'abc', type: 'file', size: 256000});
summary.add({name: 'abc', type: 'file', size: 256*1024});
summary.add({name: 'def', type: 'dir', size: 100});
summary.add({name: '.hidden', type: 'dir', size: 512000});
summary.add({name: '.hidden', type: 'dir', size: 512*1024});
summary.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('2 folders');
expect($container.find('.fileinfo').text()).toEqual('1 file');
expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(false);
expect($container.find('.hiddeninfo').text()).toEqual(' (including 1 hidden)');
expect($container.find('.filesize').text()).toEqual('768 KB');
expect($container.find('.filesize').text()).toEqual('768 KiB');
});
it('does not render hidden count section when hidden files exist but are visible', function() {
window._nc_event_bus.emit('files:config:updated', { key: 'show_hidden', value: true });

summary.add({name: 'abc', type: 'file', size: 256000});
summary.add({name: 'abc', type: 'file', size: 256*1024});
summary.add({name: 'def', type: 'dir', size: 100});
summary.add({name: '.hidden', type: 'dir', size: 512000});
summary.add({name: '.hidden', type: 'dir', size: 512*1024});
summary.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('2 folders');
expect($container.find('.fileinfo').text()).toEqual('1 file');
expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(true);
expect($container.find('.filesize').text()).toEqual('768 KB');
expect($container.find('.filesize').text()).toEqual('768 KiB');
});
it('does not render hidden count section when no hidden files exist', function() {
window._nc_event_bus.emit('files:config:updated', { key: 'show_hidden', value: false });

summary.add({name: 'abc', type: 'file', size: 256000});
summary.add({name: 'abc', type: 'file', size: 256*1024});
summary.add({name: 'def', type: 'dir', size: 100});
summary.update();
expect($container.hasClass('hidden')).toEqual(false);
expect($container.find('.dirinfo').text()).toEqual('1 folder');
expect($container.find('.fileinfo').text()).toEqual('1 file');
expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(true);
expect($container.find('.filesize').text()).toEqual('256 KB');
expect($container.find('.filesize').text()).toEqual('256 KiB');
});
});
});
2 changes: 1 addition & 1 deletion apps/files/tests/js/mainfileinfodetailviewSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
view.setFileInfo(testFileInfo);
expect(view.$el.find('.fileName h3').text()).toEqual('One.txt');
expect(view.$el.find('.fileName h3').attr('title')).toEqual('One.txt');
expect(view.$el.find('.size').text()).toEqual('123.5 MB');
expect(view.$el.find('.size').text()).toEqual('117.7 MiB');
expect(view.$el.find('.size').attr('title')).toEqual('123456789 bytes');
expect(view.$el.find('.date').text()).toEqual('seconds ago');
expect(view.$el.find('.date').attr('title')).toEqual(dateExpected);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@ public function testShareFileDrop() {
'protected' => 'false',
'dir' => null,
'downloadURL' => '',
'fileSize' => '1 KB',
'fileSize' => '1 KiB',
'nonHumanFileSize' => 1337,
'maxSizeAnimateGif' => null,
'previewSupported' => null,
Expand Down
4 changes: 2 additions & 2 deletions apps/settings/lib/Controller/UsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ public function usersList(): TemplateResponse {
];

/* QUOTAS PRESETS */
$quotaPreset = $this->parseQuotaPreset($this->config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB'));
$quotaPreset = $this->parseQuotaPreset($this->config->getAppValue('files', 'quota_preset', '1 GiB, 5 GiB, 10 GiB'));
$allowUnlimitedQuota = $this->config->getAppValue('files', 'allow_unlimited_quota', '1') === '1';
if (!$allowUnlimitedQuota && count($quotaPreset) > 0) {
$defaultQuota = $this->config->getAppValue('files', 'default_quota', $quotaPreset[0]);
Expand Down Expand Up @@ -307,7 +307,7 @@ public function setPreference(string $key, string $value): JSONResponse {
* @return array
*/
protected function parseQuotaPreset(string $quotaPreset): array {
// 1 GB, 5 GB, 10 GB => [1 GB, 5 GB, 10 GB]
// 1 GiB, 5 GiB, 10 GiB => [1 GiB, 5 GiB, 10 GiB]
$presets = array_filter(array_map('trim', explode(',', $quotaPreset)));
// Drop default and none, Make array indexes numerically
return array_values(array_diff($presets, ['default', 'none']));
Expand Down
Loading
Loading