2021-05-19 23:31:00 +02:00
|
|
|
import {lstatSync, readdirSync, readFileSync} from "fs";
|
2021-04-22 03:30:46 +02:00
|
|
|
import * as https from "https";
|
2021-05-19 23:31:00 +02:00
|
|
|
import {LayerConfigJson} from "../Customizations/JSON/LayerConfigJson";
|
2021-05-19 23:40:55 +02:00
|
|
|
import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson";
|
2021-04-10 03:18:32 +02:00
|
|
|
|
|
|
|
export default class ScriptUtils {
|
2021-05-20 12:27:33 +02:00
|
|
|
public static readDirRecSync(path, maxDepth = 999): string[] {
|
2021-04-10 03:18:32 +02:00
|
|
|
const result = []
|
2021-05-20 12:27:33 +02:00
|
|
|
if(maxDepth <= 0){
|
|
|
|
return []
|
|
|
|
}
|
2021-04-10 03:18:32 +02:00
|
|
|
for (const entry of readdirSync(path)) {
|
|
|
|
const fullEntry = path + "/" + entry
|
|
|
|
const stats = lstatSync(fullEntry)
|
|
|
|
if (stats.isDirectory()) {
|
|
|
|
// Subdirectory
|
|
|
|
// @ts-ignore
|
2021-05-20 12:27:33 +02:00
|
|
|
result.push(...ScriptUtils.readDirRecSync(fullEntry, maxDepth - 1))
|
2021-04-10 03:18:32 +02:00
|
|
|
} else {
|
|
|
|
result.push(fullEntry)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
2021-05-14 17:37:21 +02:00
|
|
|
|
|
|
|
public static DownloadJSON(url): Promise<any> {
|
2021-05-14 02:25:30 +02:00
|
|
|
return new Promise((resolve, reject) => {
|
2021-05-14 17:37:21 +02:00
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
https.get(url, (res) => {
|
|
|
|
const parts: string[] = []
|
|
|
|
res.setEncoding('utf8');
|
|
|
|
res.on('data', function (chunk) {
|
|
|
|
// @ts-ignore
|
|
|
|
parts.push(chunk)
|
|
|
|
});
|
|
|
|
|
|
|
|
res.addListener('end', function () {
|
|
|
|
const result = parts.join("")
|
|
|
|
try {
|
|
|
|
resolve(JSON.parse(result))
|
|
|
|
} catch (e) {
|
|
|
|
reject(e)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
})
|
|
|
|
} catch (e) {
|
|
|
|
reject(e)
|
|
|
|
}
|
2021-04-22 03:30:46 +02:00
|
|
|
})
|
2021-05-14 17:37:21 +02:00
|
|
|
|
2021-04-22 03:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static sleep(ms) {
|
2021-05-14 17:37:21 +02:00
|
|
|
if (ms <= 0) {
|
2021-05-14 02:25:30 +02:00
|
|
|
process.stdout.write("\r \r")
|
|
|
|
return;
|
|
|
|
}
|
2021-04-22 03:30:46 +02:00
|
|
|
return new Promise((resolve) => {
|
2021-05-14 17:37:21 +02:00
|
|
|
process.stdout.write("\r Sleeping for " + (ms / 1000) + "s \r")
|
2021-05-14 02:25:30 +02:00
|
|
|
setTimeout(resolve, 1000);
|
|
|
|
}).then(() => ScriptUtils.sleep(ms - 1000));
|
2021-04-22 03:30:46 +02:00
|
|
|
}
|
|
|
|
|
2021-05-19 23:31:00 +02:00
|
|
|
public static getLayerFiles(): { parsed: LayerConfigJson, path: string }[] {
|
|
|
|
return ScriptUtils.readDirRecSync("./assets/layers")
|
|
|
|
.filter(path => path.indexOf(".json") > 0)
|
|
|
|
.filter(path => path.indexOf("license_info.json") < 0)
|
|
|
|
.map(path => {
|
|
|
|
try {
|
|
|
|
const parsed = JSON.parse(readFileSync(path, "UTF8"));
|
|
|
|
return {parsed: parsed, path: path}
|
|
|
|
} catch (e) {
|
|
|
|
console.error("Could not parse file ", "./assets/layers/" + path, "due to ", e)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-05-19 23:40:55 +02:00
|
|
|
public static getThemeFiles() : {parsed: LayoutConfigJson, path: string}[] {
|
2021-05-19 23:31:00 +02:00
|
|
|
return ScriptUtils.readDirRecSync("./assets/themes")
|
|
|
|
.filter(path => path.endsWith(".json"))
|
|
|
|
.filter(path => path.indexOf("license_info.json") < 0)
|
|
|
|
.map(path => {
|
|
|
|
try {
|
2021-05-19 23:40:55 +02:00
|
|
|
const parsed = JSON.parse(readFileSync(path, "UTF8"));
|
|
|
|
return {parsed: parsed, path: path}
|
2021-05-19 23:31:00 +02:00
|
|
|
} catch (e) {
|
|
|
|
console.error("Could not read file ", path, "due to ", e)
|
|
|
|
throw e
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-04-10 03:18:32 +02:00
|
|
|
|
|
|
|
}
|