diff options
author | Chocobozzz <me@florianbigard.com> | 2022-06-14 08:47:26 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-06-14 08:47:26 +0200 |
commit | c371016de26b3a08860ba638c7b0494978b6cde7 (patch) | |
tree | 8d3b6333a1c31ae28c837ba7f4b335a08ca83d75 /server/helpers | |
parent | 65ba19ace9ee95ac29394daf7326fffe33ae906d (diff) | |
download | PeerTube-c371016de26b3a08860ba638c7b0494978b6cde7.tar.gz PeerTube-c371016de26b3a08860ba638c7b0494978b6cde7.tar.zst PeerTube-c371016de26b3a08860ba638c7b0494978b6cde7.zip |
More robust duration parsing
Diffstat (limited to 'server/helpers')
-rw-r--r-- | server/helpers/core-utils.ts | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index 0ec45eb2e..6ebe8e2ac 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts | |||
@@ -56,6 +56,7 @@ const timeTable = { | |||
56 | export function parseDurationToMs (duration: number | string): number { | 56 | export function parseDurationToMs (duration: number | string): number { |
57 | if (duration === null) return null | 57 | if (duration === null) return null |
58 | if (typeof duration === 'number') return duration | 58 | if (typeof duration === 'number') return duration |
59 | if (!isNaN(+duration)) return +duration | ||
59 | 60 | ||
60 | if (typeof duration === 'string') { | 61 | if (typeof duration === 'string') { |
61 | const split = duration.match(/^([\d.,]+)\s?(\w+)$/) | 62 | const split = duration.match(/^([\d.,]+)\s?(\w+)$/) |
@@ -76,6 +77,7 @@ export function parseDurationToMs (duration: number | string): number { | |||
76 | 77 | ||
77 | export function parseBytes (value: string | number): number { | 78 | export function parseBytes (value: string | number): number { |
78 | if (typeof value === 'number') return value | 79 | if (typeof value === 'number') return value |
80 | if (!isNaN(+value)) return +value | ||
79 | 81 | ||
80 | const tgm = /^(\d+)\s*TB\s*(\d+)\s*GB\s*(\d+)\s*MB$/ | 82 | const tgm = /^(\d+)\s*TB\s*(\d+)\s*GB\s*(\d+)\s*MB$/ |
81 | const tg = /^(\d+)\s*TB\s*(\d+)\s*GB$/ | 83 | const tg = /^(\d+)\s*TB\s*(\d+)\s*GB$/ |
@@ -85,40 +87,55 @@ export function parseBytes (value: string | number): number { | |||
85 | const g = /^(\d+)\s*GB$/ | 87 | const g = /^(\d+)\s*GB$/ |
86 | const m = /^(\d+)\s*MB$/ | 88 | const m = /^(\d+)\s*MB$/ |
87 | const b = /^(\d+)\s*B$/ | 89 | const b = /^(\d+)\s*B$/ |
88 | let match | 90 | |
91 | let match: RegExpMatchArray | ||
89 | 92 | ||
90 | if (value.match(tgm)) { | 93 | if (value.match(tgm)) { |
91 | match = value.match(tgm) | 94 | match = value.match(tgm) |
92 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + | 95 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + |
93 | parseInt(match[2], 10) * 1024 * 1024 * 1024 + | 96 | parseInt(match[2], 10) * 1024 * 1024 * 1024 + |
94 | parseInt(match[3], 10) * 1024 * 1024 | 97 | parseInt(match[3], 10) * 1024 * 1024 |
95 | } else if (value.match(tg)) { | 98 | } |
99 | |||
100 | if (value.match(tg)) { | ||
96 | match = value.match(tg) | 101 | match = value.match(tg) |
97 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + | 102 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + |
98 | parseInt(match[2], 10) * 1024 * 1024 * 1024 | 103 | parseInt(match[2], 10) * 1024 * 1024 * 1024 |
99 | } else if (value.match(tm)) { | 104 | } |
105 | |||
106 | if (value.match(tm)) { | ||
100 | match = value.match(tm) | 107 | match = value.match(tm) |
101 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + | 108 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + |
102 | parseInt(match[2], 10) * 1024 * 1024 | 109 | parseInt(match[2], 10) * 1024 * 1024 |
103 | } else if (value.match(gm)) { | 110 | } |
111 | |||
112 | if (value.match(gm)) { | ||
104 | match = value.match(gm) | 113 | match = value.match(gm) |
105 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 + | 114 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 + |
106 | parseInt(match[2], 10) * 1024 * 1024 | 115 | parseInt(match[2], 10) * 1024 * 1024 |
107 | } else if (value.match(t)) { | 116 | } |
117 | |||
118 | if (value.match(t)) { | ||
108 | match = value.match(t) | 119 | match = value.match(t) |
109 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 | 120 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 |
110 | } else if (value.match(g)) { | 121 | } |
122 | |||
123 | if (value.match(g)) { | ||
111 | match = value.match(g) | 124 | match = value.match(g) |
112 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 | 125 | return parseInt(match[1], 10) * 1024 * 1024 * 1024 |
113 | } else if (value.match(m)) { | 126 | } |
127 | |||
128 | if (value.match(m)) { | ||
114 | match = value.match(m) | 129 | match = value.match(m) |
115 | return parseInt(match[1], 10) * 1024 * 1024 | 130 | return parseInt(match[1], 10) * 1024 * 1024 |
116 | } else if (value.match(b)) { | 131 | } |
132 | |||
133 | if (value.match(b)) { | ||
117 | match = value.match(b) | 134 | match = value.match(b) |
118 | return parseInt(match[1], 10) * 1024 | 135 | return parseInt(match[1], 10) * 1024 |
119 | } else { | ||
120 | return parseInt(value, 10) | ||
121 | } | 136 | } |
137 | |||
138 | return parseInt(value, 10) | ||
122 | } | 139 | } |
123 | 140 | ||
124 | // --------------------------------------------------------------------------- | 141 | // --------------------------------------------------------------------------- |