Ë
    š„j‡+  ã                   ón   — d dl mZ ddlmZmZmZmZmZ  G d„ de«      Z G d„ de«      Z	 G d„ d	e«      Z
y
)é   )ÚInfoExtractoré   )Úfloat_or_noneÚparse_resolutionÚtraverse_objÚurlencode_postdataÚvariadicc                   ó0   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	y)	ÚTubeTuGrazBaseIEÚ
tubetugrazz*https://tube.tugraz.at/search/episode.json)ÚpresentationÚ	presenterc                 ó  — | j                  dd ddd¬«      }|sy | j                  |j                  d dd|j                  iddt        d	d
||dœ«      ¬«      }|sy |\  }}|j                  dk(  ry | j	                  d|dd ¬«      s| j                  d«       y | j                  |j                  d dd|j                  iddt        d	d
| j                  «       dœ«      ¬«      }|r|j                  dk(  ry | j                  d«       y )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Úcontents         úR/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/tubetugraz.pyÚ_perform_loginzTubeTuGrazBaseIE._perform_login   s=  € Ø×$Ñ$ØVØ˜Ð$<ÐFbð %ó dˆñ Øà×0Ñ0Ø�H‰H�d %°)¸T¿X¹XÐ1FØÐ'9Ü#ØØ$&Ø&Ø&ñ	%ó ð 1ó ˆñ Øà ‰ˆ�Ø�8‰8ÐDÒDØà×&Ñ&ØFØ˜¨tð 'ô 5ð ×ÑÐ EÔFØà×$Ñ$Ø�H‰H�d %°)¸T¿X¹XÐ1FØ&Ð0KÜ#ØØ$&Ø!%×!3Ñ!3Ó!5ñ%ó ð %ó ˆñ �t—x‘xÐ#PÒPØà×ÑÐAÕBó    c           
      ó@  — |j                  d«      }t        | j                  t        |d«      |«      «      }t        |dd«      }t        |d«      }dj	                  t        t        |ddd	¬
