From 90e4030a8811f1051402e4c10fcfd4b489bf83c7 Mon Sep 17 00:00:00 2001 From: Andy Date: Sat, 8 Nov 2025 06:04:37 +0000 Subject: [PATCH] fix(n_m3u8dl_re): read lang attribute from DASH manifests correctly The track_selection function was using findall() to search for lang child elements, but in DASH manifests lang is an XML attribute on AdaptationSet. This caused language selection to fail for region-specific codes like es-419. --- unshackle/core/downloaders/n_m3u8dl_re.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/unshackle/core/downloaders/n_m3u8dl_re.py b/unshackle/core/downloaders/n_m3u8dl_re.py index d183111..110a977 100644 --- a/unshackle/core/downloaders/n_m3u8dl_re.py +++ b/unshackle/core/downloaders/n_m3u8dl_re.py @@ -57,7 +57,11 @@ def track_selection(track: object) -> list[str]: if track_type == "Audio": codecs = AUDIO_CODEC_MAP.get(codec) - langs = adaptation_set.findall("lang") + representation.findall("lang") + langs = [] + if adaptation_set.get("lang"): + langs.append(adaptation_set.get("lang")) + if representation is not None and representation.get("lang"): + langs.append(representation.get("lang")) track_ids = list( set( v