o
    i$                     @   s   d dl Z d dlZd dlZ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 ddlmZ G dd	 d	eZG d
d deZG dd deZdS )    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptyurl_or_none)traverse_objc                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
d
d Zdd Zddi fddZdS )DangalPlayBaseIE
dangalplayINNa5  Pass credentials as -u "token" -p "USER_ID" (where USER_ID is the value of "otv_user_id" in your browser local storage). Your login region can be optionally suffixed to the username as @REGION (where REGION is the two-letter "region" code found in your browser local storage), e.g.: -u "token@IN" -p "USER_ID"zhttps://ottapi.dangalplay.comjqeGWxRKK7FK5zEk3xCMf53d31a4377e4ef31fa0c                 C   sf   | j rd S td|}|rtd|st| jdd|d }r$|| _| d| j d || _ d S )Nztoken(?:@(?P<region>[A-Z]{2}))?z[\da-f]{32}T)expectedregionzSetting login region to "")_OTV_USER_IDre	fullmatchr   _LOGIN_HINTgroup_REGIONwrite_debug)selfusernamepasswordmobjr    r   O/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/dangalplay.py_perform_login   s   
zDangalPlayBaseIE._perform_loginc                 C   s$   | j s| jd| j d d d S d S )NzLogin required. method)r   raise_login_requiredr   )r   r   r   r   _real_initialize%   s   z!DangalPlayBaseIE._real_initializec                 C   sx   |t | jd|dd dt | jd|ddd|dt|dthfd	thfd
thfdthtfdthfdt hfdt hfdS )Nzep-(?:number-)?(\d+)zepisode number)defaultzseason-(\d+)zseason number1)
display_idepisode_numberseason_numberseries
content_iddisplay_titletitle	show_name
catalog_iddurationrelease_date_uts)idr-   episoder*   	series_idr0   release_timestamp)r   _search_regexr
   strfilter)r   metadataepisode_slugseries_slugr   r   r   _extract_episode_info)   s&   
z&DangalPlayBaseIE._extract_episode_infozDownloading JSON metadataTc              	   C   s4   | j | j d| |||ddi| j| jd|dS )N/Acceptapplication/json)
auth_tokenr   )fatalheadersquery)_download_json	_API_BASE_AUTH_TOKENr   )r   pathr'   noterA   rC   r   r   r   	_call_api<   s   zDangalPlayBaseIE._call_api)__name__
__module____qualname___NETRC_MACHINEr   r   r   rE   rF   _SECRET_KEYr    r$   r<   rI   r   r   r   r   r      s    r   c                   @   sp   e Zd ZdZdZddddddd	d
ddddddddddddddddddddddddgZdd Zdd Zd S )!DangalPlayIEr   zchttps?://(?:www\.)?dangalplay.com/shows/(?P<series>[^/?#]+)/(?P<id>(?!episodes)[^/?#]+)/?(?:$|[?#])zghttps://www.dangalplay.com/shows/kitani-mohabbat-hai-season-2/kitani-mohabbat-hai-season-2-ep-number-01647c61dc1e7171310dcd49b4mp4i ;=Kr   z#EP 1 | KITANI MOHABBAT HAI SEASON 2zkitani-mohabbat-hai-season-2r   20100101i	  zSeason 2z)kitani-mohabbat-hai-season-2-ep-number-01645c9ea41e717158ca574966)r2   extr5   r(   r3   r*   r)   r-   release_dater0   seasonr'   r4   )url	info_dictzYhttps://www.dangalplay.com/shows/milke-bhi-hum-na-mile/milke-bhi-hum-na-mile-ep-number-0165d31d9ba73b9c3abd14a7f3zEP 1 | MILKE BHI HUM NA MILEi3ezSeason 1ia 20240219zMILKE BHI HUM NA MILEz"milke-bhi-hum-na-mile-ep-number-01)r2   rT   r3   r5   r(   rV   r-   r0   rU   r)   r*   r4   r'   c                 C   sp   |d }|d }t tt }d||| j|| jf}tj||d| j| j	| jt
|  |ddd S )Nr/   r+    )r/   r+   categoryr   r@   r2   md5ts),:)
separators)r7   inttimejoinr   rN   jsondumpsr   rF   hashlibr]   encode	hexdigest)r   datar/   r+   	timestampunhashedr   r   r   _generate_api_datam   s$   		zDangalPlayIE._generate_api_datac              
   C   sb  |  |dd\}}| jd| d| d|ddidd	 }z| j| j d
