Ë
    š„j{*  ã                   ój   — d dl Z 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 ddlmZ  G d„ d	e«      Zy)
é    Né   )Ú
FragmentFDé   )Ú	HTTPError)ÚRegexNotFoundErrorÚRetryManagerÚdict_getÚint_or_noneÚtry_get)ÚHTTPHeaderDictc                   ó&   — e Zd ZdZd„ Zed„ «       Zy)ÚYoutubeLiveChatFDz3 Downloads YouTube live chats fragment by fragment c           
      ó`  ‡ ‡‡‡‡‡‡‡‡‡‡— ‰d   Š‰ j                  d‰ j                  › d�«       ‰ j                  j                  d«      s‰d   dk(  r‰ j	                  d«       ‰ j                  j                  dd	«      }|d
d dœŠddlm}  |‰ j                  «      Št        t        j                  «       dz  «      Šd/ˆˆˆ fd„	Šˆˆ fd„Šˆˆˆ fd„ŠdŠˆˆˆ ˆfd„Šd/ˆˆˆˆˆˆˆ ˆˆf	d„	}‰ j                  ‰‰«        ‰‰d   «      }|sy	‰ j                  ‰«      }	 ‰j                  ‰|j                  dd«      «      }t        |d„ «      }	‰ j!                  ‰d«       ‰j#                  ‰|j                  dd«      «      }
|
sy	t        |
d„ «      }t        |
d„ «      }|r|sy	t        |d„ t$        «      }‰d   dk(  rd|z   }d|	z   }n‰d   dk(  r
d |z   }d!|	z   }dx}}d }|	�®|d"z  }||	d#œ}|d"kD  rˆd$t%        t'        |d%z
  d«      «      i|d&<   |r
d'|i|d(   d)<   ‰j)                  |
|¬*«      }|j+                  d+d,i«       t-        j.                  |d	¬-«      j1                  «       d.z   } ||||«      \  }}	}}n ||«      \  }}	}}|sy	|rn|	�Œ®‰ j3                  ‰‰«      S # t        $ r Y y	w xY w)0NÚvideo_idú[z] Downloading live chatÚskip_downloadÚprotocolÚyoutube_live_chatzƒLive chat download runs until the livestream ends. If you wish to download the video simultaneously, run a separate yt-dlp instanceÚtestFT)ÚfilenameÚliveÚtotal_fragsr   )ÚYoutubeBaseInfoExtractoréè  c                 ód   •— t        ‰j                  d«      |«      }‰j                  ‰| ‰||«      S )NÚhttp_headers)r   ÚgetÚ_download_fragment)ÚurlÚdataÚheadersr   ÚctxÚ	info_dictÚselfs       €€€úZ/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/downloader/youtube_live_chat.pyÚdl_fragmentz4YoutubeLiveChatFD.real_download.<locals>.dl_fragment(   s1   ø€ Ü)¨)¯-©-¸Ó*GÈÓQˆLØ×*Ñ*¨3°°YÀÈdÓSÐSó    c                 óŒ  •— d x}x}}t        «       }| j                  dg «      D ]P  }d|v r|d   }t        |d   «      }|j                  t	        j
                  |d¬«      j                  «       dz   «       ŒR |�6t        | d„ t        «      }|r"|j                  d«      }|j                  d	«      }‰	j                  ‰|«       |||fS )
NÚactionsÚreplayChatItemActionÚvideoOffsetTimeMsecF©Úensure_asciió   
c                 ó   — | d   d   d   S )NÚcontinuationsr   ÚliveChatReplayContinuationData© ©Úxs    r%   ú<lambda>zOYoutubeLiveChatFD.real_download.<locals>.parse_actions_replay.<locals>.<lambda>8   s   € ˜a Ñ0°Ñ3Ð4TÑU€ r'   ÚcontinuationÚclickTrackingParams)
Ú	bytearrayr   ÚintÚextendÚjsonÚdumpsÚencoder   ÚdictÚ_append_fragment)
Úlive_chat_continuationÚoffsetÚcontinuation_idÚclick_tracking_paramsÚprocessed_fragmentÚactionÚreplay_chat_item_actionr6   r"   r$   s
           €€r%   Úparse_actions_replayz=YoutubeLiveChatFD.real_download.<locals>.parse_actions_replay,   së   ø€ Ø?CÐCˆFÐC�_Ð'<Ü!*£ÐØ0×4Ñ4°YÀÓCò M�Ø)¨VÑ3Ø.4Ð5KÑ.LÐ+Ü Ð!8Ð9NÑ!OÓP�FØ"×)Ñ)Ü—J‘J˜v°EÔ:×AÑAÓCÀeÑKõMð	Mð Ð!Ü&Ø*ÙUÔW[ó ]�ñ  Ø&2×&6Ñ&6°~Ó&F�OØ,8×,<Ñ,<Ð=RÓ,SÐ)Ø×!Ñ! #Ð'9Ô:Ø" FÐ,AÐAÐAr'   c                 ó²   •— t        | d„ t        «      }|r;‰j                  ‰d«       |j                  d«      }d}|j                  d«      }|||fS  ‰| «      S )Nc                 ó6   — | d   d   d   d   d   d   d   d   S )	NÚheaderÚliveChatHeaderRendererÚviewSelectorÚsortFilterSubMenuRendererÚsubMenuItemsr   r6   ÚreloadContinuationDatar2   r3   s    r%   r5   zWYoutubeLiveChatFD.real_download.<locals>.try_refresh_replay_beginning.<locals>.<lambda>C   sA   € ˜!˜H™+Ð&>Ñ?ÀÑOÐPkÑlÐm{Ñ|Ð}~Ñð  AOñ  Pð  Qiñ  j€ r'   r'   r6   r   ÚtrackingParams)r   r>   r?   r   )r@   Úrefresh_continuationÚrefresh_continuation_idrA   rC   r"   rG   r$   s        €€€r%   Útry_refresh_replay_beginningzEYoutubeLiveChatFD.real_download.<locals>.try_refresh_replay_beginning?   sv   ø€ ä#*Ø&ñ jô  lpó$qÐ ñ $à×%Ñ% c¨3Ô/Ø*>×*BÑ*BÀ>Ó*RÐ'Ø�Ø(<×(@Ñ(@ÐAQÓ(RÐ%Ø.°Ð8MÐMÐMÙ'Ð(>Ó?Ð?r'   r   c                 ó  •— d x}}t        «       }| j                  dg «      D ]c  }‰j                  |«      }|�|‰z
  Šd|git        ‰«      ddœ}|j	                  t        j                  |d¬«      j                  «       dz   «       Œe d„ d„ g}t        | |t        «      }|rV|j                  d	«      }|j                  d
«      }t        |j                  d«      «      }	|	�t        j                  |	dz  «       ‰j                  ‰
|«       |‰|fS )Nr)   T)r*   r+   ÚisLiveFr,   r.   c                 ó   — | d   d   d   S )Nr0   r   ÚinvalidationContinuationDatar2   r3   s    r%   r5   zMYoutubeLiveChatFD.real_download.<locals>.parse_actions_live.<locals>.<lambda>`   s   € ˜!˜OÑ,¨QÑ/Ð0NÑO€ r'   c                 ó   — | d   d   d   S )Nr0   r   ÚtimedContinuationDatar2   r3   s    r%   r5   zMYoutubeLiveChatFD.real_download.<locals>.parse_actions_live.<locals>.<lambda>a   s   € ˜!˜OÑ,¨QÑ/Ð0GÑH€ r'   r6   r7   Ú	timeoutMsr   )r8   r   Úparse_live_timestampÚstrr:   r;   r<   r=   r   r>   r
   ÚtimeÚsleepr?   )r@   rB   rC   rD   rE   Ú	timestampÚpseudo_actionÚcontinuation_data_gettersÚcontinuation_dataÚ
