Files
knightcrawler/addon/lib/filter.js
2021-09-20 19:06:41 +02:00

180 lines
3.7 KiB
JavaScript

const Providers = {
key: 'providers',
options: [
{
key: 'yts',
label: 'YTS'
},
{
key: 'eztv',
label: 'EZTV'
},
{
key: 'rarbg',
label: 'RARBG'
},
{
key: '1337x',
label: '1337x'
},
{
key: 'thepiratebay',
label: 'ThePirateBay'
},
{
key: 'kickasstorrents',
label: 'KickassTorrents'
},
{
key: 'torrentgalaxy',
label: 'TorrentGalaxy'
},
{
key: 'horriblesubs',
label: 'HorribleSubs',
anime: true
},
{
key: 'nyaasi',
label: 'NyaaSi',
anime: true
},
{
key: 'nyaapantsu',
label: 'NyaaPantsu',
anime: true
},
{
key: 'rutor',
label: 'Rutor',
foreign: '🇷🇺'
},
{
key: 'comando',
label: 'Comando',
foreign: '🇵🇹'
},
{
key: 'comoeubaixo',
label: 'ComoEuBaixo',
foreign: '🇵🇹'
},
{
key: 'lapumia',
label: 'Lapumia',
foreign: '🇵🇹'
},
{
key: 'ondebaixa',
label: 'OndeBaixa',
foreign: '🇵🇹'
},
{
key: 'torrent9',
label: 'Torrent9',
foreign: '🇫🇷'
}
]
};
const QualityFilter = {
key: 'qualityfilter',
options: [
{
key: '4k',
label: '4k',
items: ['4k'],
test(quality) {
return this.items.includes(quality);
}
},
{
key: '1080p',
label: '1080p',
items: ['1080p'],
test(quality) {
return this.items.includes(quality)
}
},
{
key: '720p',
label: '720p',
items: ['720p'],
test(quality) {
return this.items.includes(quality)
}
},
{
key: '480p',
label: '480p',
items: ['480p'],
test(quality) {
return this.items.includes(quality)
}
},
{
key: 'other',
label: 'Other (DVDRip/HDRip/BDRip...)',
// could be ['DVDRip', 'HDRip', 'BDRip', 'BRRip', 'BluRay', 'WEB-DL', 'WEBRip', 'HDTV', 'DivX', 'XviD']
items: ['4k', '1080p', '720p', '480p', 'SCR', 'CAM', 'TeleSync', 'TeleCine'],
test(quality) {
return quality && !this.items.includes(quality);
}
},
{
key: 'scr',
label: 'Screener',
items: ['SCR'],
test(quality) {
return this.items.includes(quality)
}
},
{
key: 'cam',
label: 'Cam',
items: ['CAM', 'TeleSync', 'TeleCine'],
test(quality) {
return this.items.includes(quality)
}
},
{
key: 'unknown',
label: 'Unknown',
test(quality) {
return !quality
}
}
]
};
const defaultProviderKeys = Providers.options.map(provider => provider.key);
function applyFilters(streams, config) {
return filterByQuality(filterByProvider(streams, config), config);
}
function filterByProvider(streams, config) {
const providers = config.providers || defaultProviderKeys;
if (!providers || !providers.length) {
return streams;
}
return streams.filter(stream => {
const match = stream.title.match(/⚙.* ([^ \n]+)/);
const provider = match && match[1].toLowerCase();
return providers.includes(provider);
})
}
function filterByQuality(streams, config) {
const filters = config[QualityFilter.key];
if (!filters) {
return streams;
}
const filterOptions = QualityFilter.options.filter(option => filters.includes(option.key));
return streams.filter(stream => {
const streamQuality = stream.name.split('\n')[1];
return !filterOptions.some(option => option.test(streamQuality));
});
}
module.exports = applyFilters;
module.exports.Providers = Providers;
module.exports.QualityFilter = QualityFilter;