From 6b2f4775eda41261b363731f2a2b1695361b69c4 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 6 Dec 2023 14:09:09 +0100 Subject: [PATCH] fix(Users/Quota setting): Prevent floating point value from getting truncated in locales other than english fixes #18468 Signed-off-by: Marcel Klehr --- .../settings/src/components/Users/UserRow.vue | 20 ++++++++++--------- apps/settings/src/store/users.js | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/settings/src/components/Users/UserRow.vue b/apps/settings/src/components/Users/UserRow.vue index 68ffde11849a9..868bc21de1493 100644 --- a/apps/settings/src/components/Users/UserRow.vue +++ b/apps/settings/src/components/Users/UserRow.vue @@ -307,6 +307,7 @@ import UserRowActions from './UserRowActions.vue' import UserRowMixin from '../../mixins/UserRowMixin.js' import { isObfuscated, unlimitedQuota } from '../../utils/userUtils.ts' +import {formatFileSize, parseFileSize} from "@nextcloud/files"; export default { name: 'UserRow', @@ -435,9 +436,9 @@ export default { usedSpace() { if (this.user.quota?.used) { - return t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota?.used) }) + return t('settings', '{size} used', { size: formatFileSize(this.user.quota?.used) }) } - return t('settings', '{size} used', { size: OC.Util.humanFileSize(0) }) + return t('settings', '{size} used', { size: formatFileSize(0) }) }, canEdit() { @@ -451,7 +452,7 @@ export default { quota = this.settings.defaultQuota if (quota !== 'none') { // convert to numeric value to match what the server would usually return - quota = OC.Util.computerFileSize(quota) + quota = parseFileSize(quota, true) } } @@ -459,9 +460,9 @@ export default { if (quota === 'none' || quota === -3) { return t('settings', 'Unlimited') } else if (quota >= 0) { - return OC.Util.humanFileSize(quota) + return formatFileSize(quota) } - return OC.Util.humanFileSize(0) + return formatFileSize(0) }, userActions() { @@ -498,7 +499,7 @@ export default { if (this.selectedQuota !== false) { return this.selectedQuota } - if (this.settings.defaultQuota !== unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) { + if (this.settings.defaultQuota !== unlimitedQuota.id && parseFileSize(this.settings.defaultQuota, true) >= 0) { // if value is valid, let's map the quotaOptions or return custom quota return { id: this.settings.defaultQuota, label: this.settings.defaultQuota } } @@ -834,7 +835,8 @@ export default { await this.$store.dispatch('setUserData', { userid: this.user.id, key: 'quota', - value: quota, + // translate from locale string format to raw float format so backend can read it + value: '' + parseFileSize(quota, true) }) } catch (error) { console.error(error) @@ -855,12 +857,12 @@ export default { quota = quota?.id || quota.label } // only used for new presets sent through @Tag - const validQuota = OC.Util.computerFileSize(quota) + const validQuota = parseFileSize(quota, true) if (validQuota === null) { return unlimitedQuota } else { // unify format output - quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota)) + quota = formatFileSize(parseFileSize(quota, true)) return { id: quota, label: quota } } }, diff --git a/apps/settings/src/store/users.js b/apps/settings/src/store/users.js index 2682415a01636..499aa73170dba 100644 --- a/apps/settings/src/store/users.js +++ b/apps/settings/src/store/users.js @@ -32,6 +32,7 @@ import axios from '@nextcloud/axios' import { generateOcsUrl } from '@nextcloud/router' import { getCapabilities } from '@nextcloud/capabilities' import logger from '../logger.js' +import { parseFileSize } from "@nextcloud/files" const orderGroups = function(groups, orderBy) { /* const SORT_USERCOUNT = 1; @@ -227,7 +228,7 @@ const mutations = { }, setUserData(state, { userid, key, value }) { if (key === 'quota') { - const humanValue = OC.Util.computerFileSize(value) + const humanValue = parseFileSize(value, true) state.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value } else { state.users.find(user => user.id === userid)[key] = value