
    V|h!                     t    S SK r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJr   " S S\5      r " S	 S
\5      rg)    N   )InfoExtractor   )Request)ExtractorErrorint_or_none
js_to_jsonstrip_or_nonetraverse_objurl_or_noneurlencode_postdatac                       \ rS rSrSrSrSrSrSSSSS	S
SSSS.SS0S.S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$S%.S&S'S(.S)S*SS+S,S-S.S/.S$S0./rS1r	S2 r
S3 rS4rg5)6TubiTvIE   tubitvzJhttps?://(?:www\.)?tubitv\.com/(?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,   )hlsv6_widevinehlsv6_widevine_nonclearleadhlsv6_playready_psshv0hlsv6_fairplaydash_widevinedash_widevine_nonclearleadc                    U R                  5         UUS.n[        U5      n[        U R                  U5      nSUR                  S'   U R                  US SS5      n[        R                  " SU5      (       d
  [        SSS	9eg )
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   )selfr8   r9   	form_datapayloadrequest
login_pages          Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/tubitv.py_perform_loginTubiTvIE._perform_loginR   s      
	 %Y/$//73*M'++T5"46
yy,j99 :TK K :    c                    U R                  U5      R                  SS5      u  p#U R                  SU SU S3U5      nU R                  SUSU[        S9S   S	   U   n/ nS
n[        USS 45       H  nUR                  S5      n	US   S   n
U	S:X  a"  UR                  U R                  XU	S
S95        MD  U	S;   a#  UR                  U R                  XSU	S
S95        Mm  XR                  ;   a  SnM  U R                  SU	 S35        M     U(       d  U(       a  U R                  U5        O'U(       d   UR                  S5      (       d
  [        SSS9e0 n[        USS 45       HH  nUR                  UR                  SS5      / 5      R                  SU R!                  US   5      05        MJ     [        US["        145      nU R%                  SUS S
S!S"S#9u  pnU['        U5      UU[)        U5      [)        U5      ['        U5      S$.[        US%["        14S&[(        14S'["        14S([(        14S)S*[*        1SU R                   104S+.5      E$ ),Nr   typezhttps://tubitv.com//window\.__data\s*=datatransform_sourcevideobyIdFvideo_resourcesc                 $    [        US   S   5      $ )Nmanifestr   r   _vs     rG   <lambda>(TubiTvIE._real_extract.<locals>.<lambda>k   s    R]^_`j^klq^rRsrJ   rV   r   dash)mpd_idfatal)hlsv3hlsv6r   )m3u8_idr_   Tz Skipping unknown resource type ""policy_matchz%This content is currently unavailabler:   	subtitlesc                     [        US   5      $ )Nr   rW   rX   s     rG   r[   r\   }   s    {STUZS[G\rJ   langEnglishr   z^S(\d+):E(\d+) - (.+)zepisode info)r   r      )NNN)r_   groupdefault)r   r   formatsre   r'   r%   r$   r   r   publisher_idyear
thumbnails.)r   r   r   r   ro   )_match_valid_urlrj   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   )rB   r   video_id
video_typewebpage
video_datarl   drm_formatsresourceresource_typemanifest_urlre   subr   r'   r%   episode_titles                    rG   _real_extractTubiTvIE._real_extracta   s   #44S9??fM((+>zl!H:UV)WYab&&!7FH' ' ))0228::BD
 $Z2CEs1tuH$LL0M#J/6L&t88Xemr8st"44t99,RWanv{9|}":"::"##&F}oUV$WX v ;OOH%!?!? !HSWXX	
[:\,]^C  !;R@GGt//E
;I  _
 Z'C5)9:7;7I7I$e^5PYcu 8J 8w4} "5)"(7).9$]3
 : -u5'+7 .6!'+ 7+S;-%$JbJbIcAde( 
 	
rJ    N)__name__
__module____qualname____firstlineno__IE_NAME
_VALID_URLr=   _NETRC_MACHINE_TESTSrv   rH   r   __static_attributes__r   rJ   rG   r   r      s    G^J*JNA#A= 9	
 #F+ O3A+ = 9
 #F+!$ K11 L=
 & J J#A= 
 &Y7Ft\K4
rJ   r   c                   d    \ rS rSrSrSrSSSS0S.S	S
SS0S.SSSS0S.SSSS0S./rS rS rSr	g)TubiTvShowIE   z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              #     ^#    U R                  X5      nU R                  SUSU[        S9S   nT(       a  U4S j/OS[        1/n[	        USS S	/UQ75       Hm  n[        UR                  S
5      5      n[	        USS 45       H=  n	U	S   n
U R                  SU
 S3[        U
U[        U	R                  S5      5      S9v   M?     Mo     g 7f)NrN   rO   rP   rR   c                 &   > [        US   5      T:H  $ )Nnumber)r|   )rY   rZ   selected_seasons     rG   r[   'TubiTvShowIE._entries.<locals>.<lambda>   s    S8-@rJ   .rS   c                     US   S:H  $ )NrL   sr   rX   s     rG   r[   r      s    qyC?OrJ   seasonsr   episodesc                     US   $ )Nr   r   rX   s     rG   r[   r      s    !D'rJ   r   zhttps://tubitv.com/tv-shows/rM   num)r'   r%   )	r?   rq   r	   dictr   r   rr   
url_resultr   )rB   show_urlplaylist_idr   r   rO   pathr&   r'   r$   
episode_ids      `       rG   _entriesTubiTvShowIE._entries   s     ((?  !7FK' ! ))02
 FU@A[^ae`fZg"4&2OQZ)b]a)bcF'

8(<=M'=Q0RS$T]
oo2:,a@(J"/GKKX]L^@_ & a a T ds   CCc                     U R                  U5      R                  SS5      u  p#U(       a  U SU 3nU R                  U R                  XU5      U5      $ )N	show_namer&   z-season-)rp   rj   playlist_resultr   )rB   r   r   r   s       rG   r   TubiTvShowIE._real_extract   sV    '+'<'<S'A'G'GU]'^$(M/1BCK##DMM#O$TVabbrJ   r   N)
r   r   r   r   r   r   r   r   r   r   r   rJ   rG   r   r      s    GpJ\ 5
 I,
 I,
 A#
%F4a$crJ   r   )r@   commonr   
networkingr   utilsr   r   r	   r
   r   r   r   r   r   r   rJ   rG   <module>r      s:    	 !    E
} E
P3c= 3crJ   