ani-cli-npm 1.3.1 → 1.4.0

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/README.MD CHANGED
@@ -19,7 +19,10 @@ npx ani-cli-npm@latest
19
19
  ```
20
20
  pkg install nodejs
21
21
  ```
22
- #### - Run npx ani-cli-npm@latest
22
+ #### - Run
23
+ ```
24
+ npx ani-cli-npm@latest
25
+ ```
23
26
  ##### Note: At preset (1.0.6), you will need to change the player to browser, and will have to do any downloads through your browser of choice.
24
27
 
25
28
  ### Linux:
@@ -64,4 +67,4 @@ npx ani-cli-npm@latest
64
67
 
65
68
  ### This project is still somewhat under development, as such, there are a few bugs you may run into. Feel free to open an issue on github, though there is a solid chance I am aware of it and just havn't gotten round to fixing it yet.
66
69
 
67
- ## Happy watching :)
70
+ ## Happy watching :)
package/bin/index.js CHANGED
@@ -19,6 +19,10 @@ const open = require("open")
19
19
  const prompt = require("simple-input");
20
20
  const getAppDataPath = require("appdata-path")
21
21
  const fs = require("fs")
22
+ const downloadsFolder = require('downloads-folder');
23
+ const dl = require("download-file-with-progressbar");
24
+
25
+
22
26
 
23
27
  let config = {
24
28
  player: "BROWSER",
@@ -28,7 +32,8 @@ let config = {
28
32
  episode_number: 0,
29
33
  anime_id: "",
30
34
  episodes: []
31
- }
35
+ },
36
+ download_folder: downloadsFolder()
32
37
  }
33
38
 
34
39
 
