ani-cli-npm
Version:
ani-cli tool rewritten as npm package
165 lines (164 loc) • 6.74 kB
JavaScript
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();
;