o
    i                     @   sL   d dl Z ddlmZ ddlmZ ddlmZmZmZm	Z	 G dd deZ
dS )	    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonestr_or_nonetry_getc                   @   sX   e Zd ZdZdZdZddiZdZdZdd Z	d	d
 Z
dd Zdd Zdd Zdd ZdS )ImgGamingBaseIEz-https://dce-frontoffice.imggaming.com/api/v2/z$857a1e5d-e35e-4fdf-805b-a87b6f8364bfNzAccept-Encodingidentityzlhttps?://(?P<domain>%s)/(?P<type>live|playlist|video)/(?P<id>\d+)(?:\?.*?\bplaylistId=(?P<playlist_id>\d+))?c                 C   s   d| j  | jd| _d S )Nzdce.)Realmz	x-api-key)_REALM_API_KEY_HEADERSself r   N/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/imggaming.py_initialize_pre_login   s   z%ImgGamingBaseIE._initialize_pre_loginc              
   C   sN   | j  }d|d< d| j| jd d dt||d |dd  | j d	< d S )
Nzapplication/jsonzContent-TypezBearer loginz
Logging in)idsecret)dataheadersauthorisationTokenAuthorization)r   copy_download_json	_API_BASEjsondumpsencode)r   usernamepassword	p_headersr   r   r   _perform_login   s   
zImgGamingBaseIE._perform_loginc                 C   s    | j ds| jdd d S d S )Nr   r#   )method)r   getraise_login_requiredr   r   r   r   _real_initialize%   s   z ImgGamingBaseIE._real_initializec                 C   s   | j | j| | || jdS )N)r   )r   r   r   )r   pathmedia_idr   r   r   	_call_api)   s   zImgGamingBaseIE._call_apic              
   C   s   d}|dkr|d7 }n|d7 }z	|  ||d W S  tyE } z!t|jtr@|jjdkr@t| |jj 	 |d d d	d
 d }~ww )Nstreamvideoz/vod/z	?eventId=playerUrlCallbacki  messagesr   T)expected)
r,   r   
isinstancecauser   status_parse_jsonresponsereaddecode)r   r+   
media_typestream_pather   r   r   _extract_dve_api_url-   s&   
z$ImgGamingBaseIE._extract_dve_api_urlc              
      s  |  | \}}}}|r| ||rd|}}|dkrZ| d|}g }t|dd p,g D ]}t|d}	|	s9q-|| d| d|	 | 	 |	 q-| 
|||d|d	S | ||}
| |
|}|d
k}|ru| d|d }n|d }g }dD ]I | d pt| fdd}|sq} dkr| j||d|dd| jd}|D ]}|di | j || qq}|| j||dd| jd q}i }|dg D ]}|d}|sq||ddg d|i q||||d|d	t|d|d||d	S )Nplaylistzvod/playlist/c                 S   s   | d d S )Nvideosvodsr   xr   r   r   <lambda>G       z/ImgGamingBaseIE._real_extract.<locals>.<lambda>r   zhttps://z/video/titledescriptionlivezevent/name)hlsdashUrlc                    s   |   d S )Nurlr   r@   protor   r   rB   \   rC   rH   mp4F)rF   m3u8_idfatalr   http_headersrI   )mpd_idrP   r   	subtitlesrK   langen_USthumbnailUrldurationtags)	r   rD   formats	thumbnailrE   rW   rX   is_liverS   )_match_valid_urlgroups_yes_playlistr,   r	   r   r'   append
url_resultie_keyplaylist_resultr<   r   _extract_m3u8_formats_MANIFEST_HEADERS
setdefaultupdateextend_extract_mpd_formatsr   )r   rK   domainr9   r+   playlist_idr=   entriesr.   video_iddve_api_url
video_datar[   rD   rY   	media_urlm3u8_formatsfrS   subtitlesubtitle_urlr   rL   r   _real_extract=   sz   
 

zImgGamingBaseIE._real_extract)__name__
__module____qualname__r   r   r   rd   r   _VALID_URL_TEMPLr   r%   r)   r,   r<   rt   r   r   r   r   r
      s    
r
   )r   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   <module>   s
    