forked from MapComplete/MapComplete
		
	Scripts: create script to import layers from studio into official mapcomplete
This commit is contained in:
		
							parent
							
								
									c7b905d1fb
								
							
						
					
					
						commit
						db685dc05f
					
				
					 5 changed files with 186 additions and 81 deletions
				
			
		
							
								
								
									
										73
									
								
								scripts/importCustomTheme.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								scripts/importCustomTheme.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | |||
| import Script from "./Script" | ||||
| import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" | ||||
| import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import LayerConfig from "../src/Models/ThemeConfig/LayerConfig" | ||||
| import { DoesImageExist } from "../src/Models/ThemeConfig/Conversion/Validation" | ||||
| import { ExtractImages } from "../src/Models/ThemeConfig/Conversion/FixImages" | ||||
| import { ThemeConfigJson } from "../src/Models/ThemeConfig/Json/ThemeConfigJson" | ||||
| import { ConversionContext } from "../src/Models/ThemeConfig/Conversion/ConversionContext" | ||||
| import Constants from "../src/Models/Constants" | ||||
| import { main as downloadCommons } from "./downloadCommons" | ||||
| import { WikimediaImageProvider } from "../src/Logic/ImageProviders/WikimediaImageProvider" | ||||
| import { Utils } from "../src/Utils" | ||||
| import { GenerateLicenseInfo } from "./generateLicenseInfo" | ||||
| 
 | ||||
| class ImportCustomTheme extends Script { | ||||
|     constructor() { | ||||
|         super("Given the path of a custom layer, will load the layer into mapcomplete as official") | ||||
|     } | ||||
| 
 | ||||
|     async main(args: string[]) { | ||||
|         const path = args[0] | ||||
| 
 | ||||
|         const layerconfig = <LayerConfigJson>JSON.parse(readFileSync(path, "utf-8")) | ||||
|         const id = layerconfig.id | ||||
|         const dirPath = "./assets/layers/" + id | ||||
|         if (!existsSync(dirPath)) { | ||||
|             mkdirSync(dirPath) | ||||
|         } | ||||
|         const imageFinder = new ExtractImages(true) | ||||
|         const theme: ThemeConfigJson = <ThemeConfigJson>{ | ||||
|             layers: [layerconfig], | ||||
|             id: "dummy-theme-during-import", | ||||
|             title: { | ||||
|                 en: "Dummy", | ||||
|             }, | ||||
|             icon: "./assets/svg/plus.svg", | ||||
|             description: { | ||||
|                 en: "Dummy", | ||||
|             }, | ||||
|         } | ||||
|         const usedImagesAll: { | ||||
|             path: string; | ||||
|             context: string, | ||||
|             location: (string | number)[] | ||||
|         }[] = imageFinder.convert(theme, ConversionContext.construct([], ["checking images"])) | ||||
|         const usedImages = usedImagesAll.filter(img => !img.path.startsWith("./assets")) | ||||
|             .filter(img => Constants.defaultPinIcons.indexOf(img.path) < 0) | ||||
|         console.log(usedImages) | ||||
|         const wm = WikimediaImageProvider.singleton | ||||
|         for (const usedImage of usedImages) { | ||||
|             if (usedImage.path.indexOf("wikimedia") >= 0) { | ||||
|                 const filename = WikimediaImageProvider.extractFileName(usedImage.path) | ||||
|                 console.log("Canonical URL is", filename) | ||||
|                 await downloadCommons([dirPath, "https://commons.wikimedia.org/wiki/File:"+filename]) | ||||
|                 console.log("Used image context:", usedImage.context) | ||||
|                 const replaceAt = (usedImage.location) | ||||
|                     .slice(2) // We drop ".layer.0" as we put this in a dummy theme
 | ||||
|                     .map( | ||||
|                     breadcrumb => isNaN(Number(breadcrumb)) ? breadcrumb : Number(breadcrumb), | ||||
|                 ) | ||||
|                 console.log("Replacement target location is", replaceAt) | ||||
|                 Utils.WalkPath(replaceAt, layerconfig, (_, path) => { | ||||
|                     console.log("Found",path, "to replace with", filename,"origvalue:", _) | ||||
|                     return `./assets/layers/${id}/${filename}` | ||||
|                 }) | ||||
|             } | ||||
|         } | ||||
|         writeFileSync("./assets/layers/"+id+"/"+id+".json", JSON.stringify(layerconfig, null, "  ")) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| new ImportCustomTheme().run() | ||||
| new GenerateLicenseInfo().run() | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue