handles series type mismatch if is in movie category

This commit is contained in:
TheBeastLT
2020-02-26 00:31:13 +01:00
parent 23880d4fb2
commit 149b24fbf0
5 changed files with 43 additions and 15 deletions

View File

@@ -81,6 +81,10 @@ function getTorrent(torrent) {
})
}
function getTorrentsBasedOnTitle(titleQuery, type) {
return Torrent.findAll({ where: { title: { [Op.regexp]: `${titleQuery}` }, type: type } });
}
function createTorrent(torrent) {
return Torrent.upsert(torrent);
}
@@ -133,8 +137,9 @@ module.exports = {
connect,
getProvider,
updateProvider,
getTorrent,
createTorrent,
getTorrent,
getTorrentsBasedOnTitle,
createFile,
getFiles,
getFilesBasedOnTitle,

View File

@@ -8,6 +8,10 @@ async function createTorrentEntry(torrent) {
const titleInfo = parse(torrent.title);
const searchTitle = escapeTitle(titleInfo.title).toLowerCase();
if (titleInfo.seasons && torrent.type === Type.MOVIE) {
// sometimes series torrent might be put into movies category
torrent.type = Type.SERIES;
}
if (!torrent.imdbId && torrent.type !== Type.ANIME) {
torrent.imdbId = await getImdbId({ name: searchTitle, year: titleInfo.year, type: torrent.type })
.catch(() => undefined);

View File

@@ -16,7 +16,7 @@ async function parseTorrentFiles(torrent) {
// throw new Error(`Mismatching entry type for ${torrent.name}: ${torrent.type}!=${metadata.type}`);
// }
if (torrent.type === Type.MOVIE) {
if (torrent.type === Type.MOVIE && !parsedTorrentName.seasons) {
if (parsedTorrentName.complete) {
return torrentFiles(torrent)
.then(files => files.filter(file => file.size > MIN_SIZE))

View File

@@ -1,9 +1,12 @@
require('dotenv').config();
const Bottleneck = require('bottleneck');
const { parse } = require('parse-torrent-title');
const repository = require('../lib/repository');
const { parseTorrentFiles } = require('../lib/torrentFiles');
const { Type } = require('../lib/types');
const limiter = new Bottleneck({ maxConcurrent: 40 });
async function addMissingEpisodes() {
const torrent = { infoHash: '0ec780c2c7f8d5b38e61827f0b53c77c3d22f955' };
const torrentFiles = await require('../lib/torrent').torrentFiles(torrent);
@@ -48,27 +51,42 @@ async function updateMovieCollections() {
}));
}
async function reapplyEpisodeDecomposing() {
const infoHash = '84fadd061f0d0bc356235b7fa6495a0f51fff311';
const imdbId = 'tt0988824';
async function reapplySeriesSeasonsSavedAsMovies() {
return repository.getTorrentsBasedOnTitle('(?:[^a-zA-Z0-9]|^)[Ss][012]?[0-9](?:[^0-9]|$)', Type.MOVIE)
.then(torrents => Promise.all(torrents
.filter(torrent => parse(torrent.title).seasons)
.map(torrent => limiter.schedule(() => reapplyEpisodeDecomposing(torrent.infoHash, false)
.then(() => {
torrent.type = Type.SERIES;
return torrent.save();
})))))
.then(() => console.log('Finished updating multiple torrents'));
}
async function reapplyEpisodeDecomposing(infoHash, includeSourceFiles = true) {
const torrent = await repository.getTorrent({ infoHash });
const storedFiles = await repository.getFiles({ infoHash });
const fileIndexMap = storedFiles
.reduce((map, next) => (map[next.fileIndex] = (map[next.fileIndex] || []).concat(next), map), {});
const files = Object.values(fileIndexMap)
const files = includeSourceFiles && Object.values(fileIndexMap)
.map(sameIndexFiles => sameIndexFiles[0])
.map(file => ({ fileIndex: file.fileIndex, name: file.title, path: file.title, size: file.size }));
const imdbId = storedFiles[0].imdbId;
return parseTorrentFiles({ ...torrent, imdbId, files })
.then(newFiles => newFiles.map(file => {
const originalFile = fileIndexMap[file.fileIndex].shift();
originalFile.imdbSeason = file.imdbSeason;
originalFile.imdbEpisode = file.imdbEpisode;
originalFile.kitsuId = file.kitsuId;
originalFile.kitsuEpisode = file.kitsuEpisode;
return originalFile;
if (fileIndexMap[file.fileIndex]) {
const originalFile = fileIndexMap[file.fileIndex].shift();
originalFile.imdbSeason = file.imdbSeason;
originalFile.imdbEpisode = file.imdbEpisode;
originalFile.kitsuId = file.kitsuId;
originalFile.kitsuEpisode = file.kitsuEpisode;
return originalFile;
}
return file;
}))
.then(updatedFiles => Promise.all(updatedFiles.map(file => file.save())))
.then(updatedFiles => Promise.all(updatedFiles
.map(file => file.id ? file.save() : repository.createFile(file))))
.then(() => console.log(`Updated files for ${torrent.title}`));
}
@@ -148,4 +166,5 @@ async function findAllFiles() {
//addMissingEpisodes().then(() => console.log('Finished'));
//findAllFiles().then(() => console.log('Finished'));
//updateMovieCollections().then(() => console.log('Finished'));
reapplyEpisodeDecomposing().then(() => console.log('Finished'));
//reapplyEpisodeDecomposing().then(() => console.log('Finished'));
reapplySeriesSeasonsSavedAsMovies().then(() => console.log('Finished'));

2
package-lock.json generated
View File

@@ -1714,7 +1714,7 @@
}
},
"parse-torrent-title": {
"version": "git://github.com/TheBeastLT/parse-torrent-title.git#d6b677ad5e576c9294de1de75c0fd1396bd1ab7b",
"version": "git://github.com/TheBeastLT/parse-torrent-title.git#286c5f9b06a2ac38354ea249a1d96b17919ba930",
"from": "git://github.com/TheBeastLT/parse-torrent-title.git#master"
},
"parseurl": {