
    V|h*                     n    S SK Jr  SSKJrJrJrJrJr   " S S\5      r " S S\5      r	 " S S	\5      r
g
)   )InfoExtractor   )float_or_noneparse_resolutiontraverse_objurlencode_postdatavariadicc                   8    \ rS rSrSrSrSrS rS rS r	S r
S	rg
)TubeTuGrazBaseIE   
tubetugrazz*https://tube.tugraz.at/search/episode.json)presentation	presenterc                    U R                  SS SSSS9nU(       d  g U R                  UR                  S SSUR                  0SS[        S	S
UUS.5      S9nU(       d  g Uu  pSUR                  S:X  a  g U R	                  SUSS S9(       d  U R                  S5        g U R                  UR                  S SSUR                  0SS[        S	S
U R                  5       S.5      S9nU(       a  UR                  S:X  a  g U R                  S5        g )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         U/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/tubetugraz.py_perform_loginTubeTuGrazBaseIE._perform_login   s;   $$V$<Fb % d 00HHd%)TXX1F'9#$&&&	%  1   88DD&&Ft ' 5  EF$$HHd%)TXX1F&0K#$&!%!3!3!5%  %  txx#PPAB    c                 N   UR                  S5      n[        U R                  [        US5      U5      5      n[        USS5      n[        US5      nSR	                  [        [        USSS	S
95      5      nUUU=(       d    S [        USS5      U[        USS5      U=(       a    UUS.$ )Nid)mediapackagemediatrack)r3   titledcTitle)r3   seriestitlez, )r3   creatorscreator	dcCreatorr   r   )r3   durationdcExtent)r3   series
dcIsPartOf)r2   r6   r:   r<   r>   	series_idepisodeformats)getlist_extract_formatsr   joinr	   )r'   episode_infovideo_idrB   r6   series_titler:   s          r-   _extract_episode!TubeTuGrazBaseIE._extract_episode;   s    ##D)t,,'IJHV W \+DiP#L2QR))H\A;XZ&\ ] ^ $$\3OQ[\"%l4NP\]#-	
 		
r0   c                 t    U H1  nX#S'   UR                  U R                  S   5      (       a  M,  SUS'   M3     U$ )Nformat_note    
preference)
startswith_FORMAT_TYPES)r'   rB   fmt_typefs       r-   _set_format_type!TubeTuGrazBaseIE._set_format_typeO   s@    A'm&&t'9'9!'<=="$,  r0   c              #   ~  #    Su  p4U=(       d    /  GH  n[        USS5      nUc  M  UR                  S5      =(       d    SnUR                  S5      =(       d    SR                  5       nUS:X  aP  U[        [        US5      S	5      [        [        US
5      S	5      [        US5      S.[	        [        US5      5      E/n	O=US:X  a  SU R                  XbSSSU S3S9pOUS:X  a  SU R                  XbSSU S3S9pOM  U R                  X5       S h  vN   GM     U R                   H  nU(       dA  U R                  SU SU S3USSSU S3SS9=(       d    / n
U R                  X5       S h  vN   U(       a  MT  U R                  SU SU S3USSU S3SS9nU R                  X5       S h  vN   M     g  N NK N7f)N)FF)tagsr#   r#   typeunknown	transporthttps)audiobitratei  )videor^   )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   rC   lowerr   r   _extract_m3u8_formats_extract_mpd_formatsrU   rR   )r'   format_listrH   has_hlshas_dashformat_infor#   rS   r[   rB   hls_formatsdash_formatss               r-   rE   !TubeTuGrazBaseIE._extract_formatsV   s3    (&,",K{OUCC{"v.;)H$5@GGIIG#(kCW)XZ^_(kCW)XZ^_'5KL	
 '|KAX'YZ  e##')C)C5l8*Ta<b *D *df$$($*C*C|H:^5\ +D +^' ,,W???; -@ **H"88ST\S]]^_g^hh{|e5hZ}7]gl 9 n tqs   00GGG8#88ST\S]]^_g^h  iJ  KE,xj0Waf  9  h  00HHH + @ H Is=   DF=F7AF=-F9.	F=;2F=-F;.
F=9F=;F= N)__name__
__module____qualname____firstlineno___NETRC_MACHINE_API_EPISODErR   r.   rJ   rU   rE   __static_attributes__rs   r0   r-   r   r      s(    !N?L1M(CT
(.Ir0   r   c                   X    \ 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./rS rSrg)TubeTuGrazIE   z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-47764aa23d40 a23a3d5c9aaca2b84932fdba66e17145z$f2634392-e40e-4ac7-9ddc-47764aa23d40rf   z#6 (23.11.2017)u<   [INB03001UF] Einführung in die strukturierte ProgrammierungzSafran CiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34)r2   extr6   rA   r>   r:   r<   r@   )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)r2   r6   r   z"Extractor failed to obtain "title")r#   r   r   expected_warningsc                     U R                  U5      nU R                  U R                  X"SS.SS9n[        USSU0S9nU R	                  U5      $ )Nr   )r2   limitzDownloading episode metadataqueryr   )search-resultsresultr2   r   )	_match_id_download_jsonry   r   rJ   )r'   r#   rH   episode_datarG   s        r-   _real_extractTubeTuGrazIE._real_extract   sb    >>#&**x/KRp + r $L2NY]_gXhi$$\22r0   rs   N)	rt   ru   rv   rw   IE_DESC
_VALID_URL_TESTSr   rz   rs   r0   r-   r|   r|      sj    GJ i5<*,X%#C		
 i5<Q
 #G!G	
F43r0   r|   c                       \ rS rSrSrSSSSS.SSSS	S
S
SSSS.0SSSS	SSSSSS.0SSSS	SSSSSS.0SSSS	SSSSSS.0/SS./rS rSrg)TubeTuGrazSeriesIE   z(?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)r2   r6   r   z$ee17ce5d-34e2-48b7-a76a-fed148614e11rf   z#4 Detailprojektz	Neuhold Ri}] )r2   r@   r   r6   rA   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#   r2   r   playlistplaylist_mincountc                     U R                  U5      nU R                  U R                  USU0SS9nU R                  SUSSSUSS	S
.S9nU R                  [	        U R
                  US   S   5      U[        US5      5      $ )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   )catalogsrN   zhttp://purl.org/dc/terms/r6   rN   value)r   r   ry   playlist_resultmaprJ   r   )r'   r#   playlist_idepisodes_dataseries_datas        r-   r    TubeTuGrazSeriesIE._real_extract   s    nnS)++{5+2FMg , i))7E.8\' *  ##%%}5E'Fx'PQS^&ghj 	jr0   rs   N)rt   ru   rv   rw   r   r   r   rz   rs   r0   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: :Fxjr0   r   N)commonr   utilsr   r   r   r   r	   r   r|   r   rs   r0   r-   <module>r      sB    ! yI} yIx'3# '3TPj) Pjr0   