@@ -36,18 +41,11 @@ function read_config(){
36
41
  try{
37
42
  try {
38
43
  config = JSON.parse(fs.readFileSync(getAppDataPath() + "/ani-cli-npm.conf")) //getAppDataPath()
39
- if (!config.hasOwnProperty("player")) {
40
- config.player = "BROWSER"
41
- }
42
- if (!config.hasOwnProperty("user_agent")) {
43
- config.user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0"
44
- }
45
- if (!config.hasOwnProperty("proxy")) {
46
- config.user_agent = ""
47
- }
48
- if (!config.hasOwnProperty("most_recent")) {
49
- config.most_recent = null
50
- }
44
+ if (!config.hasOwnProperty("player")) config.player = "BROWSER";
45
+ if (!config.hasOwnProperty("user_agent")) config.user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0";
46
+ if (!config.hasOwnProperty("proxy")) config.user_agent = "";
47
+ if (!config.hasOwnProperty("most_recent")) config.most_recent = null;
48
+ if(!config.download_folder) config.download_folder = downloadsFolder();
51
49
  fs.writeFileSync(getAppDataPath() + "/ani-cli-npm.conf", JSON.stringify(config))
52
50
  } catch {
53
51
  fs.writeFileSync(getAppDataPath() + "/ani-cli-npm.conf", JSON.stringify(config))
@@ -216,8 +214,28 @@ async function episode_list(anime_id){
216
214
  return json
217
215
  }
218
216
 
219
- async function download(url, name){
220
- console.log(colors.Red, "Feature not implemented yet. Sorry for any inconvenience.\nIf you need to download a video, request the link, then download it via your internet browser of choice.")
217
+ function download(link, file_name){
218
+ console.log(colors.Red, "Warning: Animixplay will download an m3u8 file. This will require some extra steps to play. It is advised to use a 3rd party website or tool to download these from the link.")
219
+ let option = {
220
+ filename: link.includes("m3u8") ? file_name.replace("mp4", "m3u8") : file_name,
221
+ dir: config.download_folder,
222
+ onDone: (info)=>{
223
+ console.log(colors.Green, `\n -- Download finished -- \nLocation: ${info.path}\nSize: ${Math.round(info.size/100000)*10} Bytes`);
224
+ return 0;
225
+ },
226
+ onError: (err) => {
227
+ console.log(colors.Red, 'error', err);
228
+ },
229
+ onProgress: (curr, total) => {
230
+ process.stdout.clearLine(0);
231
+ process.stdout.cursorTo(0);
232
+ process.stdout.write(('\x1b[32m -- progress '+ (curr / total * 100).toFixed(2) + '% -- \x1b[0m'));
233
+ },
234
+ }
235
+ console.log(colors.White, `${option.dir}/${option.filename}`)
236
+
237
+ return dl(link, option);
238
+
221
239
  }
222
240
 
223
241
  async function selection(options, prompt, extra_options = []){
@@ -311,7 +329,7 @@ async function generate_link(provider, id){
311
329
  }
312
330
  }
313
331
 
314
- async function post_play(link, anime){
332
+ async function post_play(link, anime, player = null){
315
333
  while (true){
316
334
  config.most_recent = anime
317
335
  write_config()
@@ -320,41 +338,43 @@ async function post_play(link, anime){
320
338
  console.log(colors.Cyan, "1/l) Show Link")
321
339
  console.log(colors.Cyan, "2/n) Next Episode")
322
340
  console.log(colors.Cyan, "3/p) Prev Episode")
323
- console.log(colors.Cyan, "4/q) Quit")
324
- switch (await selection(4, "select;", ["l", "n", "p", "q"])){
341
+ console.log(colors.Cyan, "4/d) Download")
342
+ console.log(colors.Cyan, "5/q) Quit")
343
+ switch (await selection(5, "select;", ["l", "n", "p", "d", "q"])){
325
344
  case "l":
326
345
  case "1":
327
- console.clear()
328
- console.log(colors.Blue, "ANI-CLI-NPM \n")
329
346
  console.log(colors.Yellow, "Link: "+link)
330
347
  break
331
348
  case "n":
332
349
  case "2":
333
350
  if (anime.episode_number > anime.episodes.length-2){
334
- console.clear()
335
351
  console.log(colors.Red, "Damn, all out of episodes?")
336
352
  break
337
353
  }
338
354
  anime.episode_number += 1
339
355
  link = await get_video_link(anime.episodes[anime.episode_number])
340
- await play(link, anime)
356
+ await play(link, anime, player)
341
357
  process.exit()
342
358
  break
343
359
  //EVEN MORE NEEDLESS QUIT STATEMENTS!!!!!!
344
360
  case "p":
345
361
  case "3":
346
362
  if (anime.episode_number < 2){
347
- console.clear()
348
363
  console.log(colors.Red, "Error; Episode 0 is only available for premium members")
349
364
  break
350
365
  }
351
366
  anime.episode_number -= 1
352
367
  link = await get_video_link(anime.episodes[anime.episode_number])
353
- await play(link, anime)
368
+ await play(link, anime, player)
354
369
  process.exit()
355
370
  break
356
- case "q":
371
+ case "d":
357
372
  case "4":
373
+ console.log(colors.Yellow, "Beware of the dysfunctional await clause.")
374
+ await download(link, anime.anime_id+(anime.episode_number+1)+".mp4")
375
+ break
376
+ case "q":
377
+ case "5":
358
378
  console.clear()
359
379
  await main()
360
380
  process.exit()
@@ -363,20 +383,34 @@ async function post_play(link, anime){
363
383
  }
364
384
  }
365
385
 
366
- async function play(link, anime){
386
+ async function play(link, anime, player){
367
387
  console.clear()
368
388
  console.log(colors.Blue, "ANI-CLI-NPM \n")
369
389
  if (config.player === "VLC"){
370
- console.log(colors.Yellow, "Loading VLC... ")
371
- let player = new PlayerController({
372
- app: 'vlc',
373
- args: ['--fullscreen'],
374
- media: link
375
- });
376
- await player.launch(err => {
377
- if(err) return console.error(err.message);
378
- });
379
- await post_play(link, anime)
390
+ if (!player){
391
+ console.log(colors.Yellow, "Loading VLC... ")
392
+ player = new PlayerController({
393
+ app: 'vlc',
394
+ args: ['--fullscreen'],
395
+ media: link
396
+ });
397
+ await player.launch(err => {
398
+ if (err) return console.error(err.message);
399
+ });
400
+ }else{
401
+ player.quit()
402
+ console.log(colors.Yellow, "Loading VLC... ")
403
+ player = new PlayerController({
404
+ app: 'vlc',
405
+ args: ['--fullscreen'],
406
+ media: link
407
+ });
408
+ await player.launch(err => {
409
+ if (err) return console.error(err.message);
410
+ });
411
+ }
412
+
413
+ await post_play(link, anime, player)
380
414
  process.exit()
381
415
 
382
416
 
@@ -386,23 +420,26 @@ async function play(link, anime){
386
420
  await post_play(link, anime)
387
421
  process.exit()
388
422
  }else if (config.player === "MPV"){
389
- console.log(colors.Yellow, "Loading MPV... ")
390
- let player = new PlayerController({
391
- app: 'mpv',
392
- args: ['--fullscreen'],
393
- media: link
394
- });
395
- await player.launch(err => {
396
- if(err) return console.error(err.message);
397
- });
398
- await post_play(link, anime)
423
+ if (!player){
424
+ console.log(colors.Yellow, "Loading MPV... ")
425
+ player = new PlayerController({
426
+ app: 'mpv',
427
+ args: ['--fullscreen'],
428
+ media: link
429
+ });
430
+ await player.launch(err => {
431
+ if (err) return console.error(err.message);
432
+ });
433
+ }else{
434
+ player.load(link)
435
+ }
436
+
437
+ await post_play(link, anime, player)
399
438
  process.exit()
400
439
  }
401
440
  }
402
441
 
403
442
  async function search(){
404
- console.clear()
405
- console.log(colors.Blue, "ANI-CLI-NPM \n")
406
443
  console.log(colors.Magenta, "Search...")
407
444
  let choice = await input("")
408
445
  let anime = await process_search(choice)
@@ -411,8 +448,6 @@ async function search(){
411
448
 
412
449
  console.log(colors.Blue, "Indexing video...")
413
450
  let link = await get_video_link(anime.episodes[anime.episode_number])
414
- console.clear()
415
- console.log(colors.Blue, "ANI-CLI-NPM \n")
416
451
  if (!link){
417
452
  console.log(colors.Red, "Np link for this episode found?")
418
453
  console.log(colors.Yellow, "^ at current this is due to not all of the required video repos being implemented.")
@@ -427,19 +462,37 @@ async function search(){
427
462
  console.log(colors.Cyan, "2/d) Download")
428
463
  console.log(colors.Cyan, "3/l) Show Link")
429
464
  console.log(colors.Cyan, "4/q) quit")
430
- choice = (await selection(4, "select;", "p", "d", "l", "q"))
465
+ choice = (await selection(4, "select;", ["p", "d", "l", "q"]))
431
466
  switch (choice){
432
467
  case "p":
433
468
  case "1":
434
- await play(link, anime)
469
+ await play(link, anime, null)
435
470
  break
436
471
  case "d":
437
472
  case "2":
438
- await download(link, anime.anime_id+anime.episode_number+".mp4")
473
+ await download(link, anime.anime_id+(anime.episode_number+1)+".mp4")
439
474
  break
440
475
  case "l":
441
476
  case "3":
442
477
  console.log(colors.Yellow, "Link: "+link)
478
+ console.log(colors.Cyan, "\n1/p) Play")
479
+ console.log(colors.Cyan, "2/d) Download")
480
+ console.log(colors.Cyan, "3/q) quit")
481
+ choice = (await selection(3, "select;", ["p", "d", "q"]))
482
+ switch (choice){
483
+ case "p":
484
+ case "1":
485
+ await play(link, anime, null)
486
+ break
487
+ case "d":
488
+ case "2":
489
+ await download(link, anime.anime_id+anime.episode_number+".mp4")
490
+ break
491
+ case "q":
492
+ case "3":
493
+ await main()
494
+ process.exit()
495
+ }
443
496
  break
444
497
  case "q":
445
498
  case "4":
@@ -519,5 +572,4 @@ async function main(){
519
572
  }
520
573
 
521
574
 
522
- main()
523
-
575
+ main()
package/image.png ADDED
Binary file
package/mpv.js CHANGED
@@ -1,9 +1,19 @@
1
- const PlayerController = require("media-player-controller")
1
+ const dl = require('download-file-with-progressbar');
2
2
 
3
- let player = new PlayerController({
4
- app: 'mpv',
5
- args: ['--fullscreen'],
6
- });
3
+ option = {
4
+ filename: 'video.mp4',
5
+ dir: '.',
6
+ onDone: (info)=>{
7
+ console.log('done', info);
8
+ },
9
+ onError: (err) => {
10
+ console.log('error', err);
11
+ },
12
+ onProgress: (curr, total) => {
13
+ process.stdout.clearLine(0);
14
+ process.stdout.cursorTo(0);
15
+ process.stdout.write(('\x1b[32m -- progress '+ (curr / total * 100).toFixed(2) + '% -- \x1b[0m'));
16
+ },
17
+ }
7
18
 
8
-
9
- player.load("https://wwwx13.gogocdn.stream/videos/hls/l7dItSAxiTBxQMRxKVtoHQ/1669069114/114212/012ef98641ababee475564c70e8ebc93/ep.43.1662459121.m3u8")
19
+ var dd = dl('https://fvs.io/redirector?token=YWJSTUxWYW51UUFQS0dEVlZITHBKejQwbkZkOXJYSWdidnFkU3B1RnVPaVlPclhXbjRlNTVwQS9tclB0Rm1ZUzlNV1FIM2RJM2hOZXkyZmMycHFFUU5Hc0hHZCtHU2MxTWN2andnS2xWUGl3bjVVSnBibUhueTRJVTRuT1Jnbk5TRjRQRVFITERJL0svTVI1QkpTVG10Z0FNQnQvTWZxQ3FCZz06SUVYYjJQMzNUSjhGdE8zQmx5QjdmUT09H57e', option);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ani-cli-npm",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "ani-cli tool rewritten as npm package",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -16,7 +16,11 @@
16
16
  "anime",
17
17
  "ani-cli",
18
18
  "anime",
19
- "client"
19
+ "client",
20
+ "weeb",
21
+ "sad-weeb",
22
+ "video",
23
+ "download"
20
24
  ],
21
25
  "author": "bumpkin-pi",
22
26
  "license": "ISC",
@@ -25,6 +29,8 @@
25
29
  },
26
30
  "dependencies": {
27
31
  "appdata-path": "^1.0.0",
32
+ "download-file-with-progressbar": "^1.2.3",
33
+ "downloads-folder": "^3.0.3",
28
34
  "media-player-controller": "^1.5.3",
29
35
  "node-fetch": "^2.6.6",
30
36
  "open": "^8.4.0",
package/video.mp4 ADDED
Binary file