ani-cli-npm 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/Anime.js CHANGED
@@ -11,24 +11,41 @@ const open = require("open");
11
11
  const PlayerController = require("media-player-controller");
12
12
  const dl = require("download-file-with-progressbar");
13
13
  const chalk = require("chalk");
14
- // const gogohd_url="https://gogohd.net/"
15
- const base_url = "https://animixplay.to";
16
14
  class Anime {
15
+ /*
16
+ Class for handling a show/film
17
+
18
+ Stores anime dpage links assigned with anime_id.
19
+
20
+ Initialised with Anime.init()
21
+
22
+ */
17
23
  id = "";
18
24
  episode_list = [];
19
25
  player = 0;
20
26
  async init(anime_id, cache_folder) {
27
+ /*
28
+ Initiate Anime object
29
+
30
+ Will first search cache folder for cache file (this will contain id and dpage links)
31
+
32
+ If no cache is found, it will use get_ep_bases(anime_id) to get links. (Webscrapes from animixplay.to), then creates cache
33
+
34
+ anime_id:
35
+ */
21
36
  let cache_object = (0, cache_1.search_cache)(cache_folder, anime_id);
37
+ console.log(cache_object);
22
38
  this.id = anime_id;
23
39
  if (cache_object == 0) {
24
- await this.get_ap_bases(anime_id);
40
+ await this.get_ep_bases(this.id);
41
+ (0, cache_1.new_cache)(cache_folder, this);
25
42
  }
26
43
  else {
27
44
  try {
28
45
  this.episode_list = cache_object.episode_list;
29
46
  }
30
47
  catch {
31
- await this.get_ap_bases(anime_id);
48
+ await this.get_ep_bases(this.id);
32
49
  }
33
50
  }
34
51
  return 0;
@@ -49,8 +66,12 @@ class Anime {
49
66
  }
50
67
  return link;
51
68
  }
52
- async get_ap_bases(anime_id) {
53
- let html = (await ((0, curl_1.curl)(base_url + "/v1/" + anime_id))).split("\n");
69
+ async get_ep_bases(anime_id) {
70
+ /*
71
+ Scrapes animixplay.to for dpage links.
72
+ returns array with all dpage links
73
+ */
74
+ let html = (await ((0, curl_1.curl)("https://animixplay.to/v1/" + anime_id))).split("\n"); //POTENTIAL BREAK POINT. animixplay.to may change domain address
54
75
  let lines = "";
55
76
  for (let x in html) {
56
77
  if ((0, regex_1.RegexParse)(html[x], "*<div id=\"epslistplace\"*")) {
@@ -65,6 +86,20 @@ class Anime {
65
86
  }
66
87
  }
67
88
  async play_head(episode, config, config_dir) {
89
+ /*
90
+ # Starts play cascade.
91
+
92
+ ## Takes in:
93
+ ### Episode number, counding from 0
94
+ ### Config object
95
+ ### Config save directory
96
+
97
+ - If config.player is set to MPV or VLC, it will use the media-player-controller package.
98
+
99
+ - If set to Browser, it will use the "open" packer.
100
+
101
+ - If set to Link, it will simply print the media stream link to console, primarily for debuting peruses.
102
+ */
68
103
  console.clear();
69
104
  console.log(`Playing ${this.id} episode ${episode + 1}`);
70
105
  switch (config.player) {
@@ -148,6 +183,10 @@ class Anime {
148
183
  }
149
184
  }
150
185
  async play(episode, config, config_dir) {
186
+ /*
187
+ # Continues play cascade
188
+ ## Continues on from play_head()
189
+ */
151
190
  console.clear();
152
191
  console.log(`Playing ${this.id} episode ${episode + 1}`);
153
192
  if (this.player == 0) {
@@ -217,6 +256,9 @@ class Anime {
217
256
  }
218
257
  }
219
258
  async download(episode, download_folder) {
259
+ /*
260
+ ## Downloads an episode (counting from 0) to download_folder, with progress bar.
261
+ */
220
262
  // @ts-ignore
221
263
  let ep_link = await this.get_episode_link(episode);
222
264
  let file_name = `${this.id}-${episode + 1}.mp4`;
@@ -246,12 +288,5 @@ class Anime {
246
288
  //console.log((`${option.dir}/${option.filename}`))
247
289
  return await dl(ep_link, option);
248
290
  }
249
- async bulk_download(start_episode, end_episode, download_folder) {
250
- let downloaders = [];
251
- for (let episode = start_episode; episode <= end_episode; episode++) {
252
- downloaders.push(await this.download(episode, download_folder));
253
- }
254
- return await Promise.all(downloaders);
255
- }
256
291
  }
257
292
  exports.Anime = Anime;
package/bin/cache.js CHANGED
@@ -39,24 +39,33 @@ function clear_cache(location, show) {
39
39
  }
40
40
  }
41
41
  exports.clear_cache = clear_cache;
42
- function new_cache(location, anime, show) {
42
+ function new_cache(location, anime) {
43
+ /*
44
+ Creates cache of Anime object, in cache file.
45
+ */
43
46
  try {
44
47
  fs.writeFileSync(location + "/" + anime.id + ".cache", JSON.stringify(anime));
45
48
  }
46
49
  catch {
47
- if (show) {
48
- console.log("Failed to write to cache");
49
- }
50
+ console.log("Failed to write to cache");
50
51
  }
51
52
  }
52
53
  exports.new_cache = new_cache;
53
54
  function get_cache(location, anime_id) {
55
+ /*
56
+ ## Get cache by anime_id. Does not check if the cache exists.
57
+ */
54
58
  return JSON.parse(fs.readFileSync(location + "/" + anime_id + ".cache").toString());
55
59
  }
56
- function search_cache(location, anime_id) {
60
+ function search_cache(cache_folder, anime_id) {
61
+ /*
62
+ ## Searches cache folder for cache file with name of anime_id, at the location of cache_folder
63
+
64
+ ### returns boolean for weather it is found.
65
+ */
57
66
  try {
58
- if (check_cache(location, anime_id)) {
59
- return get_cache(location, anime_id);
67
+ if (check_cache(cache_folder, anime_id)) {
68
+ return get_cache(cache_folder, anime_id);
60
69
  }
61
70
  return false;
62
71
  }
@@ -4,6 +4,9 @@ exports.config_ = void 0;
4
4
  const chalk = require("chalk");
5
5
  const input_1 = require("./input");
6
6
  async function config_(temp) {
7
+ /*
8
+ ## Lets user change a single attribute of config. Returns new config object, and an exit code
9
+ */
7
10
  console.clear();
8
11
  console.log(chalk.blue("ANI-CLI-NPM \n"));
9
12
  console.log(chalk.yellow("Config:\n"));
package/bin/curl.js CHANGED
@@ -2,33 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.curl = void 0;
4
4
  const fetch = require("node-fetch");
5
+ const chalk = require("chalk");
5
6
  async function curl(url, method = "GET", redirect = false) {
6
- //try{
7
- let response = await fetch(url, {
8
- //"agent": proxyAgent,
9
- "headers": {
10
- 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0',
11
- "X-Requested-With": "XMLHttpRequest"
12
- },
13
- "referrerPolicy": "origin",
14
- "body": null,
15
- "method": method,
16
- "redirect": 'follow',
17
- // "follow": 10,
18
- }); /*.catch(async function(err) {
19
- console.warn(colors.Red, `Something went wrong connecting to ${url}.`);
20
- await search();
21
- process.exit()
22
- })*/
23
- if (redirect) {
24
- return response.url;
7
+ try {
8
+ let response = await fetch(url, {
9
+ //"agent": proxyAgent,
10
+ "headers": {
11
+ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0',
12
+ "X-Requested-With": "XMLHttpRequest"
13
+ },
14
+ "referrerPolicy": "origin",
15
+ "body": null,
16
+ "method": method,
17
+ "redirect": 'follow',
18
+ // "follow": 10,
19
+ }).catch(async function (err) {
20
+ console.warn(chalk.red(`Something went wrong connecting to ${url}. ${err}`));
21
+ process.exit();
22
+ });
23
+ if (redirect) {
24
+ return response.url;
25
+ }
26
+ else {
27
+ return await response.text();
28
+ }
25
29
  }
26
- else {
27
- return await response.text();
30
+ catch {
31
+ console.log(chalk.red("Something went wrong in curl()"));
32
+ process.exit();
28
33
  }
29
- /*}catch{
30
- console.log(colors.Red, "Something went wrong in curl()")
31
- await main()
32
- }*/
33
34
  }
34
35
  exports.curl = curl;
package/bin/download.js CHANGED
@@ -12,7 +12,11 @@ const chalk_1 = __importDefault(require("chalk"));
12
12
  async function download(cache_folder, config) {
13
13
  try {
14
14
  console.clear();
15
- let download_id = await (0, search_anime_1.search)();
15
+ let temp_ = await (0, search_anime_1.search)();
16
+ if (temp_ == 1) {
17
+ return 2;
18
+ }
19
+ let download_id = temp_;
16
20
  let download = new Anime_1.Anime();
17
21
  await download.init(download_id, cache_folder);
18
22
  let start_ep_number;
package/bin/index.js CHANGED
@@ -34,7 +34,12 @@ async function main() {
34
34
  ], ["s", "c", "d", "o", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
35
35
  switch (choice) {
36
36
  case 0: // Search
37
- let anime_id = await (0, search_anime_1.search)();
37
+ let temp_ = await (0, search_anime_1.search)();
38
+ if (temp_ == 1) {
39
+ await main();
40
+ process.exit();
41
+ }
42
+ let anime_id = temp_;
38
43
  let anime = new Anime_1.Anime();
39
44
  await anime.init(anime_id, cache_folder);
40
45
  let episode_number;
@@ -59,7 +64,9 @@ async function main() {
59
64
  let continue_anime = new Anime_1.Anime();
60
65
  await continue_anime.init(config.most_recent.anime_id, cache_folder);
61
66
  await continue_anime.play_head(config.most_recent.episode_number, config, cache_folder);
62
- await continue_anime.player.quit();
67
+ if (continue_anime.player != 0 && continue_anime.player != 1) {
68
+ await continue_anime.player.quit();
69
+ }
63
70
  await main();
64
71
  break;
65
72
  case 2: // Download
package/bin/input.js CHANGED
@@ -7,6 +7,24 @@ exports.number_input = exports.input = exports.selection = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const _prompt = require("simple-input");
9
9
  async function selection(options, extra_options = [], color1 = ((thing) => { return chalk_1.default.yellow(thing); }), color2 = ((thing) => { return chalk_1.default.green(thing); })) {
10
+ /*
11
+ selection(options, extra_options, color1, color2)
12
+
13
+ Gives use prompt to choose from a list of options. Either by inputting a number ranging from 1, to the length of the list. Or by inputting a letter (non-caps-sensitive) relating to the option.
14
+
15
+
16
+ - options: array of options; e.g. ["play", "download", "continue", "quit"] REQUIRED
17
+
18
+
19
+ - extra_options: array of characters as alternatives to numbers (both will be displayed). e.g. ["p", "d", "c", "q"].
20
+
21
+ default: []
22
+
23
+ - color1 and color2: functions that will dictate what 2 colors the options with alternate between (option1 will be color1, option2;color2, option3;color1, etc).
24
+ recommended for this function to return a chalk.____() parsed string.
25
+
26
+ default: ((thing:string) => {return chalk.yellow(thing)}) and ((thing:string) => {return chalk.green(thing)})
27
+ */
10
28
  let color = true;
11
29
  for (let x in options) {
12
30
  if (color) {
@@ -57,12 +75,3 @@ async function number_input(max, min = 1) {
57
75
  return selection;
58
76
  }
59
77
  exports.number_input = number_input;
60
- async function number_input_range(max, min = 1) {
61
- let selection;
62
- do {
63
- selection = await _prompt(">");
64
- if (!(min <= parseInt(selection[0]) && parseInt(selection[0]) <= max)) {
65
- console.log(chalk_1.default.red("Invalid choice."));
66
- }
67
- } while (!(min <= parseInt(selection[0]) && parseInt(selection[0]) <= max));
68
- }
@@ -30,6 +30,10 @@ async function search() {
30
30
  console.log(chalk_1.default.magenta("Search..."));
31
31
  let _selection = await (0, input_1.input)();
32
32
  let results = await search_anime(_selection);
33
+ if (results[0] === undefined) {
34
+ console.log(chalk_1.default.red("No results found."));
35
+ return 1;
36
+ }
33
37
  return results[await (0, input_1.selection)(results)];
34
38
  }
35
39
  exports.search = search;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ani-cli-npm",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "ani-cli tool rewritten as npm package",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -35,7 +35,6 @@
35
35
  "media-player-controller": "^1.5.3",
36
36
  "node-fetch": "^2.6.6",
37
37
  "open": "^8.4.0",
38
- "persistent-cache": "^0.1.0",
39
38
  "simple-input": "^1.0.1",
40
39
  "typescript": "^4.9.3"
41
40
  },