]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(Users/Quota setting): Prevent floating point value from getting truncated in...
authorMarcel Klehr <mklehr@gmx.net>
Wed, 6 Dec 2023 13:09:09 +0000 (14:09 +0100)
committerMarcel Klehr <mklehr@gmx.net>
Thu, 7 Dec 2023 08:57:21 +0000 (09:57 +0100)
fixes #18468

Signed-off-by: Marcel Klehr <mklehr@gmx.net>
apps/settings/src/components/Users/UserRow.vue
apps/settings/src/store/users.js

index 68ffde11849a99d09fe9f947f47deb2047d4b183..868bc21de14930b32b0f8253190e82b725bd7513 100644 (file)
@@ -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 }
                        }
                },
index 2682415a01636eaf6a9660df26989857ca41417e..499aa73170dba49fd49748f5858493554dcf21ee 100644 (file)
@@ -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