«      «      «      }|||xs d t        |dd«      |t        |dd«      |xr ||dœS )NÚid)ÚmediapackageÚmediaÚtrack)r1   ÚtitleÚdcTitle)r1   Úseriestitlez, )r1   ÚcreatorsÚcreatorÚ	dcCreatorr   r   )r1   ÚdurationÚdcExtent)r1   ÚseriesÚ
dcIsPartOf)r0   r4   r8   r:   r<   Ú	series_idÚepisodeÚformats)ÚgetÚlistÚ_extract_formatsr   Újoinr	   )r&   Úepisode_infoÚvideo_idr@   r4   Úseries_titler8   s          r,   Ú_extract_episodez!TubeTuGrazBaseIE._extract_episode;   sÃ   € Ø×#Ñ# DÓ)ˆÜ�t×,Ñ,Ü˜Ð'IÓJÈHóVó Wˆô ˜\Ð+DÀiÓPˆÜ# LÐ2QÓRˆØ—)‘)œH¤\ØÐAÀ;ÐXZô&\ó ]ó ^ˆð ØØ’ $Ü$ \Ð3OÐQ[Ó\Ø"Ü% lÐ4NÐP\Ó]Ø#Ò-¨Øñ	
ð 		
r.   c                 óf   — |D ]+  }||d<   |j                  | j                  d   «      rŒ'd|d<   Œ- |S )NÚformat_noteé    éþÿÿÿÚ
preference)Ú
startswithÚ_FORMAT_TYPES)r&   r@   Úfmt_typeÚfs       r,   Ú_set_format_typez!TubeTuGrazBaseIE._set_format_typeO   sD   € Øò 	%ˆAØ'ˆAˆmÑØ×&Ñ& t×'9Ñ'9¸!Ñ'<Õ=Ø"$��,’ð	%ð ˆr.   c              #   óP  K  — d\  }}|xs g D ]ý  }t        |dd«      }|€Œ|j                  d«      xs d}|j                  d«      xs dj                  «       }|dk(  rP|t        t        |d«      d	«      t        t        |d
«      d	«      t        |d«      dœt	        t        |d«      «      ¥g}	nD|dk(  rd| j                  ||ddd|› d�¬«      }	}n"|dk(  rd| j                  ||dd|› d�¬«      }	}nŒä| j                  |	|«      E d {  –—†  Œÿ | j                  D ]‚  }|s@| j                  d|› d|› d�|ddd|› d�d¬«      xs g }
| j                  |
|«      E d {  –—†  |rŒH| j                  d|› d|› d�|dd|› d�d¬«      }| j                  ||«      E d {  –—†  Œ„ y 7 Œ˜7 ŒG7 Œ­w)N)FF)Útagsr"   r"   ÚtypeÚunknownÚ	transportÚhttps)ÚaudioÚbitrateiè  )ÚvideorZ   )r[   Ú	framerate)r"   ÚabrÚvbrÚfps)r[   Ú
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   rA   Úlowerr   r   Ú_extract_m3u8_formatsÚ_extract_mpd_formatsrR   rO   )r&   Úformat_listrF   Úhas_hlsÚhas_dashÚformat_infor"   rP   rW   r@   Úhls_formatsÚdash_formatss               r,   rC   z!TubeTuGrazBaseIE._extract_formatsV   sO  è ø€ Ø(Ñˆ�à&Ò,¨"ò 	@ˆKÜ˜{¨O¸UÓCˆCØˆ{Øà"—‘ vÓ.Ò;°)ˆHØ$Ÿ™¨Ó5Ò@¸×GÑGÓIˆIà˜GÒ#àÜ(¬°kÐCWÓ)XÐZ^Ó_Ü(¬°kÐCWÓ)XÐZ^Ó_Ü'¨Ð5KÓLñ	ô
 '¤|°KÐAXÓ'YÓZðð ‘ð ˜eÒ#Ø#'¨×)CÑ)CØ˜ 5°¸lÈ8È*ÐTaÐ<bð *Dó *d˜‘à˜fÒ$Ø$(¨$×*CÑ*CØ˜¨°|ÀHÀ:È^Ð5\ð +Dó +^˜'‘ð à×,Ñ,¨W°hÓ?×?Ñ?ð;	@ð@ ×*Ñ*ò 	IˆHÙØ"×8Ñ8ØSÐT\ÐS]Ð]^Ð_gÐ^hÐh{Ð|Ø˜e¨5¸ÀhÀZÈ}Ð7]Ðglð 9ó nò tàqsð ð  ×0Ñ0°¸hÓG×GÐGâØ#×8Ñ8ØSÐT\ÐS]Ð]^Ð_gÐ^hð  iJð  KØ E°,¸x¸jÈÐ0WÐafð  9ó  h�ð  ×0Ñ0°¸xÓH×HÑHñ	Ið @øð Høð Iús=   ‚DF&ÄF ÄAF&ÅF"ÅF&Å"6F&ÆF$ÆF&Æ"F&Æ$F&N)
Ú__name__Ú
__module__Ú__qualname__Ú_NETRC_MACHINEÚ_API_EPISODErO   r-   rH   rR   rC   © r.   r,   r   r      s(   „ Ø!€Nà?€LØ1€Mò(CòT
ò(ó.Ir.   r   c                   óZ   — 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„ Zy)Ú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-47764aa23d40rb   z#6 (23.11.2017)u<   [INB03001UF] EinfÃ¼hrung in die strukturierte ProgrammierungiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34zSafran C)r0   Úextr4   r?   r<   r:   r>   r7   )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)r0   r4   rw   z"Extractor failed to obtain "title")r"   rx   ry   Úexpected_warningszHhttps://tube.tugraz.at/portal/watch/ab28ec60-8cbe-4f1a-9b96-a95add56c612T)r"   Úonly_matchingc                 óª   — | j                  |«      }| j                  | j                  ||ddœd¬«      }t        |dd|i¬«      }| j	                  |«      S )Nr   )r0   ÚlimitzDownloading episode metadata©Úqueryr   )úsearch-resultsÚresultr0   r   )Ú	_match_idÚ_download_jsonrr   r   rH   )r&   r"   rF   Úepisode_datarE   s        r,   Ú_real_extractzTubeTuGrazIE._real_extract®   sd   € Ø—>‘> #Ó&ˆØ×*Ñ*Ø×Ñ˜x°hÈÑ/KÐRpð +ó rˆô $ LÐ2NÐY]Ð_gÐXhÔiˆØ×$Ñ$ \Ó2Ð2r.   N)rn   ro   rp   ÚIE_DESCÚ
_VALID_URLÚ_TESTSr†   rs   r.   r,   ru   ru   ‡   sz   „ Ø€Gð€Jð iØ5à<ØØ*Ø,ØXØ#ØCØ'˜Lñ	ñ	
ð iØ5à<ØQØñð
 #GÐ!Gñ	
ð ^Ø!ñ
ð/€Fó<3r.   ru   c                   óŽ   — 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„ Zy)Ú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)r0   r4   ry   z$ee17ce5d-34e2-48b7-a76a-fed148614e11rb   z#4 Detailprojektz	Neuhold Ri°}] )r0   r>   rw   r4   r?   r<   r8   r:   z$87350498-799a-44d3-863f-d1518a98b114z#3 Generelles ProjektiÖR z$778599ea-489e-4189-9e05-3b4888e19bcdz#2 VorprojektiÄïT z$75e4c71c-d99d-4e56-b0e6-4f2bcdf11f29z#1 Variantenstudiumi¨´R é   )r"   r0   ry   ÚplaylistÚplaylist_mincountc                 ó
  — | j                  |«      }| j                  | j                  |d|id¬«      }| j                  d|ddd|dd	d
