This commit is contained in:
4DBug
2026-08-26 13:22:49 -05:00
commit 53b3c1da6c
96 changed files with 6210 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
const QUALITY_MIN = { any: 0, '480': 480, '720': 720, '1080': 1080, '2160': 2160 };
const AUDIO_OPTIONS = ['any', 'aac', 'ac3', 'dts', 'opus', 'mp3', 'flac', 'multi'];
const SUBTITLE_OPTIONS = ['any', 'required', 'lang'];
function langCode(lang) {
return String(lang || '').toLowerCase().replace(/[^a-z]/g, '').slice(0, 2);
}
function hasSubtitleLang(streams_subtitles, wanted) {
const want = langCode(wanted);
if (!want) return true;
return streams_subtitles.some((s) => {
const code = langCode(s.language) || langCode(s.name);
return code === want;
});
}
function applyFilters(streams, filters) {
const minPixels = QUALITY_MIN[filters.minQuality] ?? 0;
return streams.filter((s) => {
if (minPixels > 0 && (s.pixels == null || s.pixels < minPixels)) return false;
if (filters.audioCodec && filters.audioCodec !== 'any' && s.audio !== filters.audioCodec) return false;
if (filters.subtitles && filters.subtitles !== 'any') {
if (s.subtitles.length === 0) return false;
if (filters.subtitles === 'lang' && filters.subtitleLang && !hasSubtitleLang(s.subtitles, filters.subtitleLang)) return false;
}
return true;
});
}
function rankStreams(streams) {
return streams
.slice()
.sort((a, b) => (b.pixels || 0) - (a.pixels || 0) || a.provider.localeCompare(b.provider));
}
module.exports = { applyFilters, rankStreams, QUALITY_MIN, AUDIO_OPTIONS, SUBTITLE_OPTIONS };