mirror of
				https://github.com/devine-dl/devine.git
				synced 2025-11-04 03:44:49 +00:00 
			
		
		
		
	feat(Track): Make ID optional, Automatically compute one if not provided
This commit is contained in:
		
							parent
							
								
									fa9db335d6
								
							
						
					
					
						commit
						bd90bd6dca
					
				@ -2,10 +2,12 @@ import base64
 | 
			
		||||
import re
 | 
			
		||||
import shutil
 | 
			
		||||
import subprocess
 | 
			
		||||
from copy import copy
 | 
			
		||||
from enum import Enum
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import Any, Callable, Iterable, Optional, Union
 | 
			
		||||
from uuid import UUID
 | 
			
		||||
from zlib import crc32
 | 
			
		||||
 | 
			
		||||
import m3u8
 | 
			
		||||
import requests
 | 
			
		||||
@ -25,7 +27,6 @@ class Track:
 | 
			
		||||
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self,
 | 
			
		||||
        id_: str,
 | 
			
		||||
        url: Union[str, list[str]],
 | 
			
		||||
        language: Union[Language, str],
 | 
			
		||||
        is_original_lang: bool = False,
 | 
			
		||||
@ -33,10 +34,9 @@ class Track:
 | 
			
		||||
        needs_repack: bool = False,
 | 
			
		||||
        drm: Optional[Iterable[DRM_T]] = None,
 | 
			
		||||
        edition: Optional[str] = None,
 | 
			
		||||
        extra: Optional[Any] = None
 | 
			
		||||
        extra: Optional[Any] = None,
 | 
			
		||||
        id_: Optional[str] = None,
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        if not isinstance(id_, str):
 | 
			
		||||
            raise TypeError(f"Expected id to be a {str}, not {type(id_)}")
 | 
			
		||||
        if not isinstance(url, (str, list)):
 | 
			
		||||
            raise TypeError(f"Expected url to be a {str}, or list of {str}, not {type(url)}")
 | 
			
		||||
        if not isinstance(language, (Language, str)):
 | 
			
		||||
@ -47,6 +47,8 @@ class Track:
 | 
			
		||||
            raise TypeError(f"Expected descriptor to be a {Track.Descriptor}, not {type(descriptor)}")
 | 
			
		||||
        if not isinstance(needs_repack, bool):
 | 
			
		||||
            raise TypeError(f"Expected needs_repack to be a {bool}, not {type(needs_repack)}")
 | 
			
		||||
        if not isinstance(id_, (str, type(None))):
 | 
			
		||||
            raise TypeError(f"Expected id_ to be a {str}, not {type(id_)}")
 | 
			
		||||
        if not isinstance(edition, (str, type(None))):
 | 
			
		||||
            raise TypeError(f"Expected edition to be a {str}, not {type(edition)}")
 | 
			
		||||
 | 
			
		||||
@ -60,7 +62,6 @@ class Track:
 | 
			
		||||
            except TypeError:
 | 
			
		||||
                raise TypeError(f"Expected drm to be an iterable, not {type(drm)}")
 | 
			
		||||
 | 
			
		||||
        self.id = id_
 | 
			
		||||
        self.url = url
 | 
			
		||||
        # required basic metadata
 | 
			
		||||
        self.language = Language.get(language)
 | 
			
		||||
@ -74,6 +75,14 @@ class Track:
 | 
			
		||||
        self.edition: str = edition
 | 
			
		||||
        self.extra: Any = extra or {}  # allow anything for extra, but default to a dict
 | 
			
		||||
 | 
			
		||||
        if not id_:
 | 
			
		||||
            this = copy(self)
 | 
			
		||||
            this.url = self.url.rsplit("?", maxsplit=1)[0]
 | 
			
		||||
            checksum = crc32(repr(self).encode("utf8"))
 | 
			
		||||
            id_ = hex(checksum)[2:]
 | 
			
		||||
 | 
			
		||||
        self.id = id_
 | 
			
		||||
 | 
			
		||||
        # TODO: Currently using OnFoo event naming, change to just segment_filter
 | 
			
		||||
        self.OnSegmentFilter: Optional[Callable] = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user