U
    g                     @   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.)ZRealmz	x-api-key)_REALM_API_KEY_HEADERSself r   >/tmp/pip-unpacked-wheel-q5ljy6pj/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headersZauthorisationTokenAuthorization)r   copy_download_json	_API_BASEjsondumpsencode)r   usernamepasswordZ	p_headersr   r   r   _perform_login   s    
  
zImgGamingBaseIE._perform_loginc                 C   s   | j ds| jdd d S )Nr   r!   )method)r   getZ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k
r } zFt|jtr|jjdkrt| |jj 	 |d d d	d
 W 5 d }~X Y nX d S )Nstreamvideoz/vod/z	?eventId=ZplayerUrlCallbacki  messagesr   T)expected)
r(   r   
isinstancecauser   statusZ_parse_jsonresponsereaddecode)r   r'   
media_typeZstream_pather   r   r   _extract_dve_api_url-   s$    
 z$ImgGamingBaseIE._extract_dve_api_urlc              
      s  |  | \}}}}|r0| ||r0d| }}|dkr| d|}g }t|dd pXg D ]<}t|d}	|	srqZ|| d| d|	 | 	 |	 qZ| 
|||d|d	S | ||}
| |
|}|d
k}|r| d|d }n|d }g }dD ] | d pt| fdd}|s(q dkrx| j||d|dd| jd}|D ]$}|di | j || qPq|| j||dd| jd qi }|dg D ]8}|d}|sq||ddg d|i q||||d|d	t|d|d||d	S )Nplaylistzvod/playlist/c                 S   s   | d d S )NZvideosZ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   r7   protor   r   r9   \   r:   r?   Zmp4F)r=   Zm3u8_idfatalr   Zhttp_headersr@   )Zmpd_idrE   r   	subtitlesrB   langen_USZthumbnailUrldurationtags)	r   r;   formatsZ	thumbnailr<   rI   rJ   is_liverF   )Z_match_valid_urlgroupsZ_yes_playlistr(   r	   r   r$   appendZ
url_resultZie_keyZplaylist_resultr5   r   Z_extract_m3u8_formats_MANIFEST_HEADERS
setdefaultupdateextendZ_extract_mpd_formatsr   )r   rB   domainr3   r'   Zplaylist_idr6   entriesr*   Zvideo_idZdve_api_urlZ
video_datarL   r;   rK   Z	media_urlZm3u8_formatsfrF   ZsubtitleZsubtitle_urlr   rC   r   _real_extract=   s    
   "
        

 
zImgGamingBaseIE._real_extract)__name__
__module____qualname__r   r   r   rO   r   Z_VALID_URL_TEMPLr   r"   r%   r(   r5   rV   r   r   r   r   r
      s   
r
   )r   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   <module>   s   