
    VGh*                     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         d/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/tubetugraz.py_perform_loginz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           
      @   |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JHV W \+DiP#L2QR))H\A;XZ&\ ] ^ $$\3OQ[\"%l4NP\]#-	
 		
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'Am&&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{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 +^' ,,Wh???;	@@ ** 	IH"88ST\S]]^_g^hh{|e5hZ}7]gl 9 n tqs   00hGGG#88ST\S]]^_g^h  iJ  KE,xj0Waf  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1M(CT
(.Ir.   r   c                   P    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 Zy)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-47764aa23d40 a23a3d5c9aaca2b84932fdba66e17145z$f2634392-e40e-4ac7-9ddc-47764aa23d40rb   z#6 (23.11.2017)u<   [INB03001UF] Einführung in die strukturierte ProgrammierungzSafran CiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34)r0   extr4   r?   r<   r8   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)r0   r4   rw   z"Extractor failed to obtain "title")r"   rx   ry   expected_warningsc                     | 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    >>#&**xh/KRp + r $L2NY]_gXhi$$\22r.   N)rn   ro   rp   IE_DESC
_VALID_URL_TESTSr   rs   r.   r,   ru   ru      sj    GJ i5<*,X%#C		
 i5<Q
 #G!G	
F4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 VorprojektiT z$75e4c71c-d99d-4e56-b0e6-4f2bcdf11f29z#1 VariantenstudiumiR    )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    nnS)++{5+2FMg , i))7E.8\' *  ##%%}5E'Fx'PQS^&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: :Fx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# '3TPj) Pjr.   