
    yf)                     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            \  }}|r|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contents        =/usr/lib/python3/dist-packages/yt_dlp/extractor/tubetugraz.py_perform_loginzTubeTuGrazBaseIE._perform_login   s8   $$V$<Fb % d 55HHd%)TXX1F'9#$&&&	%  6  txx#PP&&Ft ' 5  EF55HHd%)TXX1F&0K#$&!%!3!3!5%  6  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)r0   titledcTitle)r0   seriestitlez, )r0   creatorscreator	dcCreatorr   r   )r0   durationdcExtent)r0   series
dcIsPartOf)r/   r3   r7   r9   r;   	series_idepisodeformats)getlist_extract_formatsr   joinr	   )r&   episode_infor/   r?   r3   series_titler7   s          r+   _extract_episodez!TubeTuGrazBaseIE._extract_episode7   s    d#t,,'IJBP Q \+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?   typefs       r+   _set_format_typez!TubeTuGrazBaseIE._set_format_typeK   sB     	%A#Am??4#5#5a#8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"   rN   unknown	transporthttps)audiobitratei  )videorW   )rX   	framerate)r"   abrvbrfps)rX   
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_formatsrP   rM   )r&   format_listr/   has_hlshas_dashformat_infor"   rN   rT   r?   hls_formatsdash_formatss               r+   rB   z!TubeTuGrazBaseIE._extract_formatsR   sG    (&," 	<K{OUCC{??6*7iD$5@GGIIG#(kCW)XZ^_(kCW)XZ^_'5KL	
 '|KAX'YZ  e##')C)CU%TF-6X *D *Zf$$($*C*C5dV>/R +D +T' ,,Wd;;;;	<@ && 	ED"88STVSWWXY]X^^qrU<v]1S]b 9 d jgi   00dCCC#88STVSWWXY]X^^  AeLn*MW\  9  ^  00tDDD	E < D Es=   DF&F AF&F"F&"6F&F$F&"F&$F&N)
__name__
__module____qualname___NETRC_MACHINE_API_EPISODErM   r,   rF   rP   rB    r-   r+   r   r      s(    !N?L1M$CL
(.E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-47764aa23d40r_   z#6 (23.11.2017)u<   [INB03001UF] Einführung in die strukturierte ProgrammierungzSafran CiJJ2 z$b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34)r/   extr3   r>   r;   r7   r9   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)r/   r3   rt   z"Extractor failed to obtain "title")r"   ru   rv   expected_warningsc                     | j                  |      }| j                  | j                  ||ddd      }t        |dd|i      }| j	                  |      S )Nr   )r/   limitzDownloading episode metadataqueryr   )search-resultsresultr/   r   )	_match_id_download_jsonro   r   rF   )r&   r"   video_idepisode_datarD   s        r+   _real_extractzTubeTuGrazIE._real_extract   sd    >>#&**xh/KRp + r $L2NY]_gXhi$$\22r-   N)rk   rl   rm   IE_DESC
_VALID_URL_TESTSr   rp   r-   r+   rr   rr      sj    GJ i5<*,X%#C		
 i5<Q
 #G!G	
F43r-   rr   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)r/   r3   rv   z$ee17ce5d-34e2-48b7-a76a-fed148614e11r_   z#4 Detailprojektz	Neuhold Ri}] )r/   r=   rt   r3   r>   r;   r7   r9   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/   rv   playlistmin_playlist_countc                 
   | 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~   )catalogsrI   zhttp://purl.org/dc/terms/r3   rI   value)r   r   ro   playlist_resultmaprF   r   )r&   r"   r/   episodes_dataseries_datas        r+   r   z TubeTuGrazSeriesIE._real_extract   s    ^^C ++D,=,=r%QS[u+v))75.8\ *  ##%%}5E'Fx'PQSU&ghj 	jr-   N)rk   rl   rm   r   r   r   rp   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   rr   r   rp   r-   r+   <module>r      sB    ! uE} uEp'3# '3TOj) Ojr-   