ani-cli-npm 2.1.2 → 2.1.3
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/Anime.js +149 -78
- package/bin/core_utils/interfaces.js +2 -0
- package/bin/file_managment/cache.js +16 -8
- package/bin/file_managment/change_config.js +22 -0
- package/bin/index.js +46 -6
- package/package.json +1 -1
package/bin/Anime.js
CHANGED
@@ -24,8 +24,14 @@ class Anime {
|
|
24
24
|
id = "";
|
25
25
|
episode_list = [];
|
26
26
|
most_recent = 0;
|
27
|
-
player =
|
27
|
+
player = new class {
|
28
|
+
play(episode_link) {
|
29
|
+
return {};
|
30
|
+
}
|
31
|
+
player;
|
32
|
+
};
|
28
33
|
current_pos = 0;
|
34
|
+
current_episode = 0;
|
29
35
|
async init(anime_id, cache_folder) {
|
30
36
|
/*
|
31
37
|
Initiate Anime object
|
@@ -100,7 +106,7 @@ class Anime {
|
|
100
106
|
let json = JSON.parse(lines);
|
101
107
|
for (const value of Object.entries(json)) {
|
102
108
|
if (typeof value[1] == "string") {
|
103
|
-
this.episode_list.push(value[1]);
|
109
|
+
this.episode_list.push(value[1].replace("//gogohd.net/streaming.php?id=", ""));
|
104
110
|
}
|
105
111
|
}
|
106
112
|
}
|
@@ -109,7 +115,7 @@ class Anime {
|
|
109
115
|
# Starts play cascade.
|
110
116
|
|
111
117
|
## Takes in:
|
112
|
-
### Episode number,
|
118
|
+
### Episode number, counting from 0
|
113
119
|
### Config object
|
114
120
|
### Config save directory
|
115
121
|
|
@@ -120,115 +126,174 @@ class Anime {
|
|
120
126
|
- If set to Link, it will simply print the media stream link to console, primarily for debuting peruses.
|
121
127
|
*/
|
122
128
|
console.clear();
|
123
|
-
console.log(`Playing ${this.id} episode ${episode + 1} from ${new Date(this.current_pos * 1000).toISOString().slice(11, 19)}`)
|
129
|
+
console.log(`Playing ${this.id} episode ${episode + 1}`); // from ${new Date(this.current_pos * 1000).toISOString().slice(11, 19)}`)
|
130
|
+
if (this.current_pos != 0) {
|
131
|
+
console.log(`Most recent position: ${new Date(this.current_pos * 1000).toISOString().slice(11, 19)}`);
|
132
|
+
}
|
124
133
|
switch (config.player) {
|
125
134
|
case "MPV":
|
126
135
|
console.log(("Opening MPV.."));
|
127
|
-
this.player = await new PlayerController({
|
136
|
+
this.player.player = await new PlayerController({
|
128
137
|
app: 'mpv',
|
129
|
-
args: ['--fullscreen', '--keep-open=yes'
|
138
|
+
args: ['--fullscreen', '--keep-open=yes'],
|
130
139
|
media: await this.get_episode_link(episode, config.player),
|
131
140
|
ipcPath: config.mpv_socket_path
|
132
141
|
});
|
142
|
+
this.player.play = (async (episode_link) => {
|
143
|
+
this.player.player.load(episode_link);
|
144
|
+
});
|
145
|
+
this.player.player.on('playback', (data) => {
|
146
|
+
if (data.name == "time-pos" && data.value >= 0) {
|
147
|
+
this.current_pos = data.value;
|
148
|
+
}
|
149
|
+
//console.log(data)
|
150
|
+
});
|
151
|
+
this.player.player.on('app-exit', (code) => {
|
152
|
+
config.most_recent.anime_id = this.id;
|
153
|
+
config.most_recent.episode_number = episode;
|
154
|
+
config.most_recent.episode_second = this.current_pos;
|
155
|
+
(0, load_config_1.write_config)(config_dir, config);
|
156
|
+
this.most_recent = episode;
|
157
|
+
(0, cache_1.new_cache)(config_dir, {
|
158
|
+
id: this.id,
|
159
|
+
episode_list: this.episode_list,
|
160
|
+
most_recent: this.most_recent,
|
161
|
+
position: this.current_pos
|
162
|
+
});
|
163
|
+
});
|
133
164
|
// @ts-ignore
|
134
|
-
await this.player.launch(err => {
|
165
|
+
await this.player.player.launch(err => {
|
135
166
|
if (err)
|
136
167
|
return console.error(err.message);
|
137
168
|
});
|
138
169
|
break;
|
139
170
|
case "VLC":
|
140
171
|
console.log(("Opening VLC.."));
|
141
|
-
this.player = await new PlayerController({
|
172
|
+
this.player.player = await new PlayerController({
|
142
173
|
app: 'vlc',
|
143
|
-
args: ['--fullscreen'
|
174
|
+
args: ['--fullscreen'],
|
144
175
|
media: await this.get_episode_link(episode, config.player),
|
145
|
-
//httpPort: (config.vlc_socket !== 0)? config.vlc_socket : null,
|
176
|
+
//httpPort: (config.vlc_socket !== 0)? config.vlc_socket : null,
|
146
177
|
//httpPass: (config.vlc_pass !== "")? config.vlc_socket : null,
|
147
178
|
});
|
148
179
|
// @ts-ignore
|
149
|
-
await this.player.launch(err => {
|
180
|
+
await this.player.player.launch(err => {
|
150
181
|
if (err)
|
151
182
|
return console.error(err.message);
|
152
183
|
});
|
184
|
+
this.player.play = (async (episode_link) => {
|
185
|
+
this.player.player.quit();
|
186
|
+
this.player.player = await new PlayerController({
|
187
|
+
app: 'vlc',
|
188
|
+
args: ['--fullscreen'],
|
189
|
+
media: episode_link
|
190
|
+
//httpPort: (config.vlc_socket !== 0)? config.vlc_socket : null,
|
191
|
+
//httpPass: (config.vlc_pass !== "")? config.vlc_socket : null,
|
192
|
+
});
|
193
|
+
this.player.player.on('playback', (data) => {
|
194
|
+
if (data.name == "time-pos" && data.value >= 0) {
|
195
|
+
this.current_pos = data.value;
|
196
|
+
}
|
197
|
+
//console.log(data)
|
198
|
+
});
|
199
|
+
this.player.player.on('app-exit', (code) => {
|
200
|
+
config.most_recent.anime_id = this.id;
|
201
|
+
config.most_recent.episode_number = episode;
|
202
|
+
config.most_recent.episode_second = this.current_pos;
|
203
|
+
(0, load_config_1.write_config)(config_dir, config);
|
204
|
+
this.most_recent = episode;
|
205
|
+
(0, cache_1.new_cache)(config_dir, {
|
206
|
+
id: this.id,
|
207
|
+
episode_list: this.episode_list,
|
208
|
+
most_recent: this.most_recent,
|
209
|
+
position: this.current_pos
|
210
|
+
});
|
211
|
+
});
|
212
|
+
// @ts-ignore
|
213
|
+
await this.player.player.launch(err => {
|
214
|
+
if (err)
|
215
|
+
return console.error(err.message);
|
216
|
+
});
|
217
|
+
});
|
153
218
|
break;
|
154
219
|
case "BROWSER":
|
220
|
+
this.player.play = (async (episode_link) => {
|
221
|
+
console.log(("Opening browser..."));
|
222
|
+
await open(episode_link);
|
223
|
+
});
|
155
224
|
console.log(("Opening browser..."));
|
156
225
|
await open(await this.get_episode_link(episode, config.player));
|
157
226
|
break;
|
158
227
|
case "W2G":
|
159
228
|
try {
|
160
|
-
this.player = new W2GClient.W2GClient(config.w2g_api_key);
|
161
|
-
await this.player.create(await this.get_episode_link(episode, config.player));
|
162
|
-
console.log(chalk.green("Room link: " + await this.player.getLink()));
|
229
|
+
this.player.player = new W2GClient.W2GClient(config.w2g_api_key);
|
230
|
+
await this.player.player.create(await this.get_episode_link(episode, config.player));
|
231
|
+
console.log(chalk.green("Room link: " + await this.player.player.getLink()));
|
163
232
|
}
|
164
233
|
catch {
|
165
234
|
console.log(chalk.red("Failed to create w2g.tv room. \nthis can often be because your API token is invalid. You can change it in options."));
|
166
235
|
process.exit();
|
167
236
|
}
|
168
|
-
|
237
|
+
this.player.play = (async (episode_link) => {
|
238
|
+
console.log(("Updating W2G room..."));
|
239
|
+
console.log(chalk.green("Room link: " + await this.player.player.getLink()));
|
240
|
+
try {
|
241
|
+
await this.player.player.update(episode_link);
|
242
|
+
}
|
243
|
+
catch {
|
244
|
+
console.log(chalk.red("Error updating W2G room. Very sorry, w2g functionality is a bit broken at present. Worst case you should be able to just restart with a new room for each episode."));
|
245
|
+
}
|
246
|
+
});
|
247
|
+
console.log("Opening W2G.tv...");
|
248
|
+
await open(await this.player.player.getLink());
|
169
249
|
break;
|
170
250
|
case "LINK":
|
171
|
-
this.player =
|
172
|
-
|
173
|
-
break;
|
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
|
251
|
+
this.player.play = (async (episode_link) => {
|
252
|
+
console.log(chalk.green(episode_link));
|
192
253
|
});
|
193
|
-
|
254
|
+
this.player.play(await this.get_episode_link(episode));
|
255
|
+
break;
|
194
256
|
}
|
195
|
-
await this.
|
257
|
+
await this.play_controller(episode, config, config_dir, true);
|
196
258
|
}
|
197
|
-
async
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
}
|
259
|
+
async next(player) {
|
260
|
+
this.current_episode += 1;
|
261
|
+
this.current_pos = 0;
|
262
|
+
this.player.play(await this.get_episode_link(this.current_episode, player));
|
263
|
+
}
|
264
|
+
async previous(player) {
|
265
|
+
this.current_episode -= 1;
|
266
|
+
this.current_pos = 0;
|
267
|
+
this.player.play(await this.get_episode_link(this.current_episode, player));
|
268
|
+
}
|
269
|
+
async play_controller(episode, config, config_dir, first = false) {
|
270
|
+
console.log(`Playing ${this.id} episode ${episode + 1}`); // from ${new Date(this.current_pos * 1000).toISOString().slice(11, 19)}`)
|
271
|
+
// if (!first){
|
272
|
+
// console.clear()
|
273
|
+
// console.log(chalk.blue(`Playing ${this.id} episode ${episode+1}`))
|
274
|
+
// if (this.player == 0){
|
275
|
+
// await open(await this.get_episode_link(episode, "BROWSER"))
|
276
|
+
// }else if(this.player == 1){
|
277
|
+
// console.log(await this.get_episode_link(episode))
|
278
|
+
// } else if (this.player.roomID != undefined){
|
279
|
+
// console.log(chalk.green("Room link: "+ await this.player.getLink()));
|
280
|
+
// this.player.update(await this.get_episode_link(episode))
|
281
|
+
// } else if (this.player.opts.app == "mpv"){
|
282
|
+
// await this.player.load(await this.get_episode_link(episode))
|
283
|
+
// }else{
|
284
|
+
// this.player.quit()
|
285
|
+
// this.player = await new PlayerController({
|
286
|
+
// app: 'vlc',
|
287
|
+
// args: ['--fullscreen'],
|
288
|
+
// media: await this.get_episode_link(episode, config.player)
|
289
|
+
// });
|
290
|
+
// // @ts-ignore
|
291
|
+
// await this.player.launch(err => {
|
292
|
+
// if (err) return console.error(err.message);
|
293
|
+
// });
|
294
|
+
// }
|
295
|
+
// }
|
296
|
+
this.current_episode = episode;
|
232
297
|
config.most_recent.anime_id = this.id;
|
233
298
|
config.most_recent.episode_number = episode;
|
234
299
|
config.most_recent.episode_second = this.current_pos;
|
@@ -252,25 +317,31 @@ class Anime {
|
|
252
317
|
switch (selected) {
|
253
318
|
case 0:
|
254
319
|
if (episode >= this.episode_list.length - 1) {
|
255
|
-
await this.
|
320
|
+
await this.next(config.player);
|
321
|
+
await this.play_controller(episode - 1, config, config_dir);
|
256
322
|
}
|
257
323
|
else {
|
258
|
-
await this.
|
324
|
+
await this.next(config.player);
|
325
|
+
await this.play_controller(episode + 1, config, config_dir);
|
259
326
|
}
|
260
327
|
break;
|
261
328
|
case 1:
|
262
329
|
if ((episode >= this.episode_list.length - 1) || (episode <= 0)) {
|
263
330
|
break;
|
264
331
|
}
|
265
|
-
await this.
|
332
|
+
await this.previous(config.player);
|
333
|
+
await this.play_controller(episode - 1, config, config_dir);
|
266
334
|
break;
|
267
335
|
case 2:
|
268
336
|
if (this.episode_list.length == 1) {
|
269
|
-
await this.
|
337
|
+
this.player.play(await this.get_episode_link(0, config.player));
|
338
|
+
await this.play_controller(0, config, config_dir);
|
270
339
|
}
|
271
340
|
else {
|
272
341
|
console.log(`Select episode [1-${this.episode_list.length}]`);
|
273
|
-
|
342
|
+
let episode = await (0, input_1.number_input)(this.episode_list.length, 1) - 1;
|
343
|
+
this.player.play(await this.get_episode_link(episode, config.player));
|
344
|
+
await this.play_controller(episode, config, config_dir);
|
274
345
|
}
|
275
346
|
break;
|
276
347
|
case 3:
|
@@ -22,21 +22,29 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
22
|
__setModuleDefault(result, mod);
|
23
23
|
return result;
|
24
24
|
};
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
+
};
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
29
|
exports.search_cache = exports.new_cache = exports.clear_cache = void 0;
|
27
30
|
const fs = __importStar(require("fs"));
|
28
|
-
|
31
|
+
const chalk_1 = __importDefault(require("chalk"));
|
32
|
+
async function clear_cache(location) {
|
29
33
|
try {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
await fs.readdir(location, (err, files) => {
|
35
|
+
if (err)
|
36
|
+
throw err;
|
37
|
+
for (const file of files) {
|
38
|
+
if (file.includes(".cache")) {
|
39
|
+
fs.unlinkSync(location + "/" + file);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
});
|
34
43
|
}
|
35
44
|
catch {
|
36
|
-
|
37
|
-
console.log("Failed to clear cache.");
|
38
|
-
}
|
45
|
+
console.log(chalk_1.default.red("Error clearing cache."));
|
39
46
|
}
|
47
|
+
return 0;
|
40
48
|
}
|
41
49
|
exports.clear_cache = clear_cache;
|
42
50
|
function new_cache(location, anime) {
|
@@ -63,6 +63,27 @@ const configs = [
|
|
63
63
|
// @ts-ignore
|
64
64
|
return temp, 0;
|
65
65
|
}),
|
66
|
+
(async (temp) => {
|
67
|
+
let config = {
|
68
|
+
player: "BROWSER",
|
69
|
+
proxy: "",
|
70
|
+
user_agent: "Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/100.0",
|
71
|
+
most_recent: {
|
72
|
+
episode_number: 0,
|
73
|
+
episode_second: 0,
|
74
|
+
anime_id: ""
|
75
|
+
},
|
76
|
+
download_folder: ".",
|
77
|
+
debug_mode: false,
|
78
|
+
mpv_socket_path: "",
|
79
|
+
vlc_socket: 0,
|
80
|
+
vlc_pass: "",
|
81
|
+
w2g_api_key: ""
|
82
|
+
};
|
83
|
+
console.log(config);
|
84
|
+
// @ts-ignore
|
85
|
+
return config, 0;
|
86
|
+
}),
|
66
87
|
(async (temp) => {
|
67
88
|
// @ts-ignore
|
68
89
|
return temp, 1;
|
@@ -92,6 +113,7 @@ async function config_(temp) {
|
|
92
113
|
"VLC socket; " + temp.vlc_socket,
|
93
114
|
"VLC pass; " + temp.vlc_pass,
|
94
115
|
"W2G api token: " + temp.w2g_api_key,
|
116
|
+
"Reset to defaults",
|
95
117
|
"Save and exit",
|
96
118
|
"Exit without saving"
|
97
119
|
], [], ((item) => { return chalk.cyan(item); }), ((item) => { return chalk.cyan(item); }))](temp);
|
package/bin/index.js
CHANGED
@@ -1,10 +1,34 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
"use strict";
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
4
|
+
if (k2 === undefined) k2 = k;
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
8
|
+
}
|
9
|
+
Object.defineProperty(o, k2, desc);
|
10
|
+
}) : (function(o, m, k, k2) {
|
11
|
+
if (k2 === undefined) k2 = k;
|
12
|
+
o[k2] = m[k];
|
13
|
+
}));
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
16
|
+
}) : function(o, v) {
|
17
|
+
o["default"] = v;
|
18
|
+
});
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
20
|
+
if (mod && mod.__esModule) return mod;
|
21
|
+
var result = {};
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
23
|
+
__setModuleDefault(result, mod);
|
24
|
+
return result;
|
25
|
+
};
|
3
26
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
4
27
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
5
28
|
};
|
6
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
-
process
|
30
|
+
const process = __importStar(require("process"));
|
31
|
+
//process.removeAllListeners() // Ignore warning
|
8
32
|
// External
|
9
33
|
const appdata_path_1 = __importDefault(require("appdata-path"));
|
10
34
|
const chalk = require("chalk");
|
@@ -14,6 +38,7 @@ const search_anime_1 = require("./search_anime");
|
|
14
38
|
const load_config_1 = require("./file_managment/load_config");
|
15
39
|
const input_1 = require("./input");
|
16
40
|
const change_config_1 = require("./file_managment/change_config");
|
41
|
+
const cache_1 = require("./file_managment/cache");
|
17
42
|
const download_1 = require("./download");
|
18
43
|
const help_1 = require("./help");
|
19
44
|
const app_data_folder = (0, appdata_path_1.default)();
|
@@ -31,9 +56,10 @@ async function main() {
|
|
31
56
|
"Continue",
|
32
57
|
"Download",
|
33
58
|
"Option",
|
59
|
+
"Clear cache",
|
34
60
|
"Help",
|
35
61
|
"Quit",
|
36
|
-
], ["s", "c", "d", "o", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
|
62
|
+
], ["s", "c", "d", "o", " ", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
|
37
63
|
switch (choice) {
|
38
64
|
case 0: // Search
|
39
65
|
let temp_ = await (0, search_anime_1.search)();
|
@@ -54,7 +80,7 @@ async function main() {
|
|
54
80
|
}
|
55
81
|
await anime.play_head(episode_number - 1, config, cache_folder);
|
56
82
|
if (anime.player.hasOwnProperty("quit")) {
|
57
|
-
await anime.player.quit();
|
83
|
+
await anime.player.player.quit();
|
58
84
|
}
|
59
85
|
await main();
|
60
86
|
break;
|
@@ -68,9 +94,10 @@ async function main() {
|
|
68
94
|
let continue_anime = new Anime_1.Anime();
|
69
95
|
await continue_anime.init(config.most_recent.anime_id, cache_folder);
|
70
96
|
await continue_anime.play_head(config.most_recent.episode_number, config, cache_folder);
|
71
|
-
|
72
|
-
await continue_anime.player.quit();
|
97
|
+
try {
|
98
|
+
await continue_anime.player.player.quit();
|
73
99
|
}
|
100
|
+
catch { }
|
74
101
|
await main();
|
75
102
|
break;
|
76
103
|
case 2: // Download
|
@@ -108,9 +135,22 @@ async function main() {
|
|
108
135
|
await main();
|
109
136
|
break;
|
110
137
|
case 4:
|
138
|
+
console.clear();
|
139
|
+
console.log(chalk.yellow("Warning, this will also clear your current position in each anime, are you sure you want to do this?"));
|
140
|
+
if (await (0, input_1.selection)(["yes", "no"], ["y", "n"]) == 0) {
|
141
|
+
await (0, cache_1.clear_cache)(cache_folder);
|
142
|
+
console.clear();
|
143
|
+
console.log(chalk.grey("Cache cleared"));
|
144
|
+
}
|
145
|
+
else {
|
146
|
+
console.clear();
|
147
|
+
}
|
148
|
+
await main();
|
149
|
+
break;
|
150
|
+
case 5:
|
111
151
|
await (0, help_1.help)();
|
112
152
|
break;
|
113
|
-
case
|
153
|
+
case 6: // Quit
|
114
154
|
console.log("Exit");
|
115
155
|
}
|
116
156
|
return 0;
|