-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfetchMedia.ts
45 lines (40 loc) · 1.15 KB
/
fetchMedia.ts
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
import { join } from "path/posix";
import { downloadMediaFile } from "./fetch-audio/fetch-media-file-from-url";
import { throttleLogger, SECOND } from "./util/throttleLogger";
export async function fetchMedia(
link: string,
number: number,
mediaFolder: string,
hint: string = ""
) {
const m = link.match(/\.(png|jpg|jpeg|gif|webp|mp3|mp4)/);
let suffix = m ? m[0] : ".png";
const mediaType = suffix === ".mp3" ? "audio" : "img";
const fileName = `${mediaType}-${number}${suffix}`;
const targetFilePath = join(mediaFolder, fileName);
console.log(hint);
let lastPercent = 0;
const progressLogger = throttleLogger({
timeout: 5 * SECOND,
});
await downloadMediaFile(link, targetFilePath, {
onLoadMetadata: (meta) => {
console.log(
`Start downloading: ${targetFilePath}
-> (${meta.fileType} of size ${meta.fileSize})
-> from ${meta.url}`
);
},
onProgress: (params) => {
progressLogger(
`Downloading ${fileName}:`,
+params.progress.toFixed(2),
"%"
);
},
onDone: () => {
console.log(`Download ${fileName} is finished.`);
},
});
return targetFilePath;
}