-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
77 lines (66 loc) · 1.7 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const fs = require("fs");
const ytdl = require("ytdl-core");
const sanitize = require("sanitize-filename");
const l10n = require("l10n");
const input = require("input");
const ui = require("ui");
const quicklook = require("quicklook");
const clipboard = require("clipboard");
const detector = require("detector");
function download(url) {
ui.toast(url);
let progress = 0;
let filename = null;
const options = {
filter: format => {
return format.container == "mp4";
}
}
const onInfo = info => {
const title = info.player_response.videoDetails.title;
console.log(title);
filename = `${sanitize(title)}.mp4`;
}
const onProgress = (chunk, downloaded, total) => {
const ratio = downloaded / total;
const percent = Math.floor(ratio * 100);
if (percent != progress) {
ui.showProgress(ratio, l10n("DOWNLOADING"));
console.log(`${l10n("DOWNLOADED")}${percent}%`);
}
progress = percent;
}
const onFinish = () => {
ui.hideProgress();
console.log(l10n("FINISHED_DOWNLOADING"));
fs.renameSync("tmp.mp4", filename);
quicklook.file(filename);
}
ytdl(url, options)
.on("info", onInfo)
.on("progress", onProgress)
.on("finish", onFinish)
.pipe(fs.createWriteStream("tmp.mp4"));
};
async function prompt() {
const text = await input.text({
placeholder: l10n("ENTER_URL"),
text: detector.link(clipboard.text())
});
if (text == undefined) {
return;
}
const link = detector.link(text);
if (link) {
download(link);
} else {
console.error(l10n("CANNOT_FIND_URL"));
setTimeout(prompt, 500);
}
}
const link = detector.link($context.text || $context.link);
if (link) {
download(link);
} else {
prompt();
}