From 8f313d7f58c12be8359d1eb0e65c78677f7a24a0 Mon Sep 17 00:00:00 2001 From: arabcoders Date: Sun, 30 Mar 2025 01:43:31 +0300 Subject: [PATCH] add support for --match-filter --- app/library/Utils.py | 9 ++++++++- app/library/YTDLPOpts.py | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/library/Utils.py b/app/library/Utils.py index be338ec4..4251bb5e 100644 --- a/app/library/Utils.py +++ b/app/library/Utils.py @@ -465,6 +465,13 @@ def arg_converter(args: str) -> dict: if "postprocessors" in diff: diff["postprocessors"] = [pp for pp in diff["postprocessors"] if pp not in default_opts["postprocessors"]] + if "match_filter" in diff: + import inspect + + matchFilter = inspect.getclosurevars(diff["match_filter"].func).nonlocals["filters"] + if isinstance(matchFilter, set): + diff["match_filter"] = {"filters": list(matchFilter)} + from .encoder import Encoder return json.loads(json.dumps(diff, cls=Encoder)) @@ -691,7 +698,7 @@ def get( if not path: return data - # If data is not a dict or list, attempt to convert it (similar to PHP's get_object_vars). + # If data is not a dict or list, attempt to convert it. if not isinstance(data, dict | list): try: data = vars(data) diff --git a/app/library/YTDLPOpts.py b/app/library/YTDLPOpts.py index a414543e..1a5fd206 100644 --- a/app/library/YTDLPOpts.py +++ b/app/library/YTDLPOpts.py @@ -142,4 +142,14 @@ class YTDLPOpts(metaclass=Singleton): data["impersonate"] = ImpersonateTarget.from_str(data["impersonate"]) + if ( + "match_filter" in data + and isinstance(data["match_filter"], dict) + and "filters" in data["match_filter"] + and len(data["match_filter"]["filters"]) > 0 + ): + from yt_dlp.utils import match_filter_func + + data["match_filter"] = match_filter_func(data["match_filter"]["filters"]) + return data