From 1cf174e89652281548f34995dbcb914bfd3dfed3 Mon Sep 17 00:00:00 2001 From: unai Date: Mon, 2 Feb 2026 16:23:45 +0000 Subject: [PATCH] feat: add inclusion and exclusion filters for channel names in playlist generation --- src/m3u_list_builder/config.py | 14 ++++++++++++++ src/m3u_list_builder/playlist.py | 14 +++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/m3u_list_builder/config.py b/src/m3u_list_builder/config.py index 40b6875..af95080 100644 --- a/src/m3u_list_builder/config.py +++ b/src/m3u_list_builder/config.py @@ -24,6 +24,20 @@ class Settings(BaseSettings): env_file=".env", env_file_encoding="utf-8", extra="ignore" ) + # Filtros por prefijo de nombre de canal + include_text: list[str] = Field( + default_factory=list, + description="Lista de textos obligatorios. Si se define, el canal DEBE contener al menos uno.", + ) + exclude_text: list[str] = Field( + default_factory=list, + description="Lista de textos prohibidos. Si el canal contiene uno, se descarta.", + ) + + model_config = SettingsConfigDict( + env_file=".env", env_file_encoding="utf-8", extra="ignore" + ) + # Instancia única de configuración settings = Settings() diff --git a/src/m3u_list_builder/playlist.py b/src/m3u_list_builder/playlist.py index 84ef5f7..b102f8c 100644 --- a/src/m3u_list_builder/playlist.py +++ b/src/m3u_list_builder/playlist.py @@ -61,7 +61,19 @@ class PlaylistManager: stream_id = channel.get("stream_id") icon = channel.get("stream_icon", "") cat_id = channel.get("category_id", "") - + # Filtros de inclusión/exclusión por prefijo de nombre + if settings.include_text: + if not any( + name.lower().startswith(inc_text.lower()) + for inc_text in settings.include_text + ): + continue + if settings.exclude_text: + if any( + exc_text.lower() in name.lower() + for exc_text in settings.exclude_text + ): + continue # Construir URL directa stream_url = ( f"{settings.host}/live/{settings.username}/"