mirror of
https://github.com/knightcrawler-stremio/knightcrawler.git
synced 2024-12-20 03:29:51 +00:00
[scraper] check for if new episode when decomposing
This commit is contained in:
@@ -7,7 +7,7 @@ const { cacheWrapImdbId, cacheWrapKitsuId, cacheWrapMetadata } = require('./cach
|
|||||||
const { Type } = require('./types');
|
const { Type } = require('./types');
|
||||||
|
|
||||||
const CINEMETA_URL = 'https://v3-cinemeta.strem.io';
|
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;
|
const TIMEOUT = 20000;
|
||||||
|
|
||||||
function getMetadata(id, type = Type.SERIES) {
|
function getMetadata(id, type = Type.SERIES) {
|
||||||
@@ -43,6 +43,7 @@ function _requestMetadata(url) {
|
|||||||
year: body.meta.year,
|
year: body.meta.year,
|
||||||
country: body.meta.country,
|
country: body.meta.country,
|
||||||
genres: body.meta.genres,
|
genres: body.meta.genres,
|
||||||
|
status: body.status,
|
||||||
videos: (body.meta.videos || [])
|
videos: (body.meta.videos || [])
|
||||||
.map((video) => video.imdbSeason
|
.map((video) => video.imdbSeason
|
||||||
? {
|
? {
|
||||||
|
|||||||
@@ -158,16 +158,11 @@ async function decomposeEpisodes(torrent, files, metadata = { episodeCount: [] }
|
|||||||
.reduce((a, b) => a.concat(b), [])
|
.reduce((a, b) => a.concat(b), [])
|
||||||
.sort((a, b) => a - b);
|
.sort((a, b) => a - b);
|
||||||
|
|
||||||
if (sortedEpisodes.every(ep => ep > 100)
|
if (isConcatSeasonAndEpisodeFiles(files, sortedEpisodes, metadata)) {
|
||||||
&& 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))) {
|
|
||||||
decomposeConcatSeasonAndEpisodeFiles(torrent, files, 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);
|
decomposeDateEpisodeFiles(torrent, files, metadata);
|
||||||
} else if (files.filter(file => !file.isMovie && file.episodes).every(file => !file.season && file.episodes) ||
|
} else if (isAbsoluteEpisodeFiles(files, metadata)) {
|
||||||
files.filter(file => file.season && file.episodes && file.episodes
|
|
||||||
.every(ep => metadata.episodeCount[file.season - 1] < ep)).length > Math.ceil(files.length / 5)) {
|
|
||||||
decomposeAbsoluteEpisodeFiles(torrent, files, metadata);
|
decomposeAbsoluteEpisodeFiles(torrent, files, metadata);
|
||||||
}
|
}
|
||||||
// decomposeEpisodeTitleFiles(torrent, files, metadata);
|
// decomposeEpisodeTitleFiles(torrent, files, metadata);
|
||||||
@@ -175,12 +170,40 @@ async function decomposeEpisodes(torrent, files, metadata = { episodeCount: [] }
|
|||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
function decomposeConcatSeasonAndEpisodeFiles(torrent, files, metadata) {
|
function isConcatSeasonAndEpisodeFiles(files, sortedEpisodes, metadata) {
|
||||||
// decompose concat season and episode files (ex. 101=S01E01) in case:
|
// 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
|
// 1. file has a season, but individual files are concatenated with that season (ex. path Season 5/511 - Prize
|
||||||
// Fighters.avi)
|
// Fighters.avi)
|
||||||
// 2. file does not have a season and the episode does not go out of range for the concat season
|
// 2. file does not have a season and the episode does not go out of range for the concat season
|
||||||
// episode count
|
// 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
|
files
|
||||||
.filter(file => file.episodes && file.episodes.every(ep => ep > 100))
|
.filter(file => file.episodes && file.episodes.every(ep => ep > 100))
|
||||||
.filter(file => metadata.episodeCount[(file.season || div100(file.episodes[0])) - 1] < 100)
|
.filter(file => metadata.episodeCount[(file.season || div100(file.episodes[0])) - 1] < 100)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const Promises = require('../../lib/promises');
|
|||||||
|
|
||||||
const defaultProxies = [
|
const defaultProxies = [
|
||||||
// 'https://thepiratebay.org',
|
// 'https://thepiratebay.org',
|
||||||
'https://proxybay.pro',
|
// 'https://proxybay.pro',
|
||||||
'https://ukpiratebayproxy.com',
|
'https://ukpiratebayproxy.com',
|
||||||
'https://thepiratebayproxy.info',
|
'https://thepiratebayproxy.info',
|
||||||
'https://mypiratebay.co',
|
'https://mypiratebay.co',
|
||||||
|
|||||||
Reference in New Issue
Block a user