U
    gP"                     @   sH   d dl Z ddlmZ ddl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parse_qstraverse_objupdate_url_queryurlencode_postdatac                   @   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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'd(d)ddddd'd	d$idd*d+d,d-d.ddddd,d	d$igd/gZd0Zd1Zd2Zd3Z	d4d5 Z
d6d7 Zd8d9 Zd:d; Zd3S )<PlaySuisseIEZ
playsuissezYhttps?://(?:www\.)?playsuisse\.ch/(?:watch|detail)/(?:[^#]*[?&]episodeId=)?(?P<id>[0-9]+)z(https://www.playsuisse.ch/watch/763211/0T)urlZonly_matchingz7https://www.playsuisse.ch/watch/763182?episodeId=763211Z 82df2a470b2dfa60c2d33772a8a60cf8Z763211mp4ZKnochenz$md5:8ea7a8076ba000cd9e8bc132fd0afdd8i  Z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/watch/808675Z 818b94c1d2d7c4beef953f12cb8f3e75Z808675u   Der Läuferz$md5:9f61265c7e6dcc3e046137a792b275fdi  )r   r   r   r   r   r   z(https://www.playsuisse.ch/detail/1115687z$md5:e4a2ae29a8895823045b5c3145a02aa3Z1115687zThey all came out to Montreux)r   r   r   r   r   z$md5:f2462744834b959a31adc6292380cda2il  zFolge 1Z1112663)r   r   r   r   r   r   r   r   r   r   r   z$md5:9dfd308699fe850d3bce12dc1bad9b27iw  zFolge 2r   Z1112661z$md5:14a93a3356b2492a8f786ab2227ef602i  zFolge 3   Z1112664)r   r   playlistai  
        query AssetWatch($assetId: ID!) {
            assetV2(id: $assetId) {
                ...Asset
                episodes {
                    ...Asset
                }
            }
        }
        fragment Asset on AssetV2 {
            id
            name
            description
            duration
            episodeNumber
            seasonNumber
            seriesName
            medias {
                type
                url
            }
            thumbnail16x9 {
                ...ImageDetails
            }
            thumbnail2x3 {
                ...ImageDetails
            }
            thumbnail16x9WithTitle {
                ...ImageDetails
            }
            thumbnail2x3WithTitle {
                ...ImageDetails
            }
        }
        fragment ImageDetails on AssetImage {
            id
            url
        }z3https://login.srgssr.ch/srgssrlogin.onmicrosoft.comZB2C_1A__SignInV2Nc           	      C   s   | j dd dddddd}| d|d	d }|d
 }|d | jd}t| j| j d| j dd d|d|itd||ddddthf}|dkrtddd| j	| j d| j dd dd|d|ddid}tt
|jd | _| jstd!d S )"Nz'https://www.playsuisse.ch/api/sso/loginzDownloading login pagexdezhttps://www.playsuisse.ch/)r   localeZredirectUrl)Znotequeryzvar\s+SETTINGS\s*=settingsZcsrfZtransId)Ztxp/z/SelfAssertedz
Logging inzX-CSRF-TOKENZRESPONSE)Zrequest_typeZ
signInNamepasswordi  )r    headersdataZexpected_statusstatuszInvalid username or passwordT)expectedz&/api/CombinedSigninAndSignup/confirmedzDownloading ID tokenfalse)Z
rememberMe
csrf_tokenZdiags )r    )id_tokenr   zLogin failed)Z_download_webpageZ_search_json_LOGIN_PATHr   _download_json_LOGIN_BASE_URLr
   r   r   Z_request_webpager   r   	_ID_TOKEN)	selfusernamer$   Z
login_pager!   r*   r    r'   Zurlh r3   ?/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/playsuisse.py_perform_login   sR      
      	zPlaySuisseIE._perform_loginc              	   C   s<   | j d|td| jd|id dddd}|d	 d
 S )Nz%https://www.playsuisse.ch/api/graphqlZ
AssetWatchZassetId)ZoperationNamer    	variableszapplication/jsonr   )zContent-Typer   )r&   r%   r&   ZassetV2)r.   jsondumps_GRAPHQL_QUERYencode)r1   media_idresponser3   r3   r4   _get_media_data   s     
	zPlaySuisseIE._get_media_datac                 C   sZ   | j s| jdd | |}| |}| |}|drV|dt| j|d d |S )Nr$   )methodZepisodesr   )_typeentries)r0   Zraise_login_requiredZ	_match_idr=   _extract_singlegetupdatemap)r1   r   r;   
media_datainfor3   r3   r4   _real_extract   s    



zPlaySuisseIE._real_extractc                 C   s   t |dd }g i  }}t |dg dD ]b}|dr&|ddkrDq&| jt|d d| ji|d	 d
ddd\}}|| | j||d q&|d	 |d|d|t|d|||dt|d|dr|dnd t|ddS )Nc                 S   s
   |  dS )Nr   )
startswith)k_r3   r3   r4   <lambda>       z.PlaySuisseIE._extract_single.<locals>.<lambda>Zmedias)defaultr   typeZHLSr,   r   r   F)Zm3u8_idfatal)targetnamer   r   Z
seriesNameZseasonNumberZepisodeNumber)r   r   r   
thumbnailsr   formats	subtitlesr   r   r   r   )r   rB   Z#_extract_m3u8_formats_and_subtitlesr	   r0   extendZ_merge_subtitlesr   )r1   rE   rR   rS   rT   Zmediafsubsr3   r3   r4   rA      s4    
   

zPlaySuisseIE._extract_single)__name__
__module____qualname__Z_NETRC_MACHINEZ
_VALID_URLZ_TESTSr9   r/   r-   r0   r5   r=   rG   rA   r3   r3   r3   r4   r      s   Z& r   )r7   commonr   utilsr   r   r   r   r	   r
   r   r3   r3   r3   r4   <module>   s    
