U
    g*                     @   s\   d dl mZ ddlmZmZmZmZmZ G dd deZG dd deZ	G dd	 d	eZ
d
S )   )InfoExtractor   )float_or_noneparse_resolutiontraverse_objurlencode_postdatavariadicc                   @   s8   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dS )TubeTuGrazBaseIEZ
tubetugrazz*https://tube.tugraz.at/search/episode.json)ZpresentationZ	presenterc                 C   s   | j dd dddd}|sd S | j|jd dd|jiddtd	d
||dd}|sRd S |\}}|jdkrhd S | jd|dd ds| d d S | j |jd dd|jiddtd	d
|  dd}|r|jdkrd S | d d S )NzHhttps://tube.tugraz.at/Shibboleth.sso/Login?target=/paella/ui/index.htmlFzdownloading login pagezunable to fetch login pagefatalnoteerrnoteZrefererz
logging inzunable to log inde )lang_eventId_proceedZ
j_usernameZ
j_password)r   headersr   r   dataz+https://tube.tugraz.at/paella/ui/index.htmlz3<p\b[^>]*>(Bitte geben Sie einen OTP-Wert ein:)</p>z
TFA promptdefaultz#unable to login: incorrect passwordzlogging in with TFAzunable to log in with TFA)r   r   Zj_tokenNumberz#unable to login: incorrect TFA code)Z_request_webpageZ_download_webpage_handleurlr   Z_html_search_regexZreport_warningZ_get_tfa_info)selfusernamepasswordZurlhresponsecontent r   ?/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/tubetugraz.py_perform_login   sh           	
  
    zTubeTuGrazBaseIE._perform_loginc              	   C   s~   | d}t| t|d|}t|dd}t|d}dtt|ddd	d
}|||pZd t|dd|t|dd|ov||dS )Nid)mediapackageZmediatrack)r    titleZdcTitle)r    Zseriestitlez, )r    ZcreatorscreatorZ	dcCreatorr   r   )r    durationZdcExtent)r    seriesZ
dcIsPartOf)r   r"   r#   r$   r%   	series_idepisodeformats)getlist_extract_formatsr   joinr   )r   episode_infovideo_idr(   r"   Zseries_titler#   r   r   r   _extract_episode;   s,    
 
   


z!TubeTuGrazBaseIE._extract_episodec                 C   s.   |D ]$}||d< | | jd sd|d< q|S )NZformat_note    Z
preference)
startswith_FORMAT_TYPES)r   r(   fmt_typefr   r   r   _set_format_typeO   s
    
z!TubeTuGrazBaseIE._set_format_typec              
   c   s  d\}}|pg D ]}t |dd}|d kr*q|dp6d}|dpDd }|dkr|tt |dd	tt |d
d	t |ddtt |dg}	nX|dkrd| j||ddd| dd }}	n,|dkrd| j||dd| dd }}	nq| |	|E d H  q| jD ]}|sP| jd| d| d|ddd| dddp<g }
| |
|E d H  |s| jd| d| d|dd| ddd}| ||E d H  qd S )N)FF)tagsr   r   typeunknown	transporthttps)audiobitratei  )videor=   )r>   Z	framerate)r   ZabrZvbrZfps)r>   
resolutionZhlsTmp4Fzdownloading z HLS manifest)r   r   Zdashz DASH manifestz=https://wowza.tugraz.at/matterhorn_engage/smil:engage-player__z.smil/playlist.m3u8zDownloading r
   z!.smil/manifest_mpm4sav_mvlist.mpd)	r   r)   lowerr   r   Z_extract_m3u8_formatsZ_extract_mpd_formatsr6   r3   )r   format_listr.   Zhas_hlsZhas_dashformat_infor   r4   r:   r(   Zhls_formatsZdash_formatsr   r   r   r+   V   sl        
   

   
   
 z!TubeTuGrazBaseIE._extract_formatsN)
__name__
__module____qualname__Z_NETRC_MACHINE_API_EPISODEr3   r   r/   r6   r+   r   r   r   r   r	      s   *r	   c                   @   sR   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gdgZdd ZdS )TubeTuGrazIEztube.tugraz.atz(?x)
        https?://tube\.tugraz\.at/paella/ui/watch.html\?id=
        (?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})
    zShttps://tube.tugraz.at/paella/ui/watch.html?id=f2634392-e40e-4ac7-9ddc-47764aa23d40Z a23a3d5c9aaca2b84932fdba66e17145z$f2634392-e40e-4ac7-9ddc-47764aa23d40r@   z#6 (23.11.2017)u<   [INB03001UF] Einführung in die strukturierte ProgrammierungzSafran CiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34)r   extr"   r'   r%   r#   r$   r&   )r   md5	info_dictzShttps://tube.tugraz.at/paella/ui/watch.html?id=2df6d787-e56a-428d-8ef4-d57f07eef238Z de0d854a56bf7318d2b693fe1adb89a5z$2df6d787-e56a-428d-8ef4-d57f07eef238z6TubeTuGraz video #2df6d787-e56a-428d-8ef4-d57f07eef238)r   r"   rJ   z"Extractor failed to obtain "title")r   rK   rL   Zexpected_warningsc                 C   s@   |  |}| j| j||dddd}t|dd|id}| |S )Nr   )r   limitzDownloading episode metadataqueryr   )search-resultsresultr   r   )	_match_id_download_jsonrH   r   r/   )r   r   r.   Zepisode_datar-   r   r   r   _real_extract   s    
   zTubeTuGrazIE._real_extractN)rE   rF   rG   ZIE_DESC
_VALID_URL_TESTSrT   r   r   r   r   rI      s0   rI   c                   @   s   e Zd ZdZ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idddddddd
ddidddddddd
ddigddgZdd ZdS )TubeTuGrazSeriesIEz(?x)
        https?://tube\.tugraz\.at/paella/ui/browse\.html\?series=
        (?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})
    zXhttps://tube.tugraz.at/paella/ui/browse.html?series=0e6351b7-c372-491e-8a49-2c9b7e21c5a6z$0e6351b7-c372-491e-8a49-2c9b7e21c5a6z[209351] Strassenwesen)r   r"   rL   z$ee17ce5d-34e2-48b7-a76a-fed148614e11r@   z#4 Detailprojektz	Neuhold Ri}] )r   r&   rJ   r"   r'   r%   r#   r$   z$87350498-799a-44d3-863f-d1518a98b114z#3 Generelles ProjektiR z$778599ea-489e-4189-9e05-3b4888e19bcdz#2 VorprojektiT z$75e4c71c-d99d-4e56-b0e6-4f2bcdf11f29z#1 VariantenstudiumiR    )r   r   rL   ZplaylistZplaylist_mincountc              
   C   sd   |  |}| j| j|d|idd}| jd|ddd|dd	d
d}| t| j|d d |t|dS )NZsidzDownloading episode listrN   z)https://tube.tugraz.at/series/series.jsonFzdownloading series metadataz"failed to download series metadatar   ZTITLE)ZseriesIdcountsort)r   r   r   rO   rP   rQ   )Zcatalogsr0   zhttp://purl.org/dc/terms/r"   r0   value)rR   rS   rH   Zplaylist_resultmapr/   r   )r   r   Zplaylist_idZepisodes_dataZseries_datar   r   r   rT      s.    
      	 z TubeTuGrazSeriesIE._real_extractN)rE   rF   rG   rU   rV   rT   r   r   r   r   rW      sl   2<rW   N)commonr   utilsr   r   r   r   r   r	   rI   rW   r   r   r   r   <module>   s   	|*