ani-cli-npm 2.1.0 → 2.1.2
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 +34 -46
- package/bin/core_utils/curl.js +35 -0
- package/bin/core_utils/libs.js +12 -0
- package/bin/core_utils/regex.js +8 -0
- package/bin/file_managment/cache.js +79 -0
- package/bin/file_managment/change_config.js +99 -0
- package/bin/file_managment/load_config.js +110 -0
- package/bin/generate_link.js +2 -2
- package/bin/help.js +59 -0
- package/bin/index.js +10 -5
- package/bin/load_config.js +3 -0
- package/bin/search_anime.js +2 -2
- package/package.json +1 -1
- package/tem.js +0 -13
package/bin/Anime.js
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.Anime = void 0;
|
4
|
-
const curl_1 = require("./curl");
|
5
|
-
const regex_1 = require("./regex");
|
4
|
+
const curl_1 = require("./core_utils/curl");
|
5
|
+
const regex_1 = require("./core_utils/regex");
|
6
6
|
const generate_link_1 = require("./generate_link");
|
7
|
-
const cache_1 = require("./cache");
|
7
|
+
const cache_1 = require("./file_managment/cache");
|
8
8
|
const input_1 = require("./input");
|
9
|
-
const load_config_1 = require("./load_config");
|
9
|
+
const load_config_1 = require("./file_managment/load_config");
|
10
10
|
const W2GClient = require("w2g-client");
|
11
11
|
const open = require("open");
|
12
12
|
const PlayerController = require("media-player-controller");
|
@@ -25,6 +25,7 @@ class Anime {
|
|
25
25
|
episode_list = [];
|
26
26
|
most_recent = 0;
|
27
27
|
player = 0;
|
28
|
+
current_pos = 0;
|
28
29
|
async init(anime_id, cache_folder) {
|
29
30
|
/*
|
30
31
|
Initiate Anime object
|
@@ -51,6 +52,9 @@ class Anime {
|
|
51
52
|
if (cache_object.most_recent != undefined) {
|
52
53
|
this.most_recent = cache_object.most_recent;
|
53
54
|
}
|
55
|
+
if (cache_object.position != undefined) {
|
56
|
+
this.current_pos = cache_object.position;
|
57
|
+
}
|
54
58
|
}
|
55
59
|
catch {
|
56
60
|
await this.get_ep_bases(this.id);
|
@@ -116,13 +120,13 @@ class Anime {
|
|
116
120
|
- If set to Link, it will simply print the media stream link to console, primarily for debuting peruses.
|
117
121
|
*/
|
118
122
|
console.clear();
|
119
|
-
console.log(`Playing ${this.id} episode ${episode + 1}`);
|
123
|
+
console.log(`Playing ${this.id} episode ${episode + 1} from ${new Date(this.current_pos * 1000).toISOString().slice(11, 19)}`);
|
120
124
|
switch (config.player) {
|
121
125
|
case "MPV":
|
122
126
|
console.log(("Opening MPV.."));
|
123
127
|
this.player = await new PlayerController({
|
124
128
|
app: 'mpv',
|
125
|
-
args: ['--fullscreen', '--keep-open=yes'],
|
129
|
+
args: ['--fullscreen', '--keep-open=yes', `--start=+${this.current_pos}`],
|
126
130
|
media: await this.get_episode_link(episode, config.player),
|
127
131
|
ipcPath: config.mpv_socket_path
|
128
132
|
});
|
@@ -136,7 +140,7 @@ class Anime {
|
|
136
140
|
console.log(("Opening VLC.."));
|
137
141
|
this.player = await new PlayerController({
|
138
142
|
app: 'vlc',
|
139
|
-
args: ['--fullscreen'],
|
143
|
+
args: ['--fullscreen', `--start-time ${this.current_pos}`],
|
140
144
|
media: await this.get_episode_link(episode, config.player),
|
141
145
|
//httpPort: (config.vlc_socket !== 0)? config.vlc_socket : null, // HTTP port for local communication (vlc only)
|
142
146
|
//httpPass: (config.vlc_pass !== "")? config.vlc_socket : null,
|
@@ -168,6 +172,26 @@ class Anime {
|
|
168
172
|
console.log(await this.get_episode_link(episode, config.player));
|
169
173
|
break;
|
170
174
|
}
|
175
|
+
if (this.player.on !== undefined) {
|
176
|
+
this.player.on('playback', (data) => {
|
177
|
+
if (data.name == "time-pos" && data.value >= 0) {
|
178
|
+
this.current_pos = data.value;
|
179
|
+
}
|
180
|
+
});
|
181
|
+
this.player.on('app-exit', (code) => {
|
182
|
+
config.most_recent.anime_id = this.id;
|
183
|
+
config.most_recent.episode_number = episode;
|
184
|
+
config.most_recent.episode_second = this.current_pos;
|
185
|
+
(0, load_config_1.write_config)(config_dir, config);
|
186
|
+
this.most_recent = episode;
|
187
|
+
(0, cache_1.new_cache)(config_dir, {
|
188
|
+
id: this.id,
|
189
|
+
episode_list: this.episode_list,
|
190
|
+
most_recent: this.most_recent,
|
191
|
+
position: this.current_pos
|
192
|
+
});
|
193
|
+
});
|
194
|
+
}
|
171
195
|
await this.play(episode, config, config_dir, true);
|
172
196
|
}
|
173
197
|
async play(episode, config, config_dir, first = false) {
|
@@ -207,12 +231,14 @@ class Anime {
|
|
207
231
|
}
|
208
232
|
config.most_recent.anime_id = this.id;
|
209
233
|
config.most_recent.episode_number = episode;
|
234
|
+
config.most_recent.episode_second = this.current_pos;
|
210
235
|
(0, load_config_1.write_config)(config_dir, config);
|
211
236
|
this.most_recent = episode;
|
212
237
|
(0, cache_1.new_cache)(config_dir, {
|
213
238
|
id: this.id,
|
214
239
|
episode_list: this.episode_list,
|
215
|
-
most_recent: this.most_recent
|
240
|
+
most_recent: this.most_recent,
|
241
|
+
position: this.current_pos
|
216
242
|
});
|
217
243
|
let selected; // Look, I'm sorry, but there is no way I can possibly document this in a sane way. It's a dumb patch.
|
218
244
|
do {
|
@@ -250,44 +276,6 @@ class Anime {
|
|
250
276
|
case 3:
|
251
277
|
break;
|
252
278
|
}
|
253
|
-
// if (episode <= 0){
|
254
|
-
// switch(await selection([
|
255
|
-
// "Next",
|
256
|
-
// "Quit"
|
257
|
-
// ], ["n", "q"])){
|
258
|
-
// case 0:
|
259
|
-
// await this.play(episode+1, config, config_dir)
|
260
|
-
// break
|
261
|
-
// case 1:
|
262
|
-
// break
|
263
|
-
// }
|
264
|
-
// }else if(episode >= this.episode_list.length-2){
|
265
|
-
// switch(await selection([
|
266
|
-
// "Previous",
|
267
|
-
// "Quit"
|
268
|
-
// ], ["p", "q"])){
|
269
|
-
// case 0:
|
270
|
-
// await this.play(episode-1, config, config_dir)
|
271
|
-
// break
|
272
|
-
// case 1:
|
273
|
-
// break
|
274
|
-
// }
|
275
|
-
// }else{
|
276
|
-
// switch(await selection([
|
277
|
-
// "Next",
|
278
|
-
// "Previous",
|
279
|
-
// "Quit"
|
280
|
-
// ], ["n", "p", "q"])){
|
281
|
-
// case 0:
|
282
|
-
// await this.play(episode+1, config, config_dir)
|
283
|
-
// break
|
284
|
-
// case 1:
|
285
|
-
// await this.play(episode-1, config, config_dir)
|
286
|
-
// break
|
287
|
-
// case 2:
|
288
|
-
// break
|
289
|
-
// }
|
290
|
-
// }
|
291
279
|
}
|
292
280
|
async download(episode, download_folder, final_ep) {
|
293
281
|
/*
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.curl = void 0;
|
4
|
+
const fetch = require("node-fetch");
|
5
|
+
const chalk = require("chalk");
|
6
|
+
async function curl(url, method = "GET", redirect = false) {
|
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
|
+
}
|
29
|
+
}
|
30
|
+
catch {
|
31
|
+
console.log(chalk.red("Something went wrong in curl()"));
|
32
|
+
process.exit();
|
33
|
+
}
|
34
|
+
}
|
35
|
+
exports.curl = curl;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
// Random functions
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
4
|
+
exports.range = void 0;
|
5
|
+
function range(start, end) {
|
6
|
+
let ans = [];
|
7
|
+
for (let i = start; i <= end; i++) {
|
8
|
+
ans.push(i);
|
9
|
+
}
|
10
|
+
return ans;
|
11
|
+
}
|
12
|
+
exports.range = range;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.RegexParse = void 0;
|
4
|
+
function RegexParse(str, rule) {
|
5
|
+
let escapeRegex = (str) => str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
6
|
+
return new RegExp("^" + rule.split("*").map(escapeRegex).join(".*") + "$").test(str);
|
7
|
+
}
|
8
|
+
exports.RegexParse = RegexParse;
|
@@ -0,0 +1,79 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
exports.search_cache = exports.new_cache = exports.clear_cache = void 0;
|
27
|
+
const fs = __importStar(require("fs"));
|
28
|
+
function clear_cache(location, show) {
|
29
|
+
try {
|
30
|
+
console.log("ye sorry that doesnt exist yet.");
|
31
|
+
if (show) {
|
32
|
+
console.log("Cleared cache");
|
33
|
+
}
|
34
|
+
}
|
35
|
+
catch {
|
36
|
+
if (show) {
|
37
|
+
console.log("Failed to clear cache.");
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
exports.clear_cache = clear_cache;
|
42
|
+
function new_cache(location, anime) {
|
43
|
+
/*
|
44
|
+
Creates cache of Anime object, in cache file.
|
45
|
+
*/
|
46
|
+
try {
|
47
|
+
fs.writeFileSync(location + "/" + anime.id + ".cache", JSON.stringify(anime));
|
48
|
+
}
|
49
|
+
catch {
|
50
|
+
console.log("Failed to write to cache");
|
51
|
+
}
|
52
|
+
}
|
53
|
+
exports.new_cache = new_cache;
|
54
|
+
function get_cache(location, anime_id) {
|
55
|
+
/*
|
56
|
+
## Get cache by anime_id. Does not check if the cache exists.
|
57
|
+
*/
|
58
|
+
return JSON.parse(fs.readFileSync(location + "/" + anime_id + ".cache").toString());
|
59
|
+
}
|
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
|
+
*/
|
66
|
+
try {
|
67
|
+
if (check_cache(cache_folder, anime_id)) {
|
68
|
+
return get_cache(cache_folder, anime_id);
|
69
|
+
}
|
70
|
+
return false;
|
71
|
+
}
|
72
|
+
catch {
|
73
|
+
return false;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
exports.search_cache = search_cache;
|
77
|
+
function check_cache(location, anime_id) {
|
78
|
+
return fs.readdirSync(location).includes(anime_id + ".cache");
|
79
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.config_ = void 0;
|
4
|
+
const chalk = require("chalk");
|
5
|
+
const input_1 = require("../input");
|
6
|
+
const configs = [
|
7
|
+
(async (temp) => {
|
8
|
+
temp.player = [
|
9
|
+
"VLC",
|
10
|
+
"BROWSER",
|
11
|
+
"MPV",
|
12
|
+
"W2G",
|
13
|
+
"LINK",
|
14
|
+
][await (0, input_1.selection)([
|
15
|
+
"VLC - VLC media player",
|
16
|
+
"Browser - Play in default browser",
|
17
|
+
"MPV - MPV media player",
|
18
|
+
"w2g.tv - Watch together with friends in browser (Specify api token to create rooms linked to your account)",
|
19
|
+
"Link - Simply display the link in console"
|
20
|
+
], [], ((item) => { return chalk.cyan(item); }), ((item) => { return chalk.cyan(item); }))];
|
21
|
+
// @ts-ignore
|
22
|
+
return temp, 0;
|
23
|
+
}),
|
24
|
+
(async (temp) => {
|
25
|
+
console.log(chalk.cyan("New Proxy;"));
|
26
|
+
temp.proxy = (await ((0, input_1.input)())).replaceAll(" ", "");
|
27
|
+
// @ts-ignore
|
28
|
+
return temp, 0;
|
29
|
+
}),
|
30
|
+
(async (temp) => {
|
31
|
+
console.log(chalk.cyan("New User Agent"));
|
32
|
+
temp.user_agent = await ((0, input_1.input)());
|
33
|
+
// @ts-ignore
|
34
|
+
return temp, 0;
|
35
|
+
}),
|
36
|
+
(async (temp) => {
|
37
|
+
console.log(chalk.cyan("New Downloads Folder"));
|
38
|
+
temp.download_folder = await ((0, input_1.input)());
|
39
|
+
// @ts-ignore
|
40
|
+
return temp, 0;
|
41
|
+
}),
|
42
|
+
(async (temp) => {
|
43
|
+
console.log(chalk.cyan("New socket file"));
|
44
|
+
temp.mpv_socket_path = await ((0, input_1.input)());
|
45
|
+
// @ts-ignore
|
46
|
+
return temp, 0;
|
47
|
+
}),
|
48
|
+
(async (temp) => {
|
49
|
+
console.log(chalk.cyan("New VLC socket"));
|
50
|
+
temp.vlc_socket = await ((0, input_1.input)());
|
51
|
+
// @ts-ignore
|
52
|
+
return temp, 0;
|
53
|
+
}),
|
54
|
+
(async (temp) => {
|
55
|
+
console.log(chalk.cyan("New VLC password"));
|
56
|
+
temp.vlc_pass = await ((0, input_1.input)());
|
57
|
+
// @ts-ignore
|
58
|
+
return temp, 0;
|
59
|
+
}),
|
60
|
+
(async (temp) => {
|
61
|
+
console.log(chalk.cyan("New w2g.tv api token"));
|
62
|
+
temp.w2g_api_key = await ((0, input_1.input)());
|
63
|
+
// @ts-ignore
|
64
|
+
return temp, 0;
|
65
|
+
}),
|
66
|
+
(async (temp) => {
|
67
|
+
// @ts-ignore
|
68
|
+
return temp, 1;
|
69
|
+
}),
|
70
|
+
(async (temp) => {
|
71
|
+
// @ts-ignore
|
72
|
+
return temp, 2;
|
73
|
+
})
|
74
|
+
];
|
75
|
+
async function config_(temp) {
|
76
|
+
/*
|
77
|
+
## Lets user change a single attribute of config. Returns new config object, and an exit code
|
78
|
+
|
79
|
+
### 0 to continue (generic return)
|
80
|
+
### 1 To confirm (Save and exit)
|
81
|
+
### 2 to cancel (exit without saving changes)
|
82
|
+
*/
|
83
|
+
console.clear();
|
84
|
+
console.log(chalk.blue("ANI-CLI-NPM \n"));
|
85
|
+
console.log(chalk.yellow("Config:\n"));
|
86
|
+
return configs[await (0, input_1.selection)([
|
87
|
+
"Player; " + temp.player,
|
88
|
+
"Proxy; " + temp.proxy,
|
89
|
+
"User agent; " + temp.user_agent,
|
90
|
+
"Downloads folder; " + temp.download_folder,
|
91
|
+
"Mpv socket connection file; " + temp.mpv_socket_path,
|
92
|
+
"VLC socket; " + temp.vlc_socket,
|
93
|
+
"VLC pass; " + temp.vlc_pass,
|
94
|
+
"W2G api token: " + temp.w2g_api_key,
|
95
|
+
"Save and exit",
|
96
|
+
"Exit without saving"
|
97
|
+
], [], ((item) => { return chalk.cyan(item); }), ((item) => { return chalk.cyan(item); }))](temp);
|
98
|
+
}
|
99
|
+
exports.config_ = config_;
|
@@ -0,0 +1,110 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
exports.make_config_dir = exports.write_config = exports.load_config = void 0;
|
27
|
+
const fs = __importStar(require("fs"));
|
28
|
+
function make_config_dir(cache_dir, debug) {
|
29
|
+
try {
|
30
|
+
if (!fs.existsSync(cache_dir + "/"))
|
31
|
+
fs.mkdirSync(cache_dir + "/");
|
32
|
+
}
|
33
|
+
catch {
|
34
|
+
if (debug) {
|
35
|
+
console.log("Failed to make cache dir");
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
exports.make_config_dir = make_config_dir;
|
40
|
+
function write_config(cache_dir, config) {
|
41
|
+
try {
|
42
|
+
//make_config_dir(cache_dir, config.debug_mode)
|
43
|
+
fs.writeFileSync(cache_dir + "/config.conf", JSON.stringify(config), "utf-8");
|
44
|
+
}
|
45
|
+
catch {
|
46
|
+
console.log(("Failed to write to config file."));
|
47
|
+
}
|
48
|
+
}
|
49
|
+
exports.write_config = write_config;
|
50
|
+
function load_config(cache_dir) {
|
51
|
+
let config = {
|
52
|
+
player: "BROWSER",
|
53
|
+
proxy: "",
|
54
|
+
user_agent: "Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0",
|
55
|
+
most_recent: {
|
56
|
+
episode_number: 0,
|
57
|
+
episode_second: 0,
|
58
|
+
anime_id: ""
|
59
|
+
},
|
60
|
+
download_folder: ".",
|
61
|
+
debug_mode: false,
|
62
|
+
mpv_socket_path: "",
|
63
|
+
vlc_socket: 0,
|
64
|
+
vlc_pass: "",
|
65
|
+
w2g_api_key: ""
|
66
|
+
};
|
67
|
+
if (fs.existsSync(cache_dir + "/config.conf")) {
|
68
|
+
// @ts-ignore
|
69
|
+
let tmp = JSON.parse(fs.readFileSync(cache_dir + "/config.conf"), "utf8");
|
70
|
+
// @ts-ignore
|
71
|
+
if (tmp.player !== undefined)
|
72
|
+
config.player = tmp.player;
|
73
|
+
// @ts-ignore
|
74
|
+
if (tmp.proxy !== undefined)
|
75
|
+
config.proxy = tmp.proxy;
|
76
|
+
// @ts-ignore
|
77
|
+
if (tmp.user_agent !== undefined)
|
78
|
+
config.user_agent = tmp.user_agent;
|
79
|
+
// @ts-ignore
|
80
|
+
if (tmp.most_recent !== undefined) {
|
81
|
+
// @ts-ignore
|
82
|
+
if (tmp.most_recent.episode_number !== undefined)
|
83
|
+
config.most_recent.episode_number = tmp.most_recent.episode_number;
|
84
|
+
// @ts-ignore
|
85
|
+
if (tmp.most_recent.anime_id !== undefined)
|
86
|
+
config.most_recent.anime_id = tmp.most_recent.anime_id;
|
87
|
+
// @ts-ignore
|
88
|
+
if (tmp.most_recent.episode_second !== undefined)
|
89
|
+
config.most_recent.episode_second = tmp.most_recent.episode_second;
|
90
|
+
}
|
91
|
+
// @ts-ignore
|
92
|
+
if (tmp.download_folder !== undefined)
|
93
|
+
config.download_folder = tmp.download_folder;
|
94
|
+
// @ts-ignore
|
95
|
+
if (tmp.mpv_socket_path !== undefined)
|
96
|
+
config.mpv_socket_path = tmp.mpv_socket_path;
|
97
|
+
// @ts-ignore
|
98
|
+
if (tmp.vlc_socket !== undefined)
|
99
|
+
config.vlc_socket = tmp.vlc_socket;
|
100
|
+
// @ts-ignore
|
101
|
+
if (tmp.vlc_pass !== undefined)
|
102
|
+
config.vlc_pass = tmp.vlc_pass;
|
103
|
+
// @ts-ignore
|
104
|
+
if (tmp.w2g_api_key !== undefined)
|
105
|
+
config.w2g_api_key = tmp.w2g_api_key;
|
106
|
+
}
|
107
|
+
write_config(cache_dir, config);
|
108
|
+
return config;
|
109
|
+
}
|
110
|
+
exports.load_config = load_config;
|
package/bin/generate_link.js
CHANGED
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generate_link = void 0;
|
4
4
|
const gogohd_url = "https://gogohd.net/";
|
5
5
|
const base_url = "https://animixplay.to";
|
6
|
-
const curl_1 = require("./curl");
|
7
|
-
const regex_1 = require("./regex");
|
6
|
+
const curl_1 = require("./core_utils/curl");
|
7
|
+
const regex_1 = require("./core_utils/regex");
|
8
8
|
async function generate_link(provider, id, player) {
|
9
9
|
let html_ = "";
|
10
10
|
let provider_name = "";
|
package/bin/help.js
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.help = void 0;
|
4
|
+
const input_1 = require("./input");
|
5
|
+
const chalk = require("chalk");
|
6
|
+
const helps = [
|
7
|
+
(async () => {
|
8
|
+
console.log(chalk.cyan("Playing anime: \n" +
|
9
|
+
" Search: \n" +
|
10
|
+
" Search for a show/movie. This will search on gogoanime.dk.\n" +
|
11
|
+
" Episode selection: \n" +
|
12
|
+
" Once an anime is selected, select an episode. If there is only 1 episode " +
|
13
|
+
"(in the case of a movie), the episode will be played automatically.\n" +
|
14
|
+
" The episode selected will be played in the video player selected in options. Info on video players can be found in options help."));
|
15
|
+
await help();
|
16
|
+
return;
|
17
|
+
}),
|
18
|
+
(async () => {
|
19
|
+
console.log(chalk.cyan("Downloading anime: \n" +
|
20
|
+
" Search: \n" +
|
21
|
+
" Search for a show/movie. This will search on gogoanime.dk.\n" +
|
22
|
+
" Episode selection: \n" +
|
23
|
+
" Once an anime is selected, select a start episode and an end episode. If there is only 1 episode " +
|
24
|
+
"(in the case of a movie), the episode will be downloaded automatically. Download folder can be changed in options. Default to run location.\n" +
|
25
|
+
" The selected episodes will be downloaded. It is common for episode links to fail to be fetched, when this happens the episode will be passed, then reattempted in another pass.\n" +
|
26
|
+
" Episodes sourced from Animixplay links will download m3u8 file, which you will have difficulty playing, if you are able to at all."));
|
27
|
+
await help();
|
28
|
+
return;
|
29
|
+
}),
|
30
|
+
(async () => {
|
31
|
+
console.log(chalk.cyan("Options: \n" +
|
32
|
+
" Player: \n" +
|
33
|
+
" Player used to play anime.\n" +
|
34
|
+
" Proxy: \n" +
|
35
|
+
" https proxy address and port in form ip:port. This is not currently implemented.\n" +
|
36
|
+
" User agent:\n" +
|
37
|
+
" node-fetch user agent.\n" +
|
38
|
+
" Downloads folder:\n" +
|
39
|
+
" Folder to place downloaded episodes.\n" +
|
40
|
+
" MPV socket connection file:\n" +
|
41
|
+
" File for mpv socket, used to control mpv instance with outside tools.\n" +
|
42
|
+
" VLC socket:\n" +
|
43
|
+
" VLC http control socket\n" +
|
44
|
+
" VLC pass:\n" +
|
45
|
+
" VLC http control password\n" +
|
46
|
+
" W2G api token:\n" +
|
47
|
+
" Your user access token for w2g.tv. Can be found at https://w2g.tv/en/account/edit_user under Tools/API\n"));
|
48
|
+
await help();
|
49
|
+
return;
|
50
|
+
}),
|
51
|
+
(async () => {
|
52
|
+
return;
|
53
|
+
})
|
54
|
+
];
|
55
|
+
async function help() {
|
56
|
+
console.log(chalk.cyan("Help page select: \n"));
|
57
|
+
return helps[await (0, input_1.selection)(["Playing", "Downloading", "Options", "Quit"], ["p", "d", "o", "q"])]();
|
58
|
+
}
|
59
|
+
exports.help = help;
|
package/bin/index.js
CHANGED
@@ -11,10 +11,11 @@ const chalk = require("chalk");
|
|
11
11
|
// Internal
|
12
12
|
const Anime_1 = require("./Anime");
|
13
13
|
const search_anime_1 = require("./search_anime");
|
14
|
-
const load_config_1 = require("./load_config");
|
14
|
+
const load_config_1 = require("./file_managment/load_config");
|
15
15
|
const input_1 = require("./input");
|
16
|
-
const change_config_1 = require("./change_config");
|
16
|
+
const change_config_1 = require("./file_managment/change_config");
|
17
17
|
const download_1 = require("./download");
|
18
|
+
const help_1 = require("./help");
|
18
19
|
const app_data_folder = (0, appdata_path_1.default)();
|
19
20
|
const cache_folder = app_data_folder + "/ani-cli-npm";
|
20
21
|
(0, load_config_1.make_config_dir)(cache_folder, true);
|
@@ -30,8 +31,9 @@ async function main() {
|
|
30
31
|
"Continue",
|
31
32
|
"Download",
|
32
33
|
"Option",
|
34
|
+
"Help",
|
33
35
|
"Quit",
|
34
|
-
], ["s", "c", "d", "o", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
|
36
|
+
], ["s", "c", "d", "o", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
|
35
37
|
switch (choice) {
|
36
38
|
case 0: // Search
|
37
39
|
let temp_ = await (0, search_anime_1.search)();
|
@@ -44,7 +46,7 @@ async function main() {
|
|
44
46
|
await anime.init(anime_id, cache_folder);
|
45
47
|
let episode_number;
|
46
48
|
if (anime.episode_list.length == 1) {
|
47
|
-
episode_number =
|
49
|
+
episode_number = 1;
|
48
50
|
}
|
49
51
|
else {
|
50
52
|
console.log(`Select episode [1-${anime.episode_list.length}] ${(anime.most_recent != 0) ? `Or C to continue from ep${anime.most_recent + 1}` : ""}`);
|
@@ -105,7 +107,10 @@ async function main() {
|
|
105
107
|
}
|
106
108
|
await main();
|
107
109
|
break;
|
108
|
-
case 4:
|
110
|
+
case 4:
|
111
|
+
await (0, help_1.help)();
|
112
|
+
break;
|
113
|
+
case 5: // Quit
|
109
114
|
console.log("Exit");
|
110
115
|
}
|
111
116
|
return 0;
|
package/bin/load_config.js
CHANGED
@@ -96,6 +96,9 @@ function load_config(cache_dir) {
|
|
96
96
|
// @ts-ignore
|
97
97
|
if (tmp.vlc_pass !== undefined)
|
98
98
|
config.vlc_pass = tmp.vlc_pass;
|
99
|
+
// @ts-ignore
|
100
|
+
if (tmp.w2g_api_key !== undefined)
|
101
|
+
config.w2g_api_key = tmp.w2g_api_key;
|
99
102
|
}
|
100
103
|
write_config(cache_dir, config);
|
101
104
|
return config;
|
package/bin/search_anime.js
CHANGED
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.search = void 0;
|
7
|
-
const regex_1 = require("./regex");
|
8
|
-
const curl_1 = require("./curl");
|
7
|
+
const regex_1 = require("./core_utils/regex");
|
8
|
+
const curl_1 = require("./core_utils/curl");
|
9
9
|
const input_1 = require("./input");
|
10
10
|
const chalk_1 = __importDefault(require("chalk"));
|
11
11
|
async function search_anime(search) {
|
package/package.json
CHANGED
package/tem.js
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
const W2GClient = require("w2g-client")
|
2
|
-
|
3
|
-
let client = new W2GClient.W2GClient("sovw9okdu5kb9vr39yy9k34u25sftalqz5ntluxshn48ooza1x5ih3yzaay6ie097z")
|
4
|
-
|
5
|
-
async function main(){
|
6
|
-
await client.create()
|
7
|
-
console.log(client.getLink())
|
8
|
-
await client.update("https://wwwx12.gogocdn.stream/videos/hls/nHDWH61tDXm9bXm7-tFVIw/1670878227/107271/f23efce39606d64216a0023544f49bb4/ep.29.1662456614.m3u8")
|
9
|
-
|
10
|
-
}
|
11
|
-
|
12
|
-
main()
|
13
|
-
|