timeout_msr"   Úlive_offsetr$   Ú
start_times             €€€€r%   Úparse_actions_livez;YoutubeLiveChatFD.real_download.<locals>.parse_actions_liveO   s5  ø€ à6:Ð:ˆOÐ3Ü!*£ÐØ0×4Ñ4°YÀÓCò T�Ø ×5Ñ5°fÓ=�	ØÐ(Ø"+¨jÑ"8�Kð .7¸¸Ð,AÜ+.¨{Ó+;Ø"ñ!�ð
 #×)Ñ)Ü—J‘J˜}¸5ÔA×HÑHÓJÈUÑRõTðTñ PÙHð)Ð%ô !(Ð(>Ð@YÔ[_Ó `ÐÙ Ø"3×"7Ñ"7¸Ó"G�Ø(9×(=Ñ(=Ð>SÓ(TÐ%Ü(Ð):×)>Ñ)>¸{Ó)KÓL�
ØÐ)Ü—J‘J˜z¨DÑ0Ô1Ø×!Ñ! #Ð'9Ô:Ø" KÐ1FÐFÐFr'   c                 óþ  •	— t        ‰j                  j                  d«      ‰j                  |¬«      D ]š  }	  ‰| ||«      }|s y‰j	                  ‰«      }	 ‰j                  ‰|j                  dd«      «      }|st        j                  |«      }t        |d„ t        «      xs i }‰d   dk(  xr ‰xs |d	k(  xr ‰xs ‰}	d
g |	|«      ¢­c S  y# t        $ r d }Y Œew xY w# t        $ r}
|
|_        Y d }
~
ŒÄd }
~
ww xY w)NÚfragment_retries)Ú
frag_index)FNNNúutf-8Úreplacec                 ó   — | d   d   S )NÚcontinuationContentsÚliveChatContinuationr2   r3   s    r%   r5   zVYoutubeLiveChatFD.real_download.<locals>.download_and_parse_fragment.<locals>.<lambda>|   s   €  !Ð$:Ñ";Ð<RÑ"S€ r'   r   r   r   T)r   Úparamsr   Úreport_retryÚ_read_fragmentÚextract_yt_initial_dataÚdecoder   r;   Úloadsr   r>   r   Úerror)r   ri   Úrequest_datar!   ÚretryÚsuccessÚraw_fragmentr    r@   ÚfuncÚerrr"   r&   Úier#   rf   rG   r$   rS   r   s              €€€€€€€€€r%   Údownload_and_parse_fragmentzDYoutubeLiveChatFD.real_download.<locals>.download_and_parse_fragmentm   s3  ø€ Ü% d§k¡k§o¡oÐ6HÓ&IÈ4×K\ÑK\ÐisÔtò �ðÙ)¨#¨|¸WÓE�GÙ"Ù6Ø#'×#6Ñ#6°sÓ#;�Lð$Ø!×9Ñ9¸(ÀL×DWÑDWÐX_ÐajÓDkÓl˜ñ  Ü#Ÿz™z¨,Ó7˜Ü-4ØÙSÔUYó.[ò .aà^`ð +ð ' zÑ2Ð6IÑIÒ`ÐN`ò 4Ø *¨a¡Ò PÐ4Pò4à3ð ð !Ð@¡4Ð(>Ó#?Ñ@Ò@ð'ð. +øô .ò $Ø#šð$ûô !ò Ø"%�E”KÜûðúsB   ·C"ÁC"Á"CÁ9AC"ÃCÃC"ÃCÃC"Ã"	C<Ã+C7Ã7C<r   rj   rk   c                 ó6   — | d   d   d   d   d   d   d   d   S )	NÚcontentsÚtwoColumnWatchNextResultsÚconversationBarÚliveChatRendererr0   r   rO   r6   r2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>“   sB   € �a˜
‘mÐ$?Ñ@ÐARÑSÐTfÑgÐhwÑxÐyzÑ{ð  }Uñ  Vð  Weñ  f€ r'   r'   c                 ó   — | d   S )NÚINNERTUBE_API_KEYr2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>›   s   € ¨1Ð-@Ñ+A€ r'   c                 ó   — | d   S )NÚINNERTUBE_CONTEXTr2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>œ   s   € °QÐ7JÑ5K€ r'   c                 ó   — | d   d   S )NÚclientÚvisitorDatar2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>Ÿ   s   € ¸A¸h¹KÈÑ<V€ r'   Úyoutube_live_chat_replayzGhttps://www.youtube.com/youtubei/v1/live_chat/get_live_chat_replay?key=z6https://www.youtube.com/live_chat_replay?continuation=z@https://www.youtube.com/youtubei/v1/live_chat/get_live_chat?key=z/https://www.youtube.com/live_chat?continuation=r   )Úcontextr6   ÚplayerOffsetMsiˆ  ÚcurrentPlayerStater7   r‹   ÚclickTracking)ÚytcfgÚvisitor_datazcontent-typezapplication/jsonr,   r.   )NN)Ú	to_screenÚFD_NAMEro   r   Úreport_warningÚextractor.youtuber   Úydlr9   r]   Ú _prepare_and_start_frag_downloadrq   rr   rs   r   r   r?   Úextract_ytcfgr\   ÚmaxÚgenerate_api_headersÚupdater;   r<   r=   Ú_finish_frag_download)r$   r   r#   r   r   r}   rx   ry   r    rB   r�   Úapi_keyÚinnertube_contextr�   r   Úchat_page_urlri   rA   rC   rv   r!   Úfragment_request_datar"   r&   r|   rd   rf   rG   re   rS   r   s   ` `                   @@@@@@@@@r%   Úreal_downloadzYoutubeLiveChatFD.real_download   s.  ÿú€ Ø˜ZÑ(ˆØ�‰˜˜4Ÿ<™<˜.Ð(?Ð@ÔAØ�{‰{�‰˜Ô/°I¸jÑ4IÐM`Ò4`Ø×Ñð !sô tð �{‰{�‰˜v uÓ-ˆð !ØØñ
ˆõ 	Aá% d§h¡hÓ/ˆäœŸ™› tÑ+Ó,ˆ
÷	Tõ	Bö&	@ð ˆ÷	G÷<	+õ 	+ð4 	×-Ñ-¨c°9Ô=á˜i¨Ñ.Ó/ˆÙØØ×*Ñ*¨3Ó/ˆð	Ø×-Ñ-¨h¸×8KÑ8KÈGÐU^Ó8_Ó`ˆDô "Øñ fógˆð 	×Ñ˜c 3Ô'à× Ñ  ¨<×+>Ñ+>¸wÈ	Ó+RÓSˆáØÜ˜%Ñ!AÓBˆÜ# EÑ+KÓLÐÙÑ/ØÜÐ0Ñ2VÔX[Ó\ˆØ�ZÑ Ð$>Ò>Ø[Ð^eÑeˆCØTÐWfÑf‰MØ�zÑ"Ð&9Ò9ØTÐW^Ñ^ˆCØMÐP_Ñ_ˆMàÐˆ
�VØ $ÐØÐ)Ø˜!‰OˆJà,Ø /ñˆLð ˜AŠ~Ø6FÌÌCÐPVÐY]ÑP]Ð_`ÓLaÓHbÐ5c�Ð1Ñ2Ù(Ø@UÐWlÐ?m�L Ñ+¨OÑ<Ø×1Ñ1¸ÈLÐ1ÓY�Ø—‘ Ð0BÐCÔDÜ(,¯
©
°<ÈeÔ(T×([Ñ([Ó(]Ð`eÑ(eÐ%ÙJeØ˜Ð%:¸GóKEÑG�˜¨&Ñ2Gñ KfØ! :óK/ÑG�˜¨&Ð2GáØÙØð+ Ñ)ð. ×)Ñ)¨#¨yÓ9Ð9øôc "ò 	Ùð	ús   Ä"J! Ê!	J-Ê,J-c                 ób  — t        | g d¢«      }t        |t        «      sy t        |ddg«      }t        |t        «      sy t        |g d¢«      }t        |t        «      sy d„ d„ g}t        ||t        «      }|rt        |g d¢«      }t        |t        «      sy t	        |j                  d«      d	«      S )
N)ÚaddChatItemActionÚaddLiveChatTickerItemActionÚaddBannerToLiveChatCommandÚitemÚbannerRenderer)ÚliveChatTextMessageRendererÚliveChatPaidMessageRendererÚliveChatMembershipItemRendererÚliveChatPaidStickerRendererÚ%liveChatTickerPaidMessageItemRendererÚ!liveChatTickerSponsorItemRendererÚliveChatBannerRendererc                 ó   — | d   d   d   S )NÚshowItemEndpointÚshowLiveChatItemEndpointÚrendererr2   r3   s    r%   r5   z8YoutubeLiveChatFD.parse_live_timestamp.<locals>.<lambda>Ù   s   € �aÐ*Ñ+Ð,FÑGÈ
ÑS€ r'   c                 ó   — | d   S )Nr   r2   r3   s    r%   r5   z8YoutubeLiveChatFD.parse_live_timestamp.<locals>.<lambda>Ú   s
   € �a˜
‘m€ r'   )r§   r¨   r©   rª   ÚtimestampUsecr   )r	   Ú
isinstancer>   r   r
   r   )rE   Úaction_contentr¥   r±   Úparent_item_gettersÚparent_items         r%   r[   z&YoutubeLiveChatFD.parse_live_timestampÂ   s¹   € ä!ØÚ^ó`ˆô ˜.¬$Ô/ØÜ˜¨Ð1AÐ(BÓCˆÜ˜$¤Ô%ØÜ˜Dò 	#
ó 	ˆô ˜(¤DÔ)ØáSÙ#ð
Ðô ˜hÐ(;¼TÓBˆÙÜ ò .ó ˆHô ˜h¬Ô-ØÜ˜8Ÿ<™<¨Ó8¸$Ó?Ð?r'   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    Ústaticmethodr[   r2   r'   r%   r   r      s"   „ Ù=òm:ð^ ñ!@ó ñ!@r'   r   )r;   r]   Úfragmentr   Únetworking.exceptionsr   Úutilsr   r   r	   r
   r   Úutils.networkingr   r   r2   r'   r%   ú<module>rÁ      s0   ðÛ Û å  Ý -÷õ õ .ôT@˜
õ T@r'   