o
    i                     @   sT   d dl Z d dlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZ G dd deZdS )    N   )InfoExtractor   )ExtractorErrorint_or_nonejwt_decode_hs256str_or_nonetraverse_objtry_callurl_or_nonec                   @   s   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i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d+d,ddidd-d.d/gZd0Zd0Zd<d2d3Zd4d5 Z	d6d7 Z
d8d9 Zd:d; Zd0S )=QDanceIEqdancezGhttps?://(?:www\.)?q-dance\.com/network/(?:library|live)/(?P<id>[\w-]+)vodz1https://www.q-dance.com/network/library/146542138	146542138mp4zASound Rush [LIVE] | Defqon.1 Weekend Festival 2022 | Friday | REDz<sound-rush-live-v3-defqon-1-weekend-festival-2022-friday-redub   Relive Defqon.1 - Primal Energy 2022 with the sounds of Sound Rush LIVE at the RED on Friday! 🔥zDefqon.1 Weekend Festival 202231840632zDefqon.131840378zZhttps://images.q-dance.network/1674829540-20220624171509-220624171509_delio_dn201093-2.jpgpremium_onlyi%  )idexttitle
display_iddescriptionseason	season_idseries	series_id	thumbnailavailabilitydurationskip_downloadm3u8)noteurl	info_dictparams
livestreamz.https://www.q-dance.com/network/live/149170353	149170353z!re:^Defqon\.1 2023 - Friday - REDzdefqon-1-2023-friday-redz$md5:3c73fbbd4044e578e696adfc64019163zDefqon.1 Weekend Festival 2023	141735599z=https://images.q-dance.network/1686849069-area-thumbs_red.pngsubscriber_onlyis_livezqdancenetwork.video_149170353)r   r   r   r   r   r   r   r   r   r   r   live_status
channel_idzCompleted livestream)r"   r#   r$   skipzvod with alphanumeric idz>https://www.q-dance.com/network/library/WhDleSIWSfeT3Q9ObBKBeAWhDleSIWSfeT3Q9ObBKBeAz;Aftershock I Defqon.1 Weekend Festival 2023 I Sunday I BLUEz4naam-i-defqon-1-weekend-festival-2023-i-dag-i-podiumuD   Relive Defqon.1 Path of the Warrior with Aftershock at the BLUE 🔥i  zOhttps://images.q-dance.network/1698158361-230625-135716-defqon-1-aftershock.jpg)r   r   r   r   r   r   r   r   r   r   r   r   z>https://www.q-dance.com/network/library/-uRFKXwmRZGVnve7av9uqAT)r#   only_matchingN
Logging inc           	   	   C   s   | j dd |dddddtj|dd d	d
 d}t|ddthfdthfdthfdf}|dsXdt|ddthf}d|vrJtd| dd|v rPdnd}t|dd|	 D ]\}}| 
d|| q\d S )Nz'https://members.id-t.com/api/auth/loginzapplication/jsonr   zhttps://www.q-dance.comhttps://www.q-dance.com/)zcontent-typebrandoriginreferer),:)
separatorsc                 S   s   dS )NT xr8   r8   K/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/qdance.py<lambda>Z   s    z*QDanceIE._call_login_api.<locals>.<lambda>)headersdataexpected_statusr>   accessTokenrefreshTokenidToken)_id-t-accounts-token_id-t-accounts-refreshz_id-t-accounts-id-tokenrC   z: error)codemessagevalidation_errorzQ-Dance API said ""emailzInvalid username or passwordzRefresh token has expiredTexpectedz.q-dance.com)_download_jsonjsondumpsencoder	   strgetjoinr   items_set_cookie)	selfr>   r"   logintokensrE   msgnamevaluer8   r8   r;   _call_login_apiR   s0   	

zQDanceIE._call_login_apic                 C   s   |  ||d d S )N)rJ   password)r\   )rV   usernamer]   r8   r8   r;   _perform_loginl   s   zQDanceIE._perform_loginc                    sD   |  d t fdd| _t fdd| _| js |   d S d S )Nr1   c                      
    d j S )NrD   r[   r8   cookiesr8   r;   r<   q      
 z+QDanceIE._real_initialize.<locals>.<lambda>c                      r`   )NrC   ra   r8   rb   r8   r;   r<   r   rd   )_get_cookiesr
   _refresh_token_access_tokenraise_login_requiredrV   r8   rb   r;   _real_initializeo   s   
zQDanceIE._real_initializec                    sX   t  fddp	dtt d kr' jstd jd jidd    d	 jiS )
Nc                      s   t  jd S )Nexp)r   rg   r8   ri   r8   r;   r<   w   s    z$QDanceIE._get_auth.<locals>.<lambda>r   x   zLCannot refresh access token, login with yt-dlp or refresh cookies in browserrA   zRefreshing access token)r"   Authorization)r
   inttimerf   r   r\   rj   rg   ri   r8   ri   r;   	_get_authv   s   $
zQDanceIE._get_authc           
         sX    |} ||} j||dd} fdd}t|dtjhfdtjhfdthfdthfd	thtfd
d|hfddd hfddthfddtjhfddt	hfddtjhfddt	hfddthfd} j
d| d|  dd}t|ddthf}|st|ddkrtdd d!|r j||d"d d#ng }	|	s jd$t|d%d! i |||	d&S )'N)r>   r   r>   )traversec                    s$   t | pd}  j| dk| dkddS )Nr         T)needs_premiumneeds_subscription
needs_auth)r   _availability)levelri   r8   r;   extract_availability   s   z4QDanceIE._real_extract.<locals>.extract_availabilityr   r   slugr   durationInSecondssubscriptionrx   typec                 S   s   |   dkS )Nlive)lowerr9   r8   r8   r;   r<      s    z(QDanceIE._real_extract.<locals>.<lambda>acts.eventr   eventEditionpubnubchannelName)r   r   r   r   r   r   r*   artistr   r   r   r   r,   z8https://dc9h6qmsoymbq.cloudfront.net/api/content/videos/z/urli  )r=   r?   r>   r#   )rE   rF   unauthorizedz1Your account does not have access to this contentTrK   F)fatalr~   zNo active streams foundr*   )r   formats)	_match_id_download_webpage_search_nuxt_datar	   rQ   stripr   r   filterr   rM   rp   r   _extract_m3u8_formatsraise_no_formatsboolrR   )
rV   r#   video_idwebpager>   ry   infostreamm3u8_urlr   r8   ri   r;   _real_extract   sP   










zQDanceIE._real_extract)r0   )__name__
__module____qualname___NETRC_MACHINE
_VALID_URL_TESTSrg   rf   r\   r_   rj   rp   r   r8   r8   r8   r;   r      s    <

r   )rN   ro   commonr   utilsr   r   r   r   r	   r
   r   r   r8   r8   r8   r;   <module>   s
    $