From 5f81cded75357acb1007f9725a271b24cf961d5f Mon Sep 17 00:00:00 2001 From: TheBeastLT Date: Sun, 5 Apr 2020 21:42:44 +0200 Subject: [PATCH] [scraper] updates stream info mapping --- addon/addon.js | 6 +++- addon/lib/sort.js | 5 ++- addon/lib/streamInfo.js | 68 +++++++++++++++++----------------------- addon/moch/realdebrid.js | 2 +- 4 files changed, 37 insertions(+), 44 deletions(-) diff --git a/addon/addon.js b/addon/addon.js index 152be1d..2ddd6a5 100644 --- a/addon/addon.js +++ b/addon/addon.js @@ -81,7 +81,11 @@ function filterByProvider(streams, providers) { if (!providers || !providers.length) { return streams; } - return streams.filter(stream => providers.includes(stream.name.split('\n')[1].toLowerCase())) + return streams.filter(stream => { + const parts = stream.title.split('\n'); + const provider = parts[parts.length - 2].match(/\w+$/)[0]; + return providers.includes(provider.toLowerCase()); + }) } module.exports = builder.getInterface(); diff --git a/addon/lib/sort.js b/addon/lib/sort.js index 74d2143..a87b970 100644 --- a/addon/lib/sort.js +++ b/addon/lib/sort.js @@ -33,7 +33,7 @@ function sortBySeeders(streams) { function sortByVideoQuality(streams, limit) { const qualityMap = sortBySeeders(streams) .reduce((map, stream) => { - const quality = extractQuality(stream.title); + const quality = extractQuality(stream.name); map[quality] = (map[quality] || []).concat(stream); return map; }, {}); @@ -56,8 +56,7 @@ function sortByVideoQuality(streams, limit) { } function extractQuality(title) { - const qualityMatch = title.match(/📺 (.*)/); - const qualityDesc = qualityMatch && qualityMatch[1]; + const qualityDesc = title.split('\n')[1]; const resolutionMatch = qualityDesc && qualityDesc.match(/\d+p/); if (resolutionMatch) { return resolutionMatch[0]; diff --git a/addon/lib/streamInfo.js b/addon/lib/streamInfo.js index f53ce4b..1b3c385 100644 --- a/addon/lib/streamInfo.js +++ b/addon/lib/streamInfo.js @@ -1,58 +1,40 @@ const titleParser = require('parse-torrent-title'); -const { Type } = require('./types'); const ADDON_NAME = 'Torrentio'; +const UNKNOWN_SIZE = 300000000; function toStreamInfo(record) { - if (record.torrent.type === Type.MOVIE) { - return movieStream(record); - } - return seriesStream(record); -} - -function movieStream(record) { - const titleInfo = titleParser.parse(record.title); - const sameInfo = record.title === record.torrent.title; - const title = joinDetailParts( - [ - joinDetailParts([!sameInfo && record.torrent.title.replace(/[, ]+/g, ' ') || undefined]), - joinDetailParts([titleInfo.title, titleInfo.year, titleInfo.language]), - joinDetailParts([titleInfo.resolution, titleInfo.source], '📺 '), - joinDetailParts([record.torrent.seeders], '👤 ') - ], - '', - '\n' - ); - - return { - name: `${ADDON_NAME}\n${record.torrent.provider}`, - title: title, - infoHash: record.infoHash, - fileIdx: record.fileIndex - }; -} - -function seriesStream(record) { - const tInfo = titleParser.parse(record.title); - const eInfo = titleParser.parse(record.torrent.title); - const sameInfo = record.title === record.torrent.title || - tInfo.season === eInfo.season && tInfo.episode && eInfo.episode === tInfo.episode; + const torrentInfo = titleParser.parse(record.torrent.title); + const fileInfo = titleParser.parse(record.title); + const sameInfo = !Number.isInteger(record.fileIndex) + || record.size !== UNKNOWN_SIZE && record.size === record.torrent.size; const title = joinDetailParts( [ joinDetailParts([record.torrent.title.replace(/[, ]+/g, ' ')]), joinDetailParts([!sameInfo && record.title.replace(/[, ]+/g, ' ') || undefined]), - joinDetailParts([ - tInfo.resolution || eInfo.resolution || record.torrent.resolution, - tInfo.source || eInfo.source - ], '📺 '), + joinDetailParts([formatSize(record.size), record.torrent.provider], '⚙️️ '), joinDetailParts([record.torrent.seeders], '👤 ') ], '', '\n' ); + const name = joinDetailParts( + [ + joinDetailParts([ADDON_NAME]), + joinDetailParts([ + fileInfo.resolution || + torrentInfo.resolution || + record.torrent.resolution || + fileInfo.source || + torrentInfo.source + ]) + ], + '', + '\n' + ); return { - name: `${ADDON_NAME}\n${record.torrent.provider}`, + name: name, title: title, infoHash: record.infoHash, fileIdx: record.fileIndex @@ -65,4 +47,12 @@ function joinDetailParts(parts, prefix = '', delimiter = ' ') { return filtered.length > 0 ? `${prefix}${filtered}` : undefined; } +function formatSize(size) { + if (size === UNKNOWN_SIZE) { + return undefined; + } + const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024)); + return Number((size / Math.pow(1024, i)).toFixed(2)) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; +} + module.exports = { toStreamInfo }; diff --git a/addon/moch/realdebrid.js b/addon/moch/realdebrid.js index 8296385..500bb2c 100644 --- a/addon/moch/realdebrid.js +++ b/addon/moch/realdebrid.js @@ -16,7 +16,7 @@ async function applyMoch(streams, apiKey) { const cachedEntry = available[stream.infoHash]; const cachedIds = getCachedFileIds(stream.fileIdx, cachedEntry).join(','); if (cachedIds.length) { - stream.name = `[RD Cached]\n${stream.name}`; + stream.name = `[RD+] ${stream.name}`; stream.url = `${RESOLVER_HOST}/realdebrid/${apiKey}/${stream.infoHash}/${cachedIds}/${stream.fileIdx}`; delete stream.infoHash; delete stream.fileIndex;