
    yf                     B    d dl Z ddlmZ ddlmZmZmZ  G d de      Zy)    N   )InfoExtractor   )ExtractorErrorlowercase_escapeurl_or_nonec                   J    e Zd ZdZdddddddd	did
dddddddgZdZd Zy)ChaturbateIEzNhttps?://(?:[^/]+\.)?chaturbate\.com/(?:fullvideo/?\?.*?\bb=)?(?P<id>[^/?&#]+)z$https://www.chaturbate.com/siswet19/siswet19mp4z:re:^siswet19 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$   T)idexttitle	age_limitis_liveskip_downloadzRoom is offline)url	info_dictparamsskipz*https://chaturbate.com/fullvideo/?b=caylin)r   only_matchingz#https://en.chaturbate.com/siswet19/zRoom is currently offlinec                 <   | j                  |      }| j                  d|z  || j                               g }| j                  | j	                  dddd      |t
        d	      }|r-t        |j                  d
            }|r|j                  |       |sDt        j                  d      D ]+  }|j                  t        |j                  d                   - |s;t        j                  d      D ]"  }|j                  |j                  d             $ g }|D ]5  }||j                  dd      }
}	|	|
fD ]  }||vs|j                  |        7 |sa| j	                  ddgddd       }|s-t        fd| j                  ddfD              r| j                  }|rt        |d      t        d      g }|D ]D  }dD ]  }d|z  |v s|} n d }|j!                  | j#                  ||d|dk(  rdnd |dd             F ||d |z  | j%                        d|d!S )"Nzhttps://chaturbate.com/%s/)headersz9initialRoomDossier\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1dataz{}value)defaultgroupF)transform_sourcefatal
hls_sourcez'(\\u002[27])(?P<url>http.+?\.m3u8.*?)\1r   z"(["\'])(?P<url>http.+?\.m3u8.*?)\1_fast z?<span[^>]+class=(["\'])desc_span\1[^>]*>(?P<error>[^<]+)</span>zA<div[^>]+id=(["\'])defchat\1[^>]*>\s*<p><strong>(?P<error>[^<]+)<error)r   r   c              3   &   K   | ]  }|v  
 y w)N ).0pwebpages     =/usr/lib/python3/dist-packages/yt_dlp/extractor/chaturbate.py	<genexpr>z-ChaturbateIE._real_extract.<locals>.<genexpr>N   s      OqG| Os   offline_tippingtip_offlineT)expectedzUnable to find stream URL)fastslowz_%sr   r/   i)r   
preferencem3u8_idr    livez1https://roomimg.stream.highwebmedia.com/ri/%s.jpg)r   r   	thumbnailr   r   formats)	_match_id_download_webpagegeo_verification_headers_parse_json_search_regexr   r   getappendrefinditerr   replaceany_ROOM_OFFLINEr   extend_extract_m3u8_formats_rta_search)selfr   video_idfound_m3u8_urlsr   m3u8_urlm	m3u8_urlsfound_m3u8_urlm3u8_fast_urlm3u8_no_fast_urlr$   r5   known_idr2   r)   s                  @r*   _real_extractzChaturbateIE._real_extract$   s   >>#&(((83X113 ) 5 LW  > '7u	   F
 "488L#9:H&&x0[[>I I&&'7'GHI [[97D 7&&qwwu~67 	- 	/N.<n>T>TU\^`>a+M*,<= /9,$$X./	/ &&SUW ' ?E  O**,=}.N O O ..E$UT:: !<==! 	:H, 8#x/&G
 NN455(")V"33u4	 6 9 :	: LxW))'2
 	
    N)__name__
__module____qualname__
_VALID_URL_TESTSrA   rO   r&   rP   r*   r
   r
      sb    bJ5Q
 T
 " < 5!F* 0MF
rP   r
   )r=   commonr   utilsr   r   r   r
   r&   rP   r*   <module>rX      s#    	 ! _
= _
rP   