From c371016de26b3a08860ba638c7b0494978b6cde7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 14 Jun 2022 08:47:26 +0200 Subject: More robust duration parsing --- server/helpers/core-utils.ts | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'server/helpers') 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 = { export function parseDurationToMs (duration: number | string): number { if (duration === null) return null if (typeof duration === 'number') return duration + if (!isNaN(+duration)) return +duration if (typeof duration === 'string') { const split = duration.match(/^([\d.,]+)\s?(\w+)$/) @@ -76,6 +77,7 @@ export function parseDurationToMs (duration: number | string): number { export function parseBytes (value: string | number): number { if (typeof value === 'number') return value + if (!isNaN(+value)) return +value const tgm = /^(\d+)\s*TB\s*(\d+)\s*GB\s*(\d+)\s*MB$/ const tg = /^(\d+)\s*TB\s*(\d+)\s*GB$/ @@ -85,40 +87,55 @@ export function parseBytes (value: string | number): number { const g = /^(\d+)\s*GB$/ const m = /^(\d+)\s*MB$/ const b = /^(\d+)\s*B$/ - let match + + let match: RegExpMatchArray if (value.match(tgm)) { match = value.match(tgm) return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + parseInt(match[2], 10) * 1024 * 1024 * 1024 + parseInt(match[3], 10) * 1024 * 1024 - } else if (value.match(tg)) { + } + + if (value.match(tg)) { match = value.match(tg) return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + parseInt(match[2], 10) * 1024 * 1024 * 1024 - } else if (value.match(tm)) { + } + + if (value.match(tm)) { match = value.match(tm) return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 + parseInt(match[2], 10) * 1024 * 1024 - } else if (value.match(gm)) { + } + + if (value.match(gm)) { match = value.match(gm) return parseInt(match[1], 10) * 1024 * 1024 * 1024 + parseInt(match[2], 10) * 1024 * 1024 - } else if (value.match(t)) { + } + + if (value.match(t)) { match = value.match(t) return parseInt(match[1], 10) * 1024 * 1024 * 1024 * 1024 - } else if (value.match(g)) { + } + + if (value.match(g)) { match = value.match(g) return parseInt(match[1], 10) * 1024 * 1024 * 1024 - } else if (value.match(m)) { + } + + if (value.match(m)) { match = value.match(m) return parseInt(match[1], 10) * 1024 * 1024 - } else if (value.match(b)) { + } + + if (value.match(b)) { match = value.match(b) return parseInt(match[1], 10) * 1024 - } else { - return parseInt(value, 10) } + + return parseInt(value, 10) } // --------------------------------------------------------------------------- -- cgit v1.2.3