
    uki                         d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ dd	lmZ  G d
 de      Zy)    N   )FileDownloader)FFmpegFD   )Request)WebSocketResponse)DownloadErrorstr_or_nonetruncate_string)traverse_objc                       e Zd ZdZd Zy)NiconicoLiveFDz/ Downloads niconico live without being stopped c                 D   	
 |d   
|d   }|d   |d   |d   c	t         j                   j                  xs i       }|j                         }d|d<   	 fd 
fd	}t	        j
                  |d
      }|j                          |j                  ||      S )Niddownloader_optionsmax_qualitywsws_urlm3u8protocolc                    | st        t              sj                  j                  t	        ddi            }j                  j
                  j                  dd      rj                  d       |j                  t        j                  dddd	d
ddddddd             n}|5  	 |j                         }|st        j                  |      }|rt        |t              s<|j                  d      dk(  r#|j                  d       |j                  d       n|j                  d      dk(  rj                  |       	 d d d        y|j                  d      dk(  r;j                  |       t        |ddt        hf|      }t!        |      cd d d        S j                  j
                  j                  dd      rj                  dt#        |d              6# 1 sw Y   y xY w)NOriginzhttps://live.nicovideo.jp)headersverboseFzSending startWatching requestT	webSocket)commentabler   single_cookiehighhls)accessRightMethod	chasePlaylatencyr   quality)	reconnectroomstreamstartWatching)datatyper)   pingz{"type":"pong"}z{"type":"keepSeat"}
disconnecterrorbodycode)defaultzServer response: d   )
isinstancer   ydlurlopenr   paramsgetwrite_debugsendjsondumpsrecvloadsdictr   r
   r	   r   )	r$   r   r:   r(   messager#   selfws_extractorr   s	        U/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/downloader/niconico.pycommunicate_wsz4NiconicoLiveFD.real_download.<locals>.communicate_ws   s   
<9J KXX%%gX/J$K'M N88??&&y%8$$%DE

%)+/(3!
 2A).'-(-'.# ,$  $ " [779D ::d+Dz$'= xx'61 23 67&)\9((.#[ [ &)W4((.".tff{m5T^b"c,W5#[ [$ ,,Y>((+<_TSV=W<X)YZ% [ [s   ,BG$AG$AG$$G-c                      d} 	 	  |       }|du r	 d} y 	 d} # t         $ r8}j                  d d|        t        j                  d       Y d }~d} Rd }~ww xY w# d} w xY w)NFTz[niconico:live] z;: Connection error occured, reconnecting after 10 seconds: 
   )BaseException	to_screentimesleep)r$   reterA   r>   video_ids      r@   ws_mainz-NiconicoLiveFD.real_download.<locals>.ws_mainH   s    I
%(3Cd{ !%I # !%I 
 % NN*8*4opqorsuJJrN $I !%Is&    	A,AA AA A"T)targetdaemon)r   r2   r4   copy	threadingThreadstartdownload)r>   filename	info_dictoptsdlnew_info_dictrK   threadrA   r#   rJ   r?   r   s   `       @@@@@r@   real_downloadzNiconicoLiveFD.real_download   s    T?-.(,](;T$Zh%vdhh 1r2!($*j!-	[^	% !!>{{8]33    N)__name__
__module____qualname____doc__rY    rZ   r@   r   r      s    9J4rZ   r   )r8   rO   rF   commonr   externalr   
networkingr   networking.websocketr   utilsr	   r
   r   utils.traversalr   r   r_   rZ   r@   <module>rf      s1       "    4 ? ? *M4^ M4rZ   