U
    g                     @   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-]+)Zvodz1https://www.q-dance.com/network/library/146542138Z	146542138Z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 2022Z31840632zDefqon.1Z31840378zZhttps://images.q-dance.network/1674829540-20220624171509-220624171509_delio_dn201093-2.jpgZpremium_onlyi%  )idexttitle
display_iddescriptionseason	season_idseries	series_id	thumbnailavailabilitydurationZskip_downloadZm3u8)noteurl	info_dictparamsZ
livestreamz.https://www.q-dance.com/network/live/149170353Z	149170353z!re:^Defqon\.1 2023 - Friday - REDzdefqon-1-2023-friday-redz$md5:3c73fbbd4044e578e696adfc64019163zDefqon.1 Weekend Festival 2023Z	141735599z=https://images.q-dance.network/1686849069-area-thumbs_red.pngZsubscriber_onlyis_livezqdancenetwork.video_149170353)r   r   r   r   r   r   r   r   r   r   r   Zlive_status
channel_idzCompleted livestream)r   r   r   skipzvod with alphanumeric idz>https://www.q-dance.com/network/library/WhDleSIWSfeT3Q9ObBKBeAZ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   Z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sdt|ddthf}d|krtd| dd|krdnd}t|dd|	 D ]\}}| 
d|| qd 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-typeZbrandoriginZreferer),:)
separatorsc                 S   s   dS )NT xr'   r'   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/qdance.py<lambda>Z       z*QDanceIE._call_login_api.<locals>.<lambda>)headersdataexpected_statusr.   ZaccessTokenrefreshTokenZidToken)_id-t-accounts-token_id-t-accounts-refreshz_id-t-accounts-id-tokenr1   z: error)codemessageZ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   itemsZ_set_cookie)	selfr.   r   logintokensr3   msgnamevaluer'   r'   r*   _call_login_apiR   s2      	

zQDanceIE._call_login_apic                 C   s   |  ||d d S )N)r7   password)rH   )rB   usernamerI   r'   r'   r*   _perform_loginl   s    zQDanceIE._perform_loginc                    s@   |  d t fdd| _t fdd| _| js<|   d S )Nr"   c                      s
    d j S )Nr2   rG   r'   cookiesr'   r*   r+   q   r,   z+QDanceIE._real_initialize.<locals>.<lambda>c                      s
    d j S )Nr1   rL   r'   rM   r'   r*   r+   r   r,   )Z_get_cookiesr
   _refresh_token_access_tokenZraise_login_requiredrB   r'   rM   r*   _real_initializeo   s
    
zQDanceIE._real_initializec                    sX   t  fddpdtt d krN js2td jd jidd    d	 jiS )
Nc                      s   t  jd S )Nexp)r   rP   r'   rQ   r'   r*   r+   w   r,   z$QDanceIE._get_auth.<locals>.<lambda>r   x   zLCannot refresh access token, login with yt-dlp or refresh cookies in browserr0   zRefreshing access token)r   Authorization)r
   inttimerO   r   rH   rR   rP   rQ   r'   rQ   r*   	_get_authv   s    $zQDanceIE._get_authc           
         sb    |} ||} 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d
d h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}|st|ddkrtd d!d"|r2 j||d#d!d$ng }	|	sT jd%t|d&d" |||	d'S )(N)r.   r   r.   )Ztraversec                    s$   t | p
d}  j| dk| dkddS )Nr         T)Zneeds_premiumZneeds_subscriptionZ
needs_auth)r   Z_availability)levelrQ   r'   r*   extract_availability   s      z4QDanceIE._real_extract.<locals>.extract_availabilityr   r   Zslugr   ZdurationInSecondsc                 S   s   | pd S )Nr'   r(   r'   r'   r*   r+      r,   z(QDanceIE._real_extract.<locals>.<lambda>Zsubscriptionr[   typec                 S   s   |   dkS )Nlive)lowerr(   r'   r'   r*   r+      r,   Zacts.eventr   ZeventEditionZpubnubZchannelName)r   r   r   r   r   r   r   Zartistr   r   r   r   r   z8https://dc9h6qmsoymbq.cloudfront.net/api/content/videos/z/urli  )r-   r/   r.   r   )r3   r4   unauthorizedz1Your account does not have access to this contentTr8   F)fatalr^   zNo active streams foundr   )r   formats)Z	_match_idZ_download_webpageZ_search_nuxt_datar	   r>   stripr   r   r   r:   rX   r   Z_extract_m3u8_formatsZraise_no_formatsboolr?   )
rB   r   Zvideo_idZwebpager.   r\   infostreamZm3u8_urlrc   r'   rQ   r*   _real_extract   sV    








     zQDanceIE._real_extract)r!   )__name__
__module____qualname__Z_NETRC_MACHINEZ
_VALID_URLZ_TESTSrP   rO   rH   rK   rR   rX   rh   r'   r'   r'   r*   r      s   <

r   )r;   rW   commonr   utilsr   r   r   r   r	   r
   r   r   r'   r'   r'   r*   <module>   s   $