forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			92 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import { existsSync, renameSync, readFileSync, writeFileSync } from "fs"
							 | 
						||
| 
								 | 
							
								import SmallLicense from "../src/Models/smallLicense"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Script to move/rename image files
							 | 
						||
| 
								 | 
							
								 * Useful after downloading images from wikimedia commons
							 | 
						||
| 
								 | 
							
								 * Apart from moving the image files, this will also update the license file
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This will NOT update any images in the theme
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function main(args: string[]) {
							 | 
						||
| 
								 | 
							
								    // Check if the correct number of arguments are passed
							 | 
						||
| 
								 | 
							
								    if (args.length != 2) {
							 | 
						||
| 
								 | 
							
								        console.log("Usage: moveImage.ts oldPath newPath")
							 | 
						||
| 
								 | 
							
								        console.log("You passed in the arguments: " + args.join(","))
							 | 
						||
| 
								 | 
							
								        console.log("Example: npx vite-node scripts/moveImage.ts images/old.jpg images/new.jpg")
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const [oldPath, newPath] = args
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Check if the oldPath exists
							 | 
						||
| 
								 | 
							
								    if (!existsSync(oldPath)) {
							 | 
						||
| 
								 | 
							
								        console.log("The oldPath does not exist: " + oldPath)
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Move file
							 | 
						||
| 
								 | 
							
								    renameSync(oldPath, newPath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // If it exists also move the .license file
							 | 
						||
| 
								 | 
							
								    const oldLicensePath = oldPath + ".license"
							 | 
						||
| 
								 | 
							
								    if (existsSync(oldLicensePath)) {
							 | 
						||
| 
								 | 
							
								        const newLicensePath = newPath + ".license"
							 | 
						||
| 
								 | 
							
								        renameSync(oldLicensePath, newLicensePath)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    console.log("Moved file from " + oldPath + " to " + newPath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Open license_info.json in the same directory as the old file
							 | 
						||
| 
								 | 
							
								    const licensePath = oldPath.replace(/\/[^/]+$/, "/license_info.json")
							 | 
						||
| 
								 | 
							
								    if (!existsSync(licensePath)) {
							 | 
						||
| 
								 | 
							
								        console.log(
							 | 
						||
| 
								 | 
							
								            "The license file does not exist: " +
							 | 
						||
| 
								 | 
							
								                licensePath +
							 | 
						||
| 
								 | 
							
								                ". Skipping writing to license file."
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Read license file
							 | 
						||
| 
								 | 
							
								    const licenseFile = readFileSync(licensePath, "utf8")
							 | 
						||
| 
								 | 
							
								    const licenseInfo = JSON.parse(licenseFile) as SmallLicense[]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Find correct license item
							 | 
						||
| 
								 | 
							
								    const licenseItem = licenseInfo.find((item) => item.path === oldPath.replace(/.*\//, ""))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Filter out license item
							 | 
						||
| 
								 | 
							
								    const newLicenseInfo = licenseInfo.filter((item) => item.path !== oldPath.replace(/.*\//, ""))
							 | 
						||
| 
								 | 
							
								    const newLicenseFile = JSON.stringify(newLicenseInfo, null, 2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Write new license file
							 | 
						||
| 
								 | 
							
								    writeFileSync(licensePath, newLicenseFile)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Look for a license_info.json file in the new path
							 | 
						||
| 
								 | 
							
								    const newLicensePath = newPath.replace(/\/[^/]+$/, "/license_info.json")
							 | 
						||
| 
								 | 
							
								    if (!existsSync(newLicensePath) && licenseItem) {
							 | 
						||
| 
								 | 
							
								        console.log("License file doesn't exist yet, creating new one: " + newLicensePath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Create new license item
							 | 
						||
| 
								 | 
							
								        const newLicenseItem = licenseItem
							 | 
						||
| 
								 | 
							
								        newLicenseItem.path = newPath.replace(/.*\//, "")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Create file
							 | 
						||
| 
								 | 
							
								        writeFileSync(newLicensePath, JSON.stringify([newLicenseItem], null, 2))
							 | 
						||
| 
								 | 
							
								    } else if (licenseItem) {
							 | 
						||
| 
								 | 
							
								        console.log("Appending to existing license file: " + newLicensePath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Create new license item
							 | 
						||
| 
								 | 
							
								        const newLicenseItem = licenseItem
							 | 
						||
| 
								 | 
							
								        newLicenseItem.path = newPath.replace(/.*\//, "")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Append to existing file
							 | 
						||
| 
								 | 
							
								        const newLicenseFile = readFileSync(newLicensePath, "utf8")
							 | 
						||
| 
								 | 
							
								        const newLicenseInfo = JSON.parse(newLicenseFile) as SmallLicense[]
							 | 
						||
| 
								 | 
							
								        newLicenseInfo.push(newLicenseItem)
							 | 
						||
| 
								 | 
							
								        writeFileSync(newLicensePath, JSON.stringify(newLicenseInfo, null, 2))
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								main(process.argv.slice(2))
							 |