diff options
Diffstat (limited to 'src/utils/genericUtils.ts')
-rw-r--r-- | src/utils/genericUtils.ts | 127 |
1 files changed, 1 insertions, 126 deletions
diff --git a/src/utils/genericUtils.ts b/src/utils/genericUtils.ts index c7b50bdc..7b7f1118 100644 --- a/src/utils/genericUtils.ts +++ b/src/utils/genericUtils.ts @@ -1,91 +1,3 @@ -/** Function that can be used to wait for a condition before returning. */ -async function wait<T>(condition: () => T, timeout = 5000, check = 100, predicate?: (obj: T) => boolean): Promise<T> { - return await new Promise((resolve, reject) => { - setTimeout(() => { - clearInterval(interval); - reject("TIMEOUT"); - }, timeout); - - const intervalCheck = () => { - const result = condition(); - if (predicate ? predicate(result) : result) { - resolve(result); - clearInterval(interval); - } - }; - - const interval = setInterval(intervalCheck, check); - - //run the check once first, this speeds it up a lot - intervalCheck(); - }); -} - -function getFormattedTimeToSeconds(formatted: string): number | null { - const fragments = /^(?:(?:(\d+):)?(\d+):)?(\d*(?:[.,]\d+)?)$/.exec(formatted); - - if (fragments === null) { - return null; - } - - const hours = fragments[1] ? parseInt(fragments[1]) : 0; - const minutes = fragments[2] ? parseInt(fragments[2] || '0') : 0; - const seconds = fragments[3] ? parseFloat(fragments[3].replace(',', '.')) : 0; - - return hours * 3600 + minutes * 60 + seconds; -} - -function getFormattedTime(seconds: number, precise?: boolean): string { - seconds = Math.max(seconds, 0); - - const hours = Math.floor(seconds / 60 / 60); - const minutes = Math.floor(seconds / 60) % 60; - let minutesDisplay = String(minutes); - let secondsNum = seconds % 60; - if (!precise) { - secondsNum = Math.floor(secondsNum); - } - - let secondsDisplay = String(precise ? secondsNum.toFixed(3) : secondsNum); - - if (secondsNum < 10) { - //add a zero - secondsDisplay = "0" + secondsDisplay; - } - if (hours && minutes < 10) { - //add a zero - minutesDisplay = "0" + minutesDisplay; - } - if (isNaN(hours) || isNaN(minutes)) { - return null; - } - - const formatted = (hours ? hours + ":" : "") + minutesDisplay + ":" + secondsDisplay; - - return formatted; -} - -/** - * Gets the error message in a nice string - * - * @param {int} statusCode - * @returns {string} errorMessage - */ -function getErrorMessage(statusCode: number, responseText: string): string { - const postFix = ((responseText && !(responseText.includes(`cf-wrapper`) || responseText.includes("<!DOCTYPE html>"))) ? "\n\n" + responseText : ""); - // display response body for 4xx - if([400, 429, 409, 0].includes(statusCode)) { - return chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode + postFix; - } else if (statusCode >= 500 && statusCode <= 599) { - // 503 == 502 - if (statusCode == 503) statusCode = 502; - return chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode - + "\n\n" + chrome.i18n.getMessage("statusReminder"); - } else { - return chrome.i18n.getMessage("connectionError") + statusCode + postFix; - } -} - /* Gets percieved luminance of a color */ function getLuminance(color: string): number { const {r, g, b} = hexToRgb(color); @@ -113,44 +25,7 @@ function indexesOf<T>(array: T[], value: T): number[] { return array.map((v, i) => v === value ? i : -1).filter(i => i !== -1); } -function objectToURI<T>(url: string, data: T, includeQuestionMark: boolean): string { - let counter = 0; - for (const key in data) { - const seperator = (url.includes("?") || counter > 0) ? "&" : (includeQuestionMark ? "?" : ""); - const value = (typeof(data[key]) === "string") ? data[key] as unknown as string : JSON.stringify(data[key]); - url += seperator + encodeURIComponent(key) + "=" + encodeURIComponent(value); - - counter++; - } - - return url; -} - -function generateUserID(length = 36): string { - const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - let result = ""; - if (window.crypto && window.crypto.getRandomValues) { - const values = new Uint32Array(length); - window.crypto.getRandomValues(values); - for (let i = 0; i < length; i++) { - result += charset[values[i] % charset.length]; - } - return result; - } else { - for (let i = 0; i < length; i++) { - result += charset[Math.floor(Math.random() * charset.length)]; - } - return result; - } -} - export const GenericUtils = { - wait, - getFormattedTime, - getFormattedTimeToSeconds, - getErrorMessage, getLuminance, - generateUserID, - indexesOf, - objectToURI + indexesOf } |