
    V|h                     Z    S SK r S SKrSSKJr  SSKJrJrJrJrJ	r	J
r
Jr   " S S\5      rg)    N   )InfoExtractor   )ExtractorErrorint_or_nonejwt_decode_hs256str_or_nonetraverse_objtry_callurl_or_nonec                       \ rS rSrSrSrSSSSSS	S
SSSSSSSS.SS0S.SSSSSSSSSSSSSS S!S".S#S$.S%S&S'SS(S)S*SSSSS+SS,S-.SS0S.S.S/S0./rS1rS1rS8S2 jr	S3 r
S4 rS5 rS6 rS7rg1)9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_matchingNc                    U R                  SS USSSSS.[        R                  " USS9R                  5       S	 S
9n[	        USS[
        14S[
        14S[
        14S.45      nUR                  S5      (       dL  SR                  [	        USS[
        145      5      nSU;  a  [        SU S35      eSU;   a  SOSn[        USS9eUR                  5        H  u  pxU R                  SXx5        M     g )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                     g)NT xs    Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/qdance.py<lambda>*QDanceIE._call_login_api.<locals>.<lambda>Z   s    d    )headersdataexpected_statusrD   accessTokenrefreshTokenidToken)_id-t-accounts-token_id-t-accounts-refreshz_id-t-accounts-id-tokenrI   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)	selfrD   r%   logintokensrK   msgnamevalues	            r?   _call_login_apiQDanceIE._call_login_apiR   s   ##5tT 2!35	L
 JJt
;BBD* $ , ef%2SE$:'5u&=(1C5'9/
 &  zz011IIl57<ORUQV2WXYE!.$'9%%BCC4;tO0IdC t44!<<>KD^T9 *rB   c                 *    U R                  XS.5        g )N)rP   password)rb   )r\   usernamere   s      r?   _perform_loginQDanceIE._perform_loginl   s    xFGrB   c                    ^ U R                  S5      m[        U4S j5      U l        [        U4S j5      U l        U R                  (       d  U R	                  5         g g )Nr4   c                  "   > T S   R                   $ )NrJ   ra   cookiess   r?   r@   +QDanceIE._real_initialize.<locals>.<lambda>q   s    w7O/P/V/VrB   c                  "   > T S   R                   $ )NrI   rk   rl   s   r?   r@   rn   r   s    g6L.M.S.SrB   )_get_cookiesr   _refresh_token_access_tokenraise_login_required)r\   rm   s    @r?   _real_initializeQDanceIE._real_initializeo   sJ    ##$>?&'VW%&ST!!%%' "rB   c                 &  ^  [        U 4S j5      =(       d    S[        [        R                  " 5       S-
  5      ::  aH  T R                  (       d  [	        S5      eT R                  ST R                  0SS9  T R                  5         ST R                  0$ )	Nc                  4   > [        T R                  5      S   $ )Nexp)r   rr   r\   s   r?   r@   $QDanceIE._get_auth.<locals>.<lambda>w   s    -d.@.@A%HrB   r   x   zLCannot refresh access token, login with yt-dlp or refresh cookies in browserrG   zRefreshing access token)r%   Authorization)r   inttimerq   r   rb   rt   rr   ry   s   `r?   	_get_authQDanceIE._get_authv   s    HINQSVW[W`W`WbehWhSii&&$bd d  .$2E2E!FMf g!!#!3!344rB   c                   ^  T R                  U5      nT R                  X5      nT R                  X2SS9nU 4S jn[        US[        R
                  14S[        R
                  14S[        14S[        14S[        1[        4S	S
U14SS 14SS[        14SS[        R
                  14SS[        14SS[        R
                  14SS[        14SS[        14S.5      nT R                  SU S3UT R                  5       SS9n[        USS[        145      nU(       d  [        US5      S:X  a
  [        SSS9eU(       a  T R                  XS SS!9O/ n	U	(       d(  T R                  S"[        UR!                  S#5      5      S9  0 UEUU	S$.E$ )%N)rD   r   rD   )traversec                 Z   > [        U 5      =(       d    Sn TR                  U S:  U S:  SS9$ )Nr         T)needs_premiumneeds_subscription
needs_auth)r   _availability)levelr\   s    r?   extract_availability4QDanceIE._real_extract.<locals>.extract_availability   s<    &+!E%%${"Z^ & ` `rB   r   r   slugr    durationInSecondssubscriptionr   typec                 (    U R                  5       S:H  $ )Nlive)lowerr=   s    r?   r@   (QDanceIE._real_extract.<locals>.<lambda>   s    1779+>rB   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  )rC   rE   rD   r&   )rK   rL   unauthorizedz1Your account does not have access to this contentTrQ   F)fatalr   zNo active streams foundr-   )r   formats)	_match_id_download_webpage_search_nuxt_datar
   rW   stripr   r   filterr	   rS   r   r   _extract_m3u8_formatsraise_no_formatsboolrX   )
r\   r&   video_idwebpagerD   r   infostreamm3u8_urlr   s
   `         r?   _real_extractQDanceIE._real_extract   s   >>#&((7%%gBU%V	`
 D		{+)CII;7!C5/%}5,{mVD+W7K6LM!> ?@sSE*#))5!4+7%w<($>#]SE:#
   $$FxjPTUdnn. % E  (FGL1BC~U !T_cdd <D ,,e$ - 8IK 	!!";d488T]K^F_!`


 	
rB   )rr   rq   )z
Logging in)__name__
__module____qualname____firstlineno___NETRC_MACHINE
_VALID_URL_TESTSrr   rq   rb   rg   rt   r   r   __static_attributes__r<   rB   r?   r   r      s   N[JBXX6# #u*
 #F+#& ?94A6$ #X-$9
 '%( +O*RPa #6$*j
 #F+#& Po:Fx MN:4H(5+
rB   r   )rT   r~   commonr   utilsr   r   r   r	   r
   r   r   r   r<   rB   r?   <module>r      s+      !  [
} [
rB   