o
    i+                     @   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 )TubeTuGrazBaseIE
tubetugrazz*https://tube.tugraz.at/search/episode.json)presentation	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}|s)d S |\}}|jdkr4d S | jd|dd dsD| d d S | j |jd dd|jiddtd	d
|  dd}|rc|jdkred 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errnoterefererz
logging inzunable to log inde )lang_eventId_proceed
j_username
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   j_tokenNumberz#unable to login: incorrect TFA code)_request_webpage_download_webpage_handleurlr   _html_search_regexreport_warning_get_tfa_info)selfusernamepasswordurlhresponsecontent r)   O/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/tubetugraz.py_perform_login   sN   	

zTubeTuGrazBaseIE._perform_loginc              	   C   s~   | d}t| t|d|}t|dd}t|d}dtt|ddd	d
}|||p-d t|dd|t|dd|o;||dS )Nid)mediapackagemediatrack)r-   titledcTitle)r-   seriestitlez, )r-   creatorscreator	dcCreatorr   r   )r-   durationdcExtent)r-   series
dcIsPartOf)r,   r0   r4   r6   r8   	series_idepisodeformats)getlist_extract_formatsr   joinr   )r#   episode_infovideo_idr<   r0   series_titler4   r)   r)   r*   _extract_episode;   s$   





z!TubeTuGrazBaseIE._extract_episodec                 C   s.   |D ]}||d< | | jd sd|d< q|S )Nformat_note    
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 ]u}t |dd}|d u rq	|dpd}|dp#d }|dkrI|tt |dd	tt |d
d	t |ddtt |dg}	n,|dkr_d| j||ddd| dd}}	n|dkrtd| j||dd| dd}}	nq	| |	|E d H  q	| jD ]E}|s| jd| d| d|ddd| dddpg }
| |
|E d H  |s| jd| d| d|dd| ddd}| ||E d H  qd S )N)FF)tagsr   r   typeunknown	transporthttps)audiobitratei  )videorT   )rU   	framerate)r   abrvbrfps)rU   
resolutionhlsTmp4Fzdownloading z HLS manifest)r   r   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   _extract_m3u8_formats_extract_mpd_formatsrM   rJ   )r#   format_listrB   has_hlshas_dashformat_infor   rK   rQ   r<   hls_formatsdash_formatsr)   r)   r*   r?   V   sV   
z!TubeTuGrazBaseIE._extract_formatsN)
__name__
__module____qualname___NETRC_MACHINE_API_EPISODErJ   r+   rD   rM   r?   r)   r)   r)   r*   r	      s    *r	   c                   @   s\   e Zd ZdZdZdddddddd	d
dgdddddddddgddddgZdd ZdS )TubeTuGrazIEztube.tugraz.atz(?x)
        https?://tube\.tugraz\.at/(?:
            paella/ui/watch\.html\?(?:[^#]*&)?id=|
            portal/watch/
        )(?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-47764aa23d40 a23a3d5c9aaca2b84932fdba66e17145z$f2634392-e40e-4ac7-9ddc-47764aa23d40r\   z#6 (23.11.2017)u<   [INB03001UF] Einführung in die strukturierte ProgrammierungiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34zSafran C)r,   extr0   r;   r8   r6   r:   r3   )r   md5	info_dictzShttps://tube.tugraz.at/paella/ui/watch.html?id=2df6d787-e56a-428d-8ef4-d57f07eef238 de0d854a56bf7318d2b693fe1adb89a5z$2df6d787-e56a-428d-8ef4-d57f07eef238z6TubeTuGraz video #2df6d787-e56a-428d-8ef4-d57f07eef238)r,   r0   ro   z"Extractor failed to obtain "title")r   rp   rq   expected_warningszHhttps://tube.tugraz.at/portal/watch/ab28ec60-8cbe-4f1a-9b96-a95add56c612T)r   only_matchingc                 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_jsonrl   r   rD   )r#   r   rB   episode_datarA   r)   r)   r*   _real_extract   s   

zTubeTuGrazIE._real_extractN)rh   ri   rj   IE_DESC
_VALID_URL_TESTSr}   r)   r)   r)   r*   rm      s8    rm   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,   r0   rq   z$ee17ce5d-34e2-48b7-a76a-fed148614e11r\   z#4 Detailprojektz	Neuhold Ri}] )r,   r:   ro   r0   r;   r8   r4   r6   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,   rq   playlist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 )NsidzDownloading episode listrv   z)https://tube.tugraz.at/series/series.jsonFzdownloading series metadataz"failed to download series metadatar   TITLE)seriesIdcountsort)r   r   r   rw   rx   ry   )catalogsrF   zhttp://purl.org/dc/terms/r0   rF   value)rz   r{   rl   playlist_resultmaprD   r   )r#   r   playlist_idepisodes_dataseries_datar)   r)   r*   r}      s    
	z TubeTuGrazSeriesIE._real_extractN)rh   ri   rj   r   r   r}   r)   r)   r)   r*   r      sn    2<r   N)commonr   utilsr   r   r   r   r   r	   rm   r   r)   r)   r)   r*   <module>   s
    	|0