From 0e802c74d2f13853db1ff493f2e2b9f2e784c3b2 Mon Sep 17 00:00:00 2001 From: TheBeastLT Date: Thu, 26 Mar 2020 18:19:14 +0100 Subject: [PATCH] [scraper] check for if new episode when decomposing --- scraper/lib/metadata.js | 3 +- scraper/lib/torrentFiles.js | 41 +++++++++++++++---- .../scrapers/thepiratebay/thepiratebay_api.js | 2 +- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/scraper/lib/metadata.js b/scraper/lib/metadata.js index 42b60de..1916f0a 100644 --- a/scraper/lib/metadata.js +++ b/scraper/lib/metadata.js @@ -7,7 +7,7 @@ const { cacheWrapImdbId, cacheWrapKitsuId, cacheWrapMetadata } = require('./cach const { Type } = require('./types'); const CINEMETA_URL = 'https://v3-cinemeta.strem.io'; -const KITSU_URL = 'https://kitsu-anime.now.sh'; +const KITSU_URL = 'https://anime-kitsu.strem.fun'; const TIMEOUT = 20000; function getMetadata(id, type = Type.SERIES) { @@ -43,6 +43,7 @@ function _requestMetadata(url) { year: body.meta.year, country: body.meta.country, genres: body.meta.genres, + status: body.status, videos: (body.meta.videos || []) .map((video) => video.imdbSeason ? { diff --git a/scraper/lib/torrentFiles.js b/scraper/lib/torrentFiles.js index 54a1990..187590c 100644 --- a/scraper/lib/torrentFiles.js +++ b/scraper/lib/torrentFiles.js @@ -158,16 +158,11 @@ async function decomposeEpisodes(torrent, files, metadata = { episodeCount: [] } .reduce((a, b) => a.concat(b), []) .sort((a, b) => a - b); - if (sortedEpisodes.every(ep => ep > 100) - && sortedEpisodes.slice(1).some((ep, index) => ep - sortedEpisodes[index] > 10) - && sortedEpisodes.every(ep => metadata.episodeCount[div100(ep) - 1] >= mod100(ep)) - && files.every(file => !file.season || file.episodes.every(ep => div100(ep) === file.season))) { + if (isConcatSeasonAndEpisodeFiles(files, sortedEpisodes, metadata)) { decomposeConcatSeasonAndEpisodeFiles(torrent, files, metadata); - } else if (files.every(file => (!file.season || !metadata.episodeCount[file.season - 1]) && file.date)) { + } else if (isDateEpisodeFiles(files, metadata)) { decomposeDateEpisodeFiles(torrent, files, metadata); - } else if (files.filter(file => !file.isMovie && file.episodes).every(file => !file.season && file.episodes) || - files.filter(file => file.season && file.episodes && file.episodes - .every(ep => metadata.episodeCount[file.season - 1] < ep)).length > Math.ceil(files.length / 5)) { + } else if (isAbsoluteEpisodeFiles(files, metadata)) { decomposeAbsoluteEpisodeFiles(torrent, files, metadata); } // decomposeEpisodeTitleFiles(torrent, files, metadata); @@ -175,12 +170,40 @@ async function decomposeEpisodes(torrent, files, metadata = { episodeCount: [] } return files; } -function decomposeConcatSeasonAndEpisodeFiles(torrent, files, metadata) { +function isConcatSeasonAndEpisodeFiles(files, sortedEpisodes, metadata) { // decompose concat season and episode files (ex. 101=S01E01) in case: // 1. file has a season, but individual files are concatenated with that season (ex. path Season 5/511 - Prize // Fighters.avi) // 2. file does not have a season and the episode does not go out of range for the concat season // episode count + return sortedEpisodes.every(ep => ep > 100) + && sortedEpisodes.slice(1).some((ep, index) => ep - sortedEpisodes[index] > 10) + && sortedEpisodes.every(ep => metadata.episodeCount[div100(ep) - 1] >= mod100(ep)) + && files.every(file => !file.season || file.episodes.every(ep => div100(ep) === file.season)) +} + +function isDateEpisodeFiles(files, metadata) { + return files.every(file => (!file.season || !metadata.episodeCount[file.season - 1]) && file.date); +} + +function isAbsoluteEpisodeFiles(files, metadata) { + return (files.filter(file => !file.isMovie && file.episodes).every(file => !file.season && file.episodes) + || files.filter(file => file.season && file.episodes && file.episodes + .every(ep => metadata.episodeCount[file.season - 1] < ep)).length > Math.ceil(files.length / 5)) + // && !isNewEpisodesNotInMetadata(files, metadata); +} + +function isNewEpisodesNotInMetadata(files, metadata) { + // new episode might not yet been indexed by cinemeta. + // detect this if episode number is larger than the last episode or season is larger than the last one + return files.length === 1 + && /continuing|current/i.test(metadata.status) + && files.filter(file => !file.isMovie && file.episodes) + .every(file => file.season >= metadata.episodeCount.length + && file.episodes.every(ep => ep > metadata.episodeCount[file.season - 1])) +} + +function decomposeConcatSeasonAndEpisodeFiles(torrent, files, metadata) { files .filter(file => file.episodes && file.episodes.every(ep => ep > 100)) .filter(file => metadata.episodeCount[(file.season || div100(file.episodes[0])) - 1] < 100) diff --git a/scraper/scrapers/thepiratebay/thepiratebay_api.js b/scraper/scrapers/thepiratebay/thepiratebay_api.js index 39b5797..e331c14 100644 --- a/scraper/scrapers/thepiratebay/thepiratebay_api.js +++ b/scraper/scrapers/thepiratebay/thepiratebay_api.js @@ -6,7 +6,7 @@ const Promises = require('../../lib/promises'); const defaultProxies = [ // 'https://thepiratebay.org', - 'https://proxybay.pro', + // 'https://proxybay.pro', 'https://ukpiratebayproxy.com', 'https://thepiratebayproxy.info', 'https://mypiratebay.co',