adds seeders retrieval from magnetlink
This commit is contained in:
@@ -1,13 +1,37 @@
|
|||||||
const torrentStream = require('torrent-stream');
|
const torrentStream = require('torrent-stream');
|
||||||
const needle = require('needle');
|
const needle = require('needle');
|
||||||
const parseTorrent = require('parse-torrent');
|
const parseTorrent = require('parse-torrent');
|
||||||
|
const async = require('async');
|
||||||
|
const decode = require('magnet-uri');
|
||||||
const { retrieveTorrentFiles } = require('./cache');
|
const { retrieveTorrentFiles } = require('./cache');
|
||||||
|
|
||||||
const MAX_PEER_CONNECTIONS = process.env.MAX_PEER_CONNECTIONS || 20;
|
const MAX_PEER_CONNECTIONS = process.env.MAX_PEER_CONNECTIONS || 20;
|
||||||
|
const SEEDS_CHECK_TIMEOUT = process.env.SEEDS_CHECK_TIMEOUT || 10 * 1000; // 10 secs
|
||||||
const EXTENSIONS = ["3g2", "3gp", "avi", "flv", "mkv", "mov", "mp2", "mp4", "mpe", "mpeg", "mpg", "mpv", "webm", "wmv"];
|
const EXTENSIONS = ["3g2", "3gp", "avi", "flv", "mkv", "mov", "mp2", "mp4", "mpe", "mpeg", "mpg", "mpv", "webm", "wmv"];
|
||||||
|
|
||||||
module.exports.updateCurrentSeeders = function (torrent) {
|
module.exports.updateCurrentSeeders = function (torrent) {
|
||||||
return Promise.resolve({ ...torrent, seeders: torrent.seeders || 0 });
|
return new Promise((resolve) => {
|
||||||
|
if (!torrent.magnetLink) {
|
||||||
|
return resolve(0);
|
||||||
|
}
|
||||||
|
const Tracker = require("peer-search/tracker");
|
||||||
|
|
||||||
|
const seeders = {};
|
||||||
|
const decodedMagnetLink = decode(torrent.magnetLink);
|
||||||
|
const trackers = decodedMagnetLink && decodedMagnetLink.tr;
|
||||||
|
const callback = () => resolve(Math.max(...Object.values(seeders).map(values => values[0]).concat(0)));
|
||||||
|
setTimeout(callback, SEEDS_CHECK_TIMEOUT);
|
||||||
|
|
||||||
|
async.each(trackers, function (tracker, ready) {
|
||||||
|
const t = new Tracker(tracker, {}, torrent.infoHash);
|
||||||
|
console.error = () => 0; // do nothing
|
||||||
|
t.run();
|
||||||
|
t.on("info", function (inf) {
|
||||||
|
seeders[tracker] = [inf.seeders, inf.leechers];
|
||||||
|
ready();
|
||||||
|
});
|
||||||
|
}, callback);
|
||||||
|
}).then((seeders) => ({ ...torrent, seeders: torrent.seeders || seeders }));
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.torrentFiles = function (torrent) {
|
module.exports.torrentFiles = function (torrent) {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"parse-torrent": "^6.1.2",
|
"parse-torrent": "^6.1.2",
|
||||||
"parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#master",
|
"parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#master",
|
||||||
"peer-search": "^0.6.x",
|
"peer-search": "^0.6.x",
|
||||||
|
"async": "0.9.2",
|
||||||
"pg": "^7.8.2",
|
"pg": "^7.8.2",
|
||||||
"pg-hstore": "^2.3.2",
|
"pg-hstore": "^2.3.2",
|
||||||
"sequelize": "^4.43.0",
|
"sequelize": "^4.43.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user