Merge master
This commit is contained in:
commit
aa50d33b81
53 changed files with 1094 additions and 411 deletions
|
@ -1,12 +1,23 @@
|
|||
import {lstatSync, readdirSync, readFileSync} from "fs";
|
||||
import {Utils} from "../Utils";
|
||||
Utils.runningFromConsole = true
|
||||
import * as https from "https";
|
||||
import {LayerConfigJson} from "../Customizations/JSON/LayerConfigJson";
|
||||
import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson";
|
||||
import * as fs from "fs";
|
||||
|
||||
|
||||
export default class ScriptUtils {
|
||||
|
||||
|
||||
public static fixUtils() {
|
||||
Utils.externalDownloadFunction = ScriptUtils.DownloadJSON
|
||||
}
|
||||
|
||||
|
||||
public static readDirRecSync(path, maxDepth = 999): string[] {
|
||||
const result = []
|
||||
if(maxDepth <= 0){
|
||||
if (maxDepth <= 0) {
|
||||
return []
|
||||
}
|
||||
for (const entry of readdirSync(path)) {
|
||||
|
@ -23,6 +34,20 @@ export default class ScriptUtils {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static DownloadFileTo(url, targetFilePath: string): void {
|
||||
console.log("Downloading ", url, "to", targetFilePath)
|
||||
https.get(url, (res) => {
|
||||
const filePath = fs.createWriteStream(targetFilePath);
|
||||
res.pipe(filePath);
|
||||
filePath.on('finish', () => {
|
||||
filePath.close();
|
||||
console.log('Download Completed');
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
public static DownloadJSON(url): Promise<any> {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
|
@ -77,7 +102,7 @@ export default class ScriptUtils {
|
|||
})
|
||||
}
|
||||
|
||||
public static getThemeFiles() : {parsed: LayoutConfigJson, path: string}[] {
|
||||
public static getThemeFiles(): { parsed: LayoutConfigJson, path: string }[] {
|
||||
return ScriptUtils.readDirRecSync("./assets/themes")
|
||||
.filter(path => path.endsWith(".json"))
|
||||
.filter(path => path.indexOf("license_info.json") < 0)
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
|
||||
/*
|
||||
* This script attempt to automatically fix some basic issues when a theme from the custom generator is loaded
|
||||
*/
|
||||
import {Utils} from "../Utils"
|
||||
Utils.runningFromConsole = true;
|
||||
|
||||
import {readFileSync, writeFileSync} from "fs";
|
||||
import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson";
|
||||
import {Layer} from "leaflet";
|
||||
import LayerConfig from "../Customizations/JSON/LayerConfig";
|
||||
import SmallLicense from "../Models/smallLicense";
|
||||
import AllKnownLayers from "../Customizations/AllKnownLayers";
|
||||
import ScriptUtils from "./ScriptUtils";
|
||||
import AllImageProviders from "../Logic/ImageProviders/AllImageProviders";
|
||||
|
||||
|
||||
ScriptUtils.fixUtils()
|
||||
|
||||
if(process.argv.length == 2){
|
||||
console.log("USAGE: ts-node scripts/fixTheme <path to theme>")
|
||||
|
@ -23,7 +27,6 @@ console.log("Fixing up ", path)
|
|||
|
||||
const themeConfigJson : LayoutConfigJson = JSON.parse(readFileSync(path, "UTF8"))
|
||||
|
||||
const linuxHints = []
|
||||
const licenses : SmallLicense[] = []
|
||||
|
||||
const replacements: {source: string, destination: string}[] = []
|
||||
|
@ -41,15 +44,32 @@ for (const layerConfigJson of themeConfigJson.layers) {
|
|||
const layerConfig = new LayerConfig(layerConfigJson, AllKnownLayers.sharedUnits, "fix theme",true)
|
||||
const images : string[] = Array.from(layerConfig.ExtractImages())
|
||||
const remoteImages = images.filter(img => img.startsWith("http"))
|
||||
|
||||
for (const remoteImage of remoteImages) {
|
||||
linuxHints.push("wget " + remoteImage)
|
||||
|
||||
|
||||
const filename = remoteImage.substring(remoteImage.lastIndexOf("/"))
|
||||
ScriptUtils.DownloadFileTo(remoteImage, dir + "/" + filename)
|
||||
|
||||
|
||||
const imgPath = remoteImage.substring(remoteImage.lastIndexOf("/") + 1)
|
||||
licenses.push({
|
||||
path: imgPath,
|
||||
license: "",
|
||||
authors: [],
|
||||
sources: [remoteImage]
|
||||
})
|
||||
|
||||
for (const attributionSrc of AllImageProviders.ImageAttributionSource) {
|
||||
try {
|
||||
attributionSrc.GetAttributionFor(remoteImage).addCallbackAndRun(license => {
|
||||
console.log("Downloaded an attribution!")
|
||||
licenses.push({
|
||||
path: imgPath,
|
||||
license: license?.license ?? "",
|
||||
authors:Utils.NoNull([license?.artist]),
|
||||
sources: [remoteImage]
|
||||
})
|
||||
})
|
||||
}catch(e){
|
||||
// Hush hush
|
||||
}
|
||||
}
|
||||
|
||||
replacements.push({source: remoteImage, destination: `${dir}/${imgPath}`})
|
||||
}
|
||||
}
|
||||
|
@ -59,13 +79,9 @@ for (const replacement of replacements) {
|
|||
fixedThemeJson = fixedThemeJson.replace(new RegExp(replacement.source, "g"), replacement.destination)
|
||||
}
|
||||
|
||||
const fixScriptPath = dir + "/fix_script_"+path.replace(/\//g,"_")+".sh"
|
||||
writeFileSync(dir + "/generated.license_info.json", JSON.stringify(licenses, null, " "))
|
||||
writeFileSync(fixScriptPath, linuxHints.join("\n"))
|
||||
writeFileSync(path+".autofixed.json", fixedThemeJson)
|
||||
|
||||
console.log(`IMPORTANT:
|
||||
1) run ${fixScriptPath}
|
||||
2) Copy generated.license_info.json over into license_info.json and add the missing attributions and authors
|
||||
3) Verify ${path}.autofixed.json as theme, and rename it to ${path}
|
||||
4) Delete the fix script and other unneeded files`)
|
||||
1) Copy generated.license_info.json over into license_info.json and add the missing attributions and authors
|
||||
2) Verify ${path}.autofixed.json as theme, and rename it to ${path}`)
|
|
@ -1,8 +1,5 @@
|
|||
import ScriptUtils from "./ScriptUtils";
|
||||
import {Utils} from "../Utils";
|
||||
import {readFileSync, writeFileSync} from "fs";
|
||||
|
||||
Utils.runningFromConsole = true
|
||||
import {writeFileSync} from "fs";
|
||||
import LayerConfig from "../Customizations/JSON/LayerConfig";
|
||||
import * as licenses from "../assets/generated/license_info.json"
|
||||
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
|
||||
|
@ -10,6 +7,7 @@ import {LayerConfigJson} from "../Customizations/JSON/LayerConfigJson";
|
|||
import {Translation} from "../UI/i18n/Translation";
|
||||
import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson";
|
||||
import AllKnownLayers from "../Customizations/AllKnownLayers";
|
||||
|
||||
// This scripts scans 'assets/layers/*.json' for layer definition files and 'assets/themes/*.json' for theme definition files.
|
||||
// It spits out an overview of those to be used to load them
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue