UNPKG

ani-cli-npm

Version:

ani-cli tool rewritten as npm package

165 lines (164 loc) 6.74 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const process = __importStar(require("process")); //process.removeAllListeners() // Ignore warning // TODO: Use terminal-kit properly // External const appdata_path_1 = __importDefault(require("appdata-path")); const terminal_kit = require("terminal-kit"); const chalk = require("chalk"); // Internal const Anime_1 = require("./Anime"); const search_anime_1 = require("./url_genoration/search_anime"); const load_config_1 = require("./file_managment/load_config"); const input_1 = require("./IO/input"); const change_config_1 = require("./file_managment/change_config"); const cache_1 = require("./file_managment/cache"); const download_1 = require("./download"); const help_1 = require("./IO/help"); // import {display_cover} from "./cover_manager"; const app_data_folder = (0, appdata_path_1.default)(); const cache_folder = app_data_folder + "/ani-cli-npm"; (0, load_config_1.make_config_dir)(cache_folder, true); // display_cover() console.clear(); terminal_kit.draw("https://gogocdn.net/cover/yuri-on-ice-dub.png"); async function main() { let config = (0, load_config_1.load_config)(cache_folder); console.log(chalk.magenta("Ani-cli-npm!\n")); if (config.most_recent.anime_id !== "") { console.log(chalk.grey(`Most recently played: ${config.most_recent.anime_id} episode ${config.most_recent.episode_number + 1}\n`)); } let choice = await (0, input_1.selection)([ "Search", "Continue", "Download", "Option", "Clear cache", "Help", "Quit", ], ["s", "c", "d", "o", " ", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); })); switch (choice) { case 0: // Search let temp_ = await (0, search_anime_1.search)(); if (temp_ == 1) { await main(); process.exit(); } let anime_id = temp_; let anime = new Anime_1.Anime(); await anime.init(anime_id, cache_folder); let episode_number; if (anime.episode_list.length == 1) { episode_number = 1; } else { console.log(`Select episode [1-${anime.episode_list.length}] ${(anime.most_recent != 0) ? `Or C to continue from ep${anime.most_recent + 1}` : ""}`); episode_number = await (0, input_1.number_input)(anime.episode_list.length, 1, (anime.most_recent != 0) ? ["c"] : [], (anime.most_recent != 0) ? [anime.most_recent + 1] : []); } await anime.play_head(episode_number - 1, config, cache_folder); if (anime.player.hasOwnProperty("quit")) { await anime.player.player.quit(); } await main(); break; case 1: // Continue if (config.most_recent.anime_id == "") { console.clear(); console.log(chalk.red("No episode played recently")); await main(); break; } let continue_anime = new Anime_1.Anime(); await continue_anime.init(config.most_recent.anime_id, cache_folder); await continue_anime.play_head(config.most_recent.episode_number, config, cache_folder); try { await continue_anime.player.player.quit(); } catch { } await main(); break; case 2: // Download let code = await (0, download_1.download)(cache_folder, config); if (code == 1) { console.log(chalk.red("Error downloading episodes")); } break; case 3: // Options let temp = structuredClone(config); let exit_code; while (true) { // @ts-ignore temp, exit_code = await (0, change_config_1.config_)(temp); if (exit_code === 1) { config = temp; //proxyAgent = new HttpsProxyAgent(config.proxy); console.clear(); try { (0, load_config_1.write_config)(cache_folder, config); console.log(chalk.yellow("Config changed.")); } catch { console.log(chalk.red("Error writing to .conf file.")); } break; } else if (exit_code === 2) { temp = config; console.clear(); console.log(chalk.yellow("Config changes disregarded.")); break; } } await main(); break; case 4: console.clear(); console.log(chalk.yellow("Warning, this will also clear your current position in each anime, are you sure you want to do this?")); if (await (0, input_1.selection)(["yes", "no"], ["y", "n"]) == 0) { await (0, cache_1.clear_cache)(cache_folder); console.clear(); console.log(chalk.grey("Cache cleared")); } else { console.clear(); } await main(); break; case 5: await (0, help_1.help)(); break; case 6: // Quit console.log("Exit"); } return 0; // await search() } main();