o
    iC"                     @   sh   d dl Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZ G dd deZG d	d
 d
eZdS )    N   )InfoExtractor   )Request)ExtractorErrorint_or_none
js_to_jsonstrip_or_nonetraverse_objurl_or_noneurlencode_postdatac                   @   s   e Zd ZdZdZdZdZdddddd	d
dddddidd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#d$d%d&d'd(d)dd*d+d,d-d.d#d/d0d&d'gZd1Zd2d3 Z	d4d5 Z
d6S )7TubiTvIEtubitvzahttps?://(?:www\.)?tubitv\.com/(?:[a-z]{2}-[a-z]{2}/)?(?P<type>video|movies|tv-shows)/(?P<id>\d+)zhttp://tubitv.com/loginz0https://tubitv.com/movies/100004539/the-39-steps	100004539mp4zThe 39 Stepsz$md5:bb2f2dd337f0dc58c06cb509943f54c8 abc2558d54505d4f0f32be94f2e7108ci  zre:^https?://.+\.(jpe?g|png)$iC  )idexttitledescriptionuploader_idrelease_year	thumbnaildurationskip_downloadm3u8)url	info_dictparamsz=https://tubitv.com/tv-shows/554628/s01-e01-rise-of-the-snakes554628zS01:E01 - Rise of the Snakesz$md5:ba136f586de53af0372811e783a3f57dzRise of the Snakesr   zSeason 1 2a9273e728c510d22aa5c57d0646810bi  i`  )r   r   r   r   episodeepisode_numberseasonseason_numberr   r   r   r   z9http://tubitv.com/video/283829/the_comedian_at_the_friday 43ac06be9326f41912dc64ccf7a80320283829zThe Comedian at The FridayznA stand up comedian is forced to look at the decisions in his life while on a one week trip to the west coast. bc168bee0d18dd1cb3b86c68706ab434)r   r   r   r   r   zContent Unavailable)r   md5r   skipz8http://tubitv.com/tv-shows/321886/s01_e01_on_nom_storiesT)r   only_matchingz8https://tubitv.com/movies/560057/penitentiary?start=true560057Penitentiaryz$md5:8d2fc793a93cc1575ff426fdcb8dd3f9 d8fed30d4f24fcb22ec294421b9defc2i  )r   r   r   r   r   r   )r   r   r)   z\https://tubitv.com/es-mx/tv-shows/477363/s01-e03-jacob-dos-dos-y-la-tarjets-de-hockey-robada)hlsv6_widevinehlsv6_widevine_nonclearleadhlsv6_playready_psshv0hlsv6_fairplaydash_widevinedash_widevine_nonclearleadc                 C   s\   |    ||d}t|}t| j|}d|jd< | |d dd}td|s,tddd	d S )
N)usernamepasswordz!application/x-www-form-urlencodedzContent-TypeFzWrong login infozid="tubi-logout"z(Login failed (invalid username/password)Texpected)	report_loginr   r   
_LOGIN_URLheaders_download_webpageresearchr   )selfr4   r5   	form_datapayloadrequest
login_page rC   K/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/tubitv.py_perform_loginU   s   
zTubiTvIE._perform_loginc                 C   s  |  |dd\}}| d| d| d|}| jd|d|tdd d	 | }g }d
}t|ddd fD ]A}|d}	|d d }
|	dkrS|| j|
||	d
d q5|	dv re|| j	|
|d|	d
d q5|	| j
v rmd}q5| d|	 d q5|s|r| | n|s|dstdddi }t|ddd fD ]}||ddg d| |d i qt|dthf}| jd |d!d
d"d#d$\}}}|t|||t|t|t|d%t|d&thfd'thfd(thfd)thfd*d+thd| jhifd,S )-Nr   typezhttps://tubitv.com//zwindow\.__data\s*=datatransform_sourcevideobyIdFvideo_resourcesc                 S   s   t |d d S )Nmanifestr   r   _vrC   rC   rD   <lambda>n       z(TubiTvIE._real_extract.<locals>.<lambda>rN   r   dash)mpd_idfatal)hlsv3hlsv6r   )m3u8_idrW   Tz Skipping unknown resource type ""policy_matchz%This content is currently unavailabler6   	subtitlesc                 S   s   t |d S )Nr   rO   rP   rC   rC   rD   rS      s    langEnglishr   z^S(\d+):E(\d+) - (.+)zepisode info)r   r      )NNN)rW   groupdefault)r   r   formatsr]   r$   r"   r!   r   r   publisher_idyear
thumbnails.)r   r   r   r   rf   )_match_valid_urlra   r;   _search_jsonr   r
   getextend_extract_mpd_formats_extract_m3u8_formats_UNPLAYABLE_FORMATSreport_warning
report_drmr   
setdefaultappend_proto_relative_urlstr_search_regexr	   r   r   )r>   r   video_id
video_typewebpage
video_datarc   drm_formatsresourceresource_typemanifest_urlr]   subr   r$   r"   episode_titlerC   rC   rD   _real_extractd   sj   

zTubiTvIE._real_extractN)__name__
__module____qualname__IE_NAME
_VALID_URLr9   _NETRC_MACHINE_TESTSrm   rE   r   rC   rC   rC   rD   r      s~    
=r   c                   @   s`   e Zd ZdZdZddddiddd	dd
idddddidddddidgZdd Zdd ZdS )TubiTvShowIEztubitv:seriesz\https?://(?:www\.)?tubitv\.com/series/\d+/(?P<show_name>[^/?#]+)(?:/season-(?P<season>\d+))?zKhttps://tubitv.com/series/3936/the-joy-of-painting-with-bob-ross?start=truei  r   z!the-joy-of-painting-with-bob-ross)r   playlist_mincountr   z7https://tubitv.com/series/2311/the-saddle-club/season-1   zthe-saddle-club-season-1)r   playlist_countr   z7https://tubitv.com/series/2311/the-saddle-club/season-3   zthe-saddle-club-season-3z/https://tubitv.com/series/2311/the-saddle-club/G   zthe-saddle-clubc                 #   s    |  ||}| jd|d|tdd d d d } r" fddgnd	thg}t|d
g|R D ]-}t|d}t|ddd fD ]}	|	d }
| jd|
 dt|
|t|	ddV  qBq0d S )Nz!window\.__REACT_QUERY_STATE__\s*=rH   rI   queriesr   statec                    s   t |d  kS )Nnumber)rs   rP   selected_seasonrC   rD   rS      rT   z'TubiTvShowIE._entries.<locals>.<lambda>.seasonsr   episodesc                 S   s   |d S )Nr   rC   rP   rC   rC   rD   rS      s    r   zhttps://tubitv.com/tv-shows/rG   num)r$   r"   )	r;   rh   r   dictr
   r   ri   
url_resultr   )r>   show_urlplaylist_idr   rw   rH   pathr#   r$   r!   
episode_idrC   r   rD   _entries   s2   
zTubiTvShowIE._entriesc                 C   s>   |  |dd\}}|r| d| }| | ||||S )N	show_namer#   z-season-)rg   ra   playlist_resultr   )r>   r   r   r   rC   rC   rD   r      s   zTubiTvShowIE._real_extractN)r   r   r   r   r   r   r   r   rC   rC   rC   rD   r      s4    r   )r<   commonr   
networkingr   utilsr   r   r   r	   r
   r   r   r   r   rC   rC   rC   rD   <module>   s    $ 