diff --git a/lib/repository.js b/lib/repository.js index 71e0ddc..d39ffa4 100644 --- a/lib/repository.js +++ b/lib/repository.js @@ -93,6 +93,14 @@ function getFiles(torrent) { return File.findAll({ where: { infoHash: torrent.infoHash } }); } +function getFilesBasedOnTitle(titleQuery) { + return File.findAll({ where: { title: { [Op.iLike]: `%${titleQuery}%` } } }); +} + +function deleteFile(file) { + return File.destroy({ where: { id: file.id } }) +} + function getSkipTorrent(torrent) { return SkipTorrent.findByPk(torrent.infoHash) .then((result) => { @@ -129,6 +137,8 @@ module.exports = { createTorrent, createFile, getFiles, + getFilesBasedOnTitle, + deleteFile, getSkipTorrent, createSkipTorrent, createFailedImdbTorrent diff --git a/lib/torrent.js b/lib/torrent.js index bf88460..a7e8bee 100644 --- a/lib/torrent.js +++ b/lib/torrent.js @@ -97,12 +97,13 @@ async function filesFromTorrentStream(torrent) { setTimeout(() => { engine.destroy(); rejected(new Error('No available connections for torrent!')); - }, 30000); + }, 60000); }); } function isVideo(title) { - return EXTENSIONS.includes(title.path.match(/\.(\w{2,4})$/)[1]); + const match = title.path.match(/\.(\w{2,4})$/); + return match && EXTENSIONS.includes(match[1]); } function dynamicTimeout(torrent) { diff --git a/manual/manual.js b/manual/manual.js index 15afb50..b1ef44b 100644 --- a/manual/manual.js +++ b/manual/manual.js @@ -27,6 +27,27 @@ async function addMissingEpisodes() { .forEach((file) => repository.createFile(file)); } +async function updateMovieCollections() { + const collectionFiles = await repository.getFilesBasedOnTitle('logy') + .then(files => files.filter(file => file.fileIndex === null)) + .then(files => files.filter(file => parse(file.title).complete)); + + collectionFiles.map(original => repository.getTorrent({ infoHash: original.infoHash }) + .then(torrent => parseTorrentFiles({ ...torrent, imdbId: original.imdbId })) + .then(files => Promise.all(files.map(file => { + console.log(file); + return repository.createFile(file) + }))) + .then(createdFiled => { + if (createdFiled && createdFiled.length) { + console.log(`Updated movie collection ${original.title}`); + repository.deleteFile(original) + } else { + console.log(`Failed updating movie collection ${original.title}`); + } + })); +} + async function findAllFiles() { /* Test cases */ /* Anime Season and absolute episodes */ @@ -93,5 +114,6 @@ async function findAllFiles() { .then((files) => console.log(files)); } -addMissingEpisodes().then(() => console.log('Finished')); -//findAllFiles().then(() => console.log('Finished')); \ No newline at end of file +//addMissingEpisodes().then(() => console.log('Finished')); +//findAllFiles().then(() => console.log('Finished')); +updateMovieCollections().then(() => console.log('Finished')); \ No newline at end of file