œ¬«      }| j                  t	        | j
                  |d   d   «      |t        |d«      «      S )NÚsidzDownloading episode listr   z)https://tube.tugraz.at/series/series.jsonFzdownloading series metadataz"failed to download series metadatar   ÚTITLE)ÚseriesIdÚcountÚsort)r   r   r   r€   r�   r‚   )ÚcatalogsrK   zhttp://purl.org/dc/terms/r4   rK   Úvalue)rƒ   r„   rr   Úplaylist_resultÚmaprH   r   )r&   r"   Úplaylist_idÚepisodes_dataÚseries_datas        r,   r†   z TubeTuGrazSeriesIE._real_extractø   s«   € Ø—n‘n SÓ)ˆØ×+Ñ+Ø×Ñ˜{°5¸+Ð2FÐMgð ,ó iˆà×)Ñ)Ø7¸ÈEØ.Ð8\à'ØØñð *ó ˆð ×#Ñ#Ü�×%Ñ% }Ð5EÑ'FÀxÑ'PÓQÐS^Ü˜Ð&gÓhójð 	jr.   N)rn   ro   rp   rˆ   r‰   r†   rs   r.   r,   r‹   r‹   ·   sÙ   „ ð€Jð
 jØ4à8Ø-ñ
ð Ø@Ø!GØ Ø/Ø1Ø6Ø*Ø 'ñ	ðð Ø@Ø!GØ Ø4Ø6Ø6Ø*Ø 'ñ	ðð Ø@Ø!GØ Ø,Ø.Ø6Ø*Ø 'ñ	ðð Ø@Ø!GØ Ø2Ø4Ø6Ø*Ø 'ñ	ððK1
ðd ñs:ð :€Fóxjr.   r‹   N)Úcommonr   Úutilsr   r   r   r   r	   r   ru   r‹   rs   r.   r,   ú<module>rž      sB   ðÝ !÷õ ôyI�}ô yIôx-3Ð#ô -3ô`PjÐ)õ Pjr.   