mirror of
				https://github.com/devine-dl/devine.git
				synced 2025-11-04 03:44:49 +00:00 
			
		
		
		
	Validate track languages in HLS.to_tracks
This commit is contained in:
		
							parent
							
								
									86635f9b7f
								
							
						
					
					
						commit
						7cec16d8ab
					
				@ -16,7 +16,7 @@ from urllib.parse import urljoin
 | 
			
		||||
 | 
			
		||||
import m3u8
 | 
			
		||||
import requests
 | 
			
		||||
from langcodes import Language
 | 
			
		||||
from langcodes import Language, tag_is_valid
 | 
			
		||||
from m3u8 import M3U8
 | 
			
		||||
from pywidevine.cdm import Cdm as WidevineCdm
 | 
			
		||||
from pywidevine.pssh import PSSH
 | 
			
		||||
@ -148,12 +148,26 @@ class HLS:
 | 
			
		||||
                track_type = Subtitle
 | 
			
		||||
                codec = Subtitle.Codec.WebVTT  # assuming WebVTT, codec info isn't shown
 | 
			
		||||
 | 
			
		||||
            track_lang = next((
 | 
			
		||||
                Language.get(option)
 | 
			
		||||
                for x in (media.language, language)
 | 
			
		||||
                for option in [(str(x) or "").strip()]
 | 
			
		||||
                if tag_is_valid(option) and not option.startswith("und")
 | 
			
		||||
            ), None)
 | 
			
		||||
            if not track_lang:
 | 
			
		||||
                msg = "Language information could not be derived for a media."
 | 
			
		||||
                if language is None:
 | 
			
		||||
                    msg += " No fallback language was provided when calling HLS.to_tracks()."
 | 
			
		||||
                elif not tag_is_valid((str(language) or "").strip()) or str(language).startswith("und"):
 | 
			
		||||
                    msg += f" The fallback language provided is also invalid: {language}"
 | 
			
		||||
                raise ValueError(msg)
 | 
			
		||||
 | 
			
		||||
            tracks.add(track_type(
 | 
			
		||||
                id_=md5(str(media).encode()).hexdigest()[0:6],  # 6 chars only for filename length
 | 
			
		||||
                url=urljoin(media.base_uri, media.uri),
 | 
			
		||||
                codec=codec,
 | 
			
		||||
                language=media.language or language,  # HLS media may not have language info, fallback if needed
 | 
			
		||||
                is_original_lang=language and is_close_match(media.language, [language]),
 | 
			
		||||
                language=track_lang,  # HLS media may not have language info, fallback if needed
 | 
			
		||||
                is_original_lang=language and is_close_match(track_lang, [language]),
 | 
			
		||||
                descriptor=Audio.Descriptor.M3U,
 | 
			
		||||
                drm=session_drm if media.type == "AUDIO" else None,
 | 
			
		||||
                extra=media,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user