UNPKG

kodilist

Version:

CLI tool for generating Kodi playlists based on filename-embedded tags.

103 lines (89 loc) 3.07 kB
#! /usr/bin/env node import path from "path"; import fs from "fs"; import os from "os"; import meow from "meow"; import chalk from "chalk"; import { getKodiFolder, ConfigFile } from "../index"; import Operations from "../operations"; function warnOfInvalidOption(invalid: string, valid: string[]): void { const opts = valid.map(s => chalk.green(s)).join(", "); invalid ? console.log(`Invalid option ${chalk.red(invalid || "")}`) : null; console.log(`Options: ${opts}`); } function generateDefaultConfig(configPath: string): void { const obj = { directories: [], ignoreList: [], kodi: "", searchTerms: { sources: [], tags: [], people: [] }, configPath }; fs.writeFileSync(configPath, JSON.stringify(obj, null, " ")); } function getConfig(): ConfigFile { const configPath = path.join(os.homedir(), ".kodilist.json"); if (!fs.existsSync(configPath)) generateDefaultConfig(configPath); const config: ConfigFile = JSON.parse(fs.readFileSync(configPath).toString()); config.save = () => fs.writeFileSync(configPath, JSON.stringify(config, null, " ")); if (config.kodi === "" || config.kodi === "MISSING") { config.kodi = getKodiFolder(); config.save(); } if (config.kodi === "MISSING") { console.error("Could not find Kodi installed in the default path"); process.exit(1); } return config; } const cli = meow( ` Usage $ kodilist ${chalk.green("<command>")} ${chalk.blue("[...terms]")} Examples $ kodilist generate ${chalk.green("✔️")} ~/videos ${chalk.green("✔️")} /media/birds/video ${chalk.green("✔️")} sources ${chalk.green("✔️")} tags ${chalk.green("✔️")} people ${chalk.green("✔️")} this week's files ${chalk.green("✔️")} alphabetical files $ kodilist add tag rainbow lorikeet Now tracking ${chalk.green("rainbow lorikeet")} $ kodilist add person Dan Koeppel Now tracking ${chalk.green("Dan Koeppel")} $ kodilist add source bbc.co.uk Now tracking ${chalk.green("bbc.co.uk")} $ kodilist list people dan koeppel phoebe snetsinger $ kodilist ignore *.gif Now ignoring ${chalk.green("*.gif")} $ kodilist delete person Dan Koeppel Stopped tracking ${chalk.green("Dan Koeppel")} `, { version: "1.1.3" } ); function main() { const config = getConfig(); if (cli.input.length === 0) return cli.showHelp(); const operations = Operations(config, cli.input); if (!operations.hasOwnProperty(cli.input[0])) { return warnOfInvalidOption(cli.input[0], Object.keys(operations)); } const cmd = operations[cli.input[0]]; if (typeof cmd === "function") return cmd(cli.input.slice(1)); if (!cmd.hasOwnProperty(cli.input[1])) { return warnOfInvalidOption(cli.input[1], Object.keys(cmd)); } cmd[cli.input[1]](cli.input.slice(2)); } main();