UNPKG

kodilist

Version:

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

101 lines (93 loc) 3.72 kB
#! /usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const os_1 = __importDefault(require("os")); const meow_1 = __importDefault(require("meow")); const chalk_1 = __importDefault(require("chalk")); const index_1 = require("../index"); const operations_1 = __importDefault(require("../operations")); function warnOfInvalidOption(invalid, valid) { const opts = valid.map(s => chalk_1.default.green(s)).join(", "); invalid ? console.log(`Invalid option ${chalk_1.default.red(invalid || "")}`) : null; console.log(`Options: ${opts}`); } function generateDefaultConfig(configPath) { const obj = { directories: [], ignoreList: [], kodi: "", searchTerms: { sources: [], tags: [], people: [] }, configPath }; fs_1.default.writeFileSync(configPath, JSON.stringify(obj, null, " ")); } function getConfig() { const configPath = path_1.default.join(os_1.default.homedir(), ".kodilist.json"); if (!fs_1.default.existsSync(configPath)) generateDefaultConfig(configPath); const config = JSON.parse(fs_1.default.readFileSync(configPath).toString()); config.save = () => fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, " ")); if (config.kodi === "" || config.kodi === "MISSING") { config.kodi = index_1.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_1.default(` Usage $ kodilist ${chalk_1.default.green("<command>")} ${chalk_1.default.blue("[...terms]")} Examples $ kodilist generate ${chalk_1.default.green("✔️")} ~/videos ${chalk_1.default.green("✔️")} /media/birds/video ${chalk_1.default.green("✔️")} sources ${chalk_1.default.green("✔️")} tags ${chalk_1.default.green("✔️")} people ${chalk_1.default.green("✔️")} this week's files ${chalk_1.default.green("✔️")} alphabetical files $ kodilist add tag rainbow lorikeet Now tracking ${chalk_1.default.green("rainbow lorikeet")} $ kodilist add person Dan Koeppel Now tracking ${chalk_1.default.green("Dan Koeppel")} $ kodilist add source bbc.co.uk Now tracking ${chalk_1.default.green("bbc.co.uk")} $ kodilist list people dan koeppel phoebe snetsinger $ kodilist ignore *.gif Now ignoring ${chalk_1.default.green("*.gif")} $ kodilist delete person Dan Koeppel Stopped tracking ${chalk_1.default.green("Dan Koeppel")} `, { version: "1.1.3" }); function main() { const config = getConfig(); if (cli.input.length === 0) return cli.showHelp(); const operations = operations_1.default(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();