|dddd| |dd	 }W n\ ty } zPt|jt	r|jj
dkrt|jj  tjhdthfp\i }|d}|dkrr| jd| j d d n|dkr| jd| j d d tt||ddd d }~ww t|dthtf}	| |	|d\}
}|
|d| |||S )Nr*   r2   zcatalogs/shows/z
/episodes/.gzipitem_languager[   rC   rj   z/v2/users/get_all_details.gzipz!Downloading playback details JSONr?   )r>   zContent-Type)rB   rj   i  errorcode1016z&Your token has expired or is invalid. r!   4028z/Your login region is unspecified or incorrect. messagez: )delim)adaptive_url)adaptive_urlshdhls.playback_urlrQ   )formats	subtitles)_match_valid_urlr   rI   rD   rE   rm   r   
isinstancecauser   statusr
   responsereaddecodere   loadsdictgetr#   r   r   r	   any#_extract_m3u8_formats_and_subtitlesr<   )r   rW   r;   r:   r9   detailse
error_info
error_codem3u8_urlr|   r}   r   r   r   _real_extract~   sV   &
zDangalPlayIE._real_extractN)rJ   rK   rL   IE_NAME
_VALID_URL_TESTSrm   r   r   r   r   r   rO   F   sL    $rO   c                   @   sR   e Zd ZdZdZddddiddd	dd
idddddidgZdd Zdd ZdS )DangalPlaySeasonIEzdangalplay:seasonzehttps?://(?:www\.)?dangalplay.com/shows/(?P<id>[^/?#]+)(?:/(?P<sub>ep-[^/?#]+)/episodes)?/?(?:$|[?#])z=https://www.dangalplay.com/shows/kitani-mohabbat-hai-season-1   r2   zkitani-mohabbat-hai-season-1)rW   playlist_mincountrX   zQhttps://www.dangalplay.com/shows/kitani-mohabbat-hai-season-1/ep-01-30-1/episodes   z'kitani-mohabbat-hai-season-1-ep-01-30-1)rW   playlist_countrX   z6https://www.dangalplay.com/shows/milke-bhi-hum-na-mile   zmilke-bhi-hum-na-milec              
   c   s    |D ]@}| j d| d| d|d| ddddd	}t|d
ddd fD ]}|d }| jd| d| tfi | |||V  q&qd S )Ncatalogs/shows/items/z/subcategories/z/episodes.gzipzDownloading episodes JSON for Fasc	published)order_byr   )rA   rC   rj   itemsc                 S   s   |d S )Nfriendly_idr   )_vr   r   r   <lambda>   s    z-DangalPlaySeasonIE._entries.<locals>.<lambda>r   z!https://www.dangalplay.com/shows/r=   )rI   r
   
url_resultrO   r<   )r   subcategoriesr;   subcategoryrj   epr:   r   r   r   _entries   s&   
zDangalPlaySeasonIE._entriesc                 C   sj   |  |dd\}}|r|gnt| jd| d|dddidd	d
ddthf}| | ||t||S )Nr2   subr   rn   zDownloading season info JSONro   r[   rp   rj   r   .r   )r~   r   r
   rI   r7   playlist_resultr   r   )r   rW   r;   r   r   r   r   r   r      s   z DangalPlaySeasonIE._real_extractN)rJ   rK   rL   r   r   r   r   r   r   r   r   r   r      s*    r   )rg   re   r   rc   commonr   networking.exceptionsr   utilsr   r   r   r	   utils.traversalr
   r   rO   r   r   r   r   r   <module>   s    :]