mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-11 05:46:17 +00:00
97 lines
2.3 KiB
TypeScript
97 lines
2.3 KiB
TypeScript
import axios from "axios";
|
|
import { JSDOM } from "jsdom";
|
|
import UserAgent from "user-agents";
|
|
import path from "node:path";
|
|
import fs from "node:fs";
|
|
import { THEMES_PATH } from "@main/constants";
|
|
|
|
export const getFileBuffer = async (url: string) =>
|
|
fetch(url, { method: "GET" }).then((response) =>
|
|
response.arrayBuffer().then((buffer) => Buffer.from(buffer))
|
|
);
|
|
|
|
export const sleep = (ms: number) =>
|
|
new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
|
export const requestWebPage = async (url: string) => {
|
|
const userAgent = new UserAgent();
|
|
|
|
const data = await axios
|
|
.get(url, {
|
|
headers: {
|
|
"User-Agent": userAgent.toString(),
|
|
},
|
|
})
|
|
.then((response) => response.data);
|
|
|
|
const { window } = new JSDOM(data);
|
|
return window.document;
|
|
};
|
|
|
|
export const isPortableVersion = () => {
|
|
return !!process.env.PORTABLE_EXECUTABLE_FILE;
|
|
};
|
|
|
|
export const normalizePath = (str: string) =>
|
|
path.posix.normalize(str).replaceAll("\\", "/");
|
|
|
|
export const addTrailingSlash = (str: string) =>
|
|
str.endsWith("/") ? str : `${str}/`;
|
|
|
|
const sanitizeFolderName = (name: string): string => {
|
|
return name
|
|
.toLowerCase()
|
|
.replaceAll(/[^a-z0-9-_\s]/g, "")
|
|
.replaceAll(/\s+/g, "-")
|
|
.replaceAll(/-+/g, "-")
|
|
.replaceAll(/(^-|-$)/g, "");
|
|
};
|
|
|
|
export const getThemePath = (themeId: string, themeName?: string): string => {
|
|
if (themeName) {
|
|
const sanitizedName = sanitizeFolderName(themeName);
|
|
if (sanitizedName) {
|
|
return path.join(THEMES_PATH, sanitizedName);
|
|
}
|
|
}
|
|
return path.join(THEMES_PATH, themeId);
|
|
};
|
|
|
|
export const getThemeSoundPath = (
|
|
themeId: string,
|
|
themeName?: string
|
|
): string | null => {
|
|
const themeDir = getThemePath(themeId, themeName);
|
|
const legacyThemeDir = themeName ? path.join(THEMES_PATH, themeId) : null;
|
|
|
|
const checkDir = (dir: string): string | null => {
|
|
if (!fs.existsSync(dir)) {
|
|
return null;
|
|
}
|
|
|
|
const formats = ["wav", "mp3", "ogg", "m4a"];
|
|
|
|
for (const format of formats) {
|
|
const soundPath = path.join(dir, `achievement.${format}`);
|
|
if (fs.existsSync(soundPath)) {
|
|
return soundPath;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
const soundPath = checkDir(themeDir);
|
|
if (soundPath) {
|
|
return soundPath;
|
|
}
|
|
|
|
if (legacyThemeDir) {
|
|
return checkDir(legacyThemeDir);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export * from "./reg-parser";
|