You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.7 KiB
96 lines
3.7 KiB
const helpers = require('./helpers');
|
|
const ora = require('ora');
|
|
const argv = require('yargs').argv;
|
|
const colors = require('colors/safe');
|
|
const fs = require('fs');
|
|
const config = require('./config');
|
|
const path = require('path');
|
|
|
|
(async function() {
|
|
const spinner = ora('Fetching mod info...').start()
|
|
|
|
if ( argv.info ) {
|
|
const mod = await helpers.fetch_mod(argv.info)
|
|
spinner.stop()
|
|
mod.print_info()
|
|
} else if ( argv.list ) {
|
|
if ( !argv.minecraft ) {
|
|
spinner.stop()
|
|
helpers.error_out('Please specify a target version using the --minecraft argument.')
|
|
}
|
|
const mod = await helpers.fetch_mod(argv.list)
|
|
spinner.stop()
|
|
|
|
let print = mod.version_info(argv.minecraft).sort((a, b) => a.id - b.id).reverse()
|
|
if ( argv.type ) print = print.filter(x => x.type === argv.type)
|
|
let truncated = false
|
|
if ( !print ) helpers.error_out(`No supported versions found for Minecraft ${argv.minecraft}.`)
|
|
if ( !argv.all && print.length > 15 ) {
|
|
print = print.slice(0, 15)
|
|
truncated = true
|
|
}
|
|
|
|
mod.print_header()
|
|
console.log(` ${colors.green('Mod versions for Minecraft '+argv.minecraft+':')}`)
|
|
for ( const item of print ) {
|
|
console.log(` ${colors.cyan(item.id)} ${colors.blue('('+item.type+')')}\t${colors.yellow(new Date(item.uploaded_at).toLocaleString())}\t\t${item.name}`)
|
|
}
|
|
} else if ( argv.install ) {
|
|
if ( !argv.minecraft && !argv.mod_version ) {
|
|
spinner.stop()
|
|
helpers.error_out('Please specify a Minecraft version target OR mod version id using the --minecraft and --mod_version arguments.')
|
|
}
|
|
|
|
const installs = argv.install.split(',').map(x => x.trim())
|
|
for ( const install of installs ) {
|
|
await helpers.install_mod({ install, argv, spinner })
|
|
}
|
|
} else if ( argv.archive ) {
|
|
spinner.text = 'Archiving mod repository...';
|
|
(new Promise((res, rej) => {
|
|
require('child_process').exec(`cd ${config.repo} && cd .. && zip -r archive.zip ./${path.basename(config.repo)}`, (err, stout, sterr) => {
|
|
if ( err ) rej(err)
|
|
else res()
|
|
})
|
|
})).then(() => {
|
|
spinner.stop()
|
|
console.log(`Repository archived: ${path.dirname(config.repo)}/archive.zip`)
|
|
}).catch(e => {
|
|
spinner.stop()
|
|
helpers.error_out('An error occurred while archiving the repository: '+e)
|
|
})
|
|
} else if ( argv.show ) {
|
|
const printVersions = (name, filenames) => {
|
|
console.log(` ${colors.green(name)}`)
|
|
filenames.map(x => x.replace('.zip', '').replace(`${name}-`, '')).forEach(x => {
|
|
console.log(` ${colors.blue(x)}`)
|
|
})
|
|
}
|
|
spinner.stop()
|
|
if ( argv.show === true ) {
|
|
const mods = helpers.list_installed_mods()
|
|
for ( const mod of mods ) {
|
|
printVersions(mod, helpers.list_mod_versions(mod))
|
|
}
|
|
} else if ( argv.show ) {
|
|
const versions = helpers.list_mod_versions(argv.show)
|
|
printVersions(argv.show, versions)
|
|
}
|
|
} else {
|
|
spinner.stop()
|
|
console.log(colors.blue(`MCM-CLI is an ad-hoc helper script for programmatically maintaining TechnicSolder repos.`))
|
|
console.log(`USAGE: node index.js [...OPTIONS]`)
|
|
console.log('')
|
|
console.log(` --info [mod]`)
|
|
console.log(` Display information about a mod by CLI name.\n`)
|
|
console.log(` --list [mod] --minecraft [version]`)
|
|
console.log(` List mod versions for the specified Minecraft version target.\n`)
|
|
console.log(` --install [mod] (--minecraft [version] | --mod_version [version id]`)
|
|
console.log(` Download an install the specified mod at either the latest version for the specified`)
|
|
console.log(` Minecraft target, or at the specified version ID.\n`)
|
|
console.log(` --archive`)
|
|
console.log(` Create a ZIP archive of the mod repository.\n`)
|
|
console.log(`\nMake sure to update the "repo" and "download_staging" paths in config.js before use!`)
|
|
}
|
|
})()
|