]>
Commit | Line | Data |
---|---|---|
1 | import { readFile } from 'fs-extra' | |
2 | import parseTorrent from 'parse-torrent' | |
3 | import { basename, join } from 'path' | |
4 | import * as WebTorrent from 'webtorrent' | |
5 | import { VideoFile } from '@shared/models' | |
6 | import { PeerTubeServer } from '../server' | |
7 | ||
8 | let webtorrent: WebTorrent.Instance | |
9 | ||
10 | function webtorrentAdd (torrentId: string, refreshWebTorrent = false) { | |
11 | const WebTorrent = require('webtorrent') | |
12 | ||
13 | if (webtorrent && refreshWebTorrent) webtorrent.destroy() | |
14 | if (!webtorrent || refreshWebTorrent) webtorrent = new WebTorrent() | |
15 | ||
16 | webtorrent.on('error', err => console.error('Error in webtorrent', err)) | |
17 | ||
18 | return new Promise<WebTorrent.Torrent>(res => { | |
19 | const torrent = webtorrent.add(torrentId, res) | |
20 | ||
21 | torrent.on('error', err => console.error('Error in webtorrent torrent', err)) | |
22 | torrent.on('warning', warn => { | |
23 | const msg = typeof warn === 'string' | |
24 | ? warn | |
25 | : warn.message | |
26 | ||
27 | if (msg.includes('Unsupported')) return | |
28 | ||
29 | console.error('Warning in webtorrent torrent', warn) | |
30 | }) | |
31 | }) | |
32 | } | |
33 | ||
34 | async function parseTorrentVideo (server: PeerTubeServer, file: VideoFile) { | |
35 | const torrentName = basename(file.torrentUrl) | |
36 | const torrentPath = server.servers.buildDirectory(join('torrents', torrentName)) | |
37 | ||
38 | const data = await readFile(torrentPath) | |
39 | ||
40 | return parseTorrent(data) | |
41 | } | |
42 | ||
43 | export { | |
44 | webtorrentAdd, | |
45 | parseTorrentVideo | |
46 | } |