From 215ee48311cf9ea73a832234ab56763630fd9f3f Mon Sep 17 00:00:00 2001 From: L4XB Date: Sun, 25 Oct 2026 04:09:46 +0100 Subject: [PATCH] fix: leave NSFW channels out of the categories and sources playlists The other public generators drop NSFW streams with isSFW(), as PLAYLISTS.md promises (no NSFW channels since January 30th, 2024), but categories/ and sources/ took every stream, so NSFW channels with a feed were published there. The test fixture's NSFW channel now carries its feed id, so it reaches the generators instead of being dropped as a stream without a feed. --- scripts/generators/categoriesGenerator.ts | 2 +- scripts/generators/sourcesGenerator.ts | 6 +++--- .../expected/playlist_generate/.gh-pages/raw/unsorted.m3u | 2 +- tests/__data__/input/playlist_generate/unsorted.m3u | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts index ed1f4d94af..f69419e35b 100644 --- a/scripts/generators/categoriesGenerator.ts +++ b/scripts/generators/categoriesGenerator.ts @@ -25,7 +25,7 @@ export class CategoriesGenerator implements Generator { } async generate() { - const streams = this.streams + const streams = this.streams.filter((stream: Stream) => stream.isSFW()) this.categories.forEach(async (category: sdk.Models.Category) => { const categoryStreams = streams diff --git a/scripts/generators/sourcesGenerator.ts b/scripts/generators/sourcesGenerator.ts index 61c3dc94f4..559b88262b 100644 --- a/scripts/generators/sourcesGenerator.ts +++ b/scripts/generators/sourcesGenerator.ts @@ -21,9 +21,9 @@ export class SourcesGenerator implements Generator { } async generate() { - const files: Dictionary = this.streams.groupBy((stream: Stream) => - stream.getFilename() - ) + const files: Dictionary = this.streams + .filter((stream: Stream) => stream.isSFW()) + .groupBy((stream: Stream) => stream.getFilename()) for (const filename of files.keys()) { if (!filename) continue diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/raw/unsorted.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/raw/unsorted.m3u index 086cce202a..e0d28d49f7 100644 --- a/tests/__data__/expected/playlist_generate/.gh-pages/raw/unsorted.m3u +++ b/tests/__data__/expected/playlist_generate/.gh-pages/raw/unsorted.m3u @@ -1,7 +1,7 @@ #EXTM3U #EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ЛДПР ТВ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 -#EXTINF:-1 tvg-id="VisitXTV.nl" tvg-logo="https://i.imgur.com/RJ9wbNF.jpg" group-title="XXX",Visit-X TV +#EXTINF:-1 tvg-id="VisitXTV.nl@SD" tvg-logo="https://i.imgur.com/RJ9wbNF.jpg" group-title="XXX",Visit-X TV https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8 #EXTINF:-1 tvg-id="" tvg-logo="" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148" group-title="Undefined",Andorra TV (720p) [Not 24/7] #EXTVLCOPT:http-referrer=http://imn.iq diff --git a/tests/__data__/input/playlist_generate/unsorted.m3u b/tests/__data__/input/playlist_generate/unsorted.m3u index 4310ac744a..d9d6cc9edb 100644 --- a/tests/__data__/input/playlist_generate/unsorted.m3u +++ b/tests/__data__/input/playlist_generate/unsorted.m3u @@ -1,7 +1,7 @@ #EXTM3U #EXTINF:-1 tvg-id="LDPRTV.ru",ЛДПР ТВ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 -#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV +#EXTINF:-1 tvg-id="VisitXTV.nl@SD",Visit-X TV https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8 #EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] #EXTVLCOPT:http-referrer=http://imn.iq