mirror of
https://github.com/knightcrawler-stremio/knightcrawler.git
synced 2024-12-20 03:29:51 +00:00
[scraper] get torrent size for horriblesubs
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
const { Sequelize, fn, col } = require('sequelize');
|
||||
const { Sequelize, fn, col, literal } = require('sequelize');
|
||||
const Op = Sequelize.Op;
|
||||
|
||||
const DATABASE_URI = process.env.DATABASE_URI;
|
||||
@@ -115,8 +115,15 @@ function getTorrentsBasedOnTitle(titleQuery, type) {
|
||||
return Torrent.findAll({ where: { title: { [Op.regexp]: `${titleQuery}` }, type: type } });
|
||||
}
|
||||
|
||||
function getTorrentsWithoutId(provider) {
|
||||
return Torrent.findAll({ where: { provider: provider, torrentId: { [Op.is]: null } }, limit: 100 });
|
||||
function getTorrentsWithoutSize() {
|
||||
return Torrent.findAll({
|
||||
where: literal(
|
||||
'exists (select 1 from files where files."infoHash" = torrent."infoHash" and files.size = 300000000)'),
|
||||
order: [
|
||||
['seeders', 'DESC']
|
||||
],
|
||||
limit: 1000
|
||||
});
|
||||
}
|
||||
|
||||
function getTorrentsUpdatedBetween(provider, startDate, endDate) {
|
||||
@@ -185,6 +192,6 @@ module.exports = {
|
||||
getSkipTorrent,
|
||||
createSkipTorrent,
|
||||
createFailedImdbTorrent,
|
||||
getTorrentsWithoutId,
|
||||
getTorrentsWithoutSize,
|
||||
getTorrentsUpdatedBetween
|
||||
};
|
||||
@@ -34,6 +34,54 @@ module.exports.updateCurrentSeeders = function (torrent) {
|
||||
}).then((seeders) => ({ ...torrent, seeders: torrent.seeders || seeders }));
|
||||
};
|
||||
|
||||
module.exports.updateTorrentSize = function (torrent) {
|
||||
if (!torrent.infoHash && !torrent.magnetLink) {
|
||||
return Promise.reject(new Error("no infoHash or magnetLink"));
|
||||
}
|
||||
const magnetLink = torrent.magnetLink || decode.encode({ infoHash: torrent.infoHash });
|
||||
return new Promise((resolve, rejected) => {
|
||||
const engine = new torrentStream(magnetLink, { connections: MAX_PEER_CONNECTIONS });
|
||||
|
||||
engine.ready(() => {
|
||||
const size = engine.torrent.length;
|
||||
engine.destroy();
|
||||
resolve({ size });
|
||||
});
|
||||
setTimeout(() => {
|
||||
engine.destroy();
|
||||
rejected(new Error('No available connections for torrent!'));
|
||||
}, SEEDS_CHECK_TIMEOUT);
|
||||
}).then((size) => ({ ...torrent, size }));
|
||||
};
|
||||
|
||||
module.exports.sizeAndFiles = function (torrent) {
|
||||
if (!torrent.infoHash && !torrent.magnetLink) {
|
||||
return Promise.reject(new Error("no infoHash or magnetLink"));
|
||||
}
|
||||
// const magnet = decode.encode({ infoHash: torrent.infoHash, announce: torrent.trackers });
|
||||
return new Promise((resolve, rejected) => {
|
||||
const engine = new torrentStream(torrent.infoHash, { connections: MAX_PEER_CONNECTIONS });
|
||||
|
||||
engine.ready(() => {
|
||||
const files = engine.files
|
||||
.map((file, fileId) => ({
|
||||
fileIndex: fileId,
|
||||
name: file.name,
|
||||
path: file.path.replace(/^[^\/]+\//, ''),
|
||||
size: file.length
|
||||
}));
|
||||
const size = engine.torrent.length;
|
||||
|
||||
engine.destroy();
|
||||
resolve({ files, size });
|
||||
});
|
||||
setTimeout(() => {
|
||||
engine.destroy();
|
||||
rejected(new Error('No available connections for torrent!'));
|
||||
}, 20000);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.torrentFiles = function (torrent) {
|
||||
return getFilesFromObject(torrent)
|
||||
.catch(() => filesFromTorrentFile(torrent))
|
||||
|
||||
@@ -62,8 +62,9 @@ async function updateTorrentSeeders(torrent) {
|
||||
return repository.getTorrent(torrent)
|
||||
.catch(() => undefined)
|
||||
.then(stored => {
|
||||
if (stored && stored.seeders !== torrent.seeders) {
|
||||
if (stored) {
|
||||
stored.seeders = torrent.seeders;
|
||||
stored.changed('updatedAt', true);
|
||||
return stored.save()
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user