
    V|h,                     v    S SK r S SKr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  SSKJrJr   " S S\5      rg)	    N   )InfoExtractor   )ExtractorErrorint_or_nonejoin_nonemptyparse_qsupdate_url_queryurlencode_postdata)traverse_objunpackc                      \ 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.S.SSSS
SSS/S// SQ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/S0S1S2SSS"SS0S
S-.0S(S3S4S5S6S7SSS"SS5S
S-.0/S8./rS9rS:rS;r	S<r
S= rSBS> jrS? rS@ rSArg<)CPlaySuisseIE   
playsuissezYhttps?://(?:www\.)?playsuisse\.ch/(?:watch|detail)/(?:[^#]*[?&]episodeId=)?(?P<id>[0-9]+)z(https://www.playsuisse.ch/watch/763211/0T)urlonly_matchingz7https://www.playsuisse.ch/watch/763182?episodeId=763211 e20d1ede6872a03b41905ca1060a1ef2763211mp4Knochenz$md5:3bdd80e2ce20227c47aab1df2a79a519i  WilderzSeason 1r   z(re:https://playsuisse-img.akamaized.net/)idexttitledescriptiondurationseriesseasonseason_numberepisodeepisode_number	thumbnail)r   md5	info_dictz(https://www.playsuisse.ch/detail/2573198 1f115bb0a5191477b1a5771643a4283d2573198Azorz$md5:d41d8cd98f00b204e9800998ecf8427eFictionzAndreas Fontana)zFabrizio Rongioneu   Stéphanie CléauzGilles PrivatzAlexandre TrockizFrance; Argentinei  i]  )r   r   r   r   genrescreatorscastlocationrelease_yearr   r#   z(https://www.playsuisse.ch/detail/11156871115687zThey all came out to Montreuxz$md5:0fefd8c5b4468a0bb35e916887681520DocumentaryzOliver MurraySwitzerland)r   r   r   r   r*   r+   r-   r.   r%   z$md5:f2462744834b959a31adc6292380cda2il  zFolge 11112663)r   r   r!   r"   r   r   r    r   r#   r   r   z$md5:9dfd308699fe850d3bce12dc1bad9b27iw  zFolge 2r   1112661z$md5:14a93a3356b2492a8f786ab2227ef602i  zFolge 3   1112664)r   r%   playlista  
        query AssetWatch($assetId: ID!) {
            assetV2(id: $assetId) {
                ...Asset
                episodes {
                    ...Asset
                }
            }
        }
        fragment Asset on AssetV2 {
            id
            name
            description
            descriptionLong
            year
            contentTypes
            directors
            mainCast
            productionCountries
            duration
            episodeNumber
            seasonNumber
            seriesName
            medias {
                type
                url
            }
            thumbnail16x9 {
                ...ImageDetails
            }
            thumbnail2x3 {
                ...ImageDetails
            }
            thumbnail16x9WithTitle {
                ...ImageDetails
            }
            thumbnail2x3WithTitle {
                ...ImageDetails
            }
        }
        fragment ImageDetails on AssetImage {
            id
            url
        }z$1e33f1bf-8bf3-45e4-bbd9-c9ad934b5fcazhttps://account.srgssr.chNc                    [         R                  " 5       R                  [         R                  " 5       R                  -   [         R                  " 5       R                  -   n[        R                  " [
        R                  " UR                  5       5      R                  5       5      R                  5       R                  S5      n[        U R                  U R                   S3S SU R                  SSSUSSS	.S
9R                  5      S   S   n U R!                  U R                   S3S SSS0["        R$                  " SUSSUS.5      R                  5       S9S   S   S   n U R!                  U R                   S3S SSS0["        R$                  " UUSUS.5      R                  5       S9S   n[        U R                  U R                   S3S S [)        UUS   S   SUS!   US"   SS#S#S$.5      S%9R                  5      S   S   nU R!                  U R                   S&3S S'S(U R                  SUUS)S*.S+9S,   U l        U R*                  (       d  ['        S-5      eg ! [&         a    ['        SSS9ef = f! [&         a    ['        SSS9ef = f).N=z/authz-srv/authzzRequesting session IDzhttps://www.playsuisse.ch/authz#email profile openid offline_accesscodeS256login)	client_idredirect_uriscoperesponse_typecode_challengecode_challenge_method	view_type)query	requestIdr   z3/verification-srv/v2/authenticate/initiate/passwordzSubmitting usernamezcontent-typeapplication/jsonINITIAL_AUTHENTICATIONPASSWORDpassword)
usage_type
request_id	medium_idtype
identifier)headersdatarO   exchange_idzInvalid usernameT)expectedz7/verification-srv/v2/authenticate/authenticate/passwordzSubmitting password)rD   rP   rL   rH   zInvalid passwordz/login-srv/verification/loginz
Logging insub	status_id )rD   rP   verificationTyperR   rS   
rememberMelatlon)rO   z/proxy/tokenzDownloading token    authorization_code)r<   r=   r9   code_verifier
grant_type)rO   rC   id_tokenzLogin failed)uuiduuid4hexbase64urlsafe_b64encodehashlibsha256encodedigestdecoderstripr	   _request_webpage_LOGIN_BASE
_CLIENT_IDr   _download_jsonjsondumpsr   r   	_ID_TOKEN)	selfusernamerH   r[   r@   rJ   rP   
login_datarZ   s	            U/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/playsuisse.py_perform_loginPlaySuisseIE._perform_login   s   

((4::<+;+;;djjl>N>NN11NN=//1299;==CVXffSk 	 d33  0149P!__ @>!'"0)/$Y 4 	 s	  	! "#	$
	D--##$$WXZ^%@R/SZ^ZdZd":",!+&"*f [ 68 .  $% &34 5BCK
	D,,##$$[\^b%@R/SZ^ZdZd!+#.& (	f [
 68 -  $%J &d&;&;  =>l#')-8G$.!%('4"	% 	 '< '     ,, -t5Hs!__ @*!.2[ -   ~~ 00 K  	D !3dCC	D  	D !3dCC	Ds   AI "AI1 I.1Jc           
          U R                  SU[        R                  " SU R                  SU0S.5      R	                  5       SU=(       d    SS.S9nUS	   S
   $ )Nz%https://www.playsuisse.ch/api/graphql
AssetWatchassetId)operationNamerC   	variablesrE   de)zContent-Typelocale)rO   rN   rO   assetV2)rl   rm   rn   _GRAPHQL_QUERYre   )rp   media_idr|   responses       rs   _get_media_dataPlaySuisseIE._get_media_data   si    &&34::!-,,'2'  vx%76>TR ' T 	**rY   c                 V   U R                   (       d  U R                  SS9  U R                  U5      nU R                  U[	        [        U5      S5      5      nU R                  U5      nUR                  S5      (       a+  UR                  S[        U R                  US   5      S.5        U$ )NrH   )method)r|   r   episodesr6   )_typeentries)
ro   raise_login_required	_match_idr   r   r	   _extract_singlegetupdatemap)rp   r   r   
media_datainfos        rs   _real_extractPlaySuisseIE._real_extract   s    ~~%%Z%8>>#&))(L#P]4^_
##J/>>*%%KK#t33Z
5KL  rY   c                   ^ [        TS 5      n/ 0 pC[        TS/ S9 H  nUR                  S5      (       a  UR                  S5      S:w  a  M0  U R                  [        US   SU R                  05      TS   S	SS
S9u  pgUR                  U5        U R                  XtS9  M     UUUS.[        TS[        14S[        14S[        1[        4SS[        14SS[        14SS[        14SS[        1[        [        [        SS91[        4S[        1S 1[        14S[        14S[        14S[        14S[        1U4S j14S[        14S.5      E$ )Nc                 $    U R                  S5      $ )Nr#   )
startswith)k_s     rs   <lambda>.PlaySuisseIE._extract_single.<locals>.<lambda>  s    1<<;TrY   medias)defaultr   rL   HLSr]   r   r   F)m3u8_idfatal)target)
thumbnailsformats	subtitlesname)descriptionLongr   contentTypes.	directorsmainCastproductionCountriesz; )delimyearc                     U S S $ )N    )xs    rs   r   r     s
    1Ra5rY   r   
seriesNameseasonNumberc                    > TS   b  U $ S $ )NepisodeNumberr   )r   r   s    rs   r   r   !  s    :o;V;ba6lhl6lrY   r   )r   r   r   r*   r+   r,   r-   r.   r   r   r    r!   r"   )r   r   #_extract_m3u8_formats_and_subtitlesr
   ro   extend_merge_subtitlesstranyallr   r   filterr   )rp   r   r   r   r   mediafsubss    `      rs   r   PlaySuisseIE._extract_single  s   !*.TU
!*hCE99U##uyy'8E'A>> u
DNN/KL4 %e ? EGA NN1!!$!9 D %"
 :cUm 3% BSE3O)36(#u5#S3%02C#f]bfFgEhjpq!'#0AK= Q'+7'#/"0;-!@"SE,l+mn#2[M"B( 	
 	
rY   )ro   )N)__name__
__module____qualname____firstlineno___NETRC_MACHINE
_VALID_URL_TESTSr~   rk   rj   ro   rt   r   r   r   __static_attributes__r   rY   rs   r   r      s   !NmJ >!	
 M5"E "$!"$"#G		
& >5E$+./g/ $ G	
& >98E(/,-) $	 #I $(&'#(%&=!K&  #I $(&'#(%&=!K&  #I $(&'#(%&=!K& 9*8
QaFF+NX 8J-KI@1D
+ 
rY   r   )ra   rc   rm   r^   commonr   utilsr   r   r   r	   r
   r   utils.traversalr   r   r   r   rY   rs   <module>r      s1        !  3R
= R
rY   