kodilist
Version:
CLI tool for generating Kodi playlists based on filename-embedded tags.
101 lines (93 loc) • 3.72 kB
JavaScript
;
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();