a
    h                     @   s|   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 deZdS )    N   )FileDownloader)FFmpegFD   )Request)WebSocketResponse)DownloadErrorstr_or_nonetruncate_string)traverse_objc                   @   s   e Zd ZdZdd ZdS )NiconicoLiveFDz/ Downloads niconico live without being stopped c                    s   |d |d }|d |d |d   t jjp:i }| }d|d< fdd	  fd
d}tj|dd}|  |||S )NidZdownloader_optionsZmax_qualitywsws_urlZm3u8protocolc                    s  | st tsrjtddid}jjddr@d |t	
dddd	d
ddd dddd n}| | }|sq|t	|}|r|t |tsq||ddkr|d |d q||ddkr| W d    dS |ddkr6| t|ddthf|d}t|W  d    S jjddr|dt|d  q|W d    n1 st0    Y  d S )NZOriginzhttps://live.nicovideo.jp)headersverboseFzSending startWatching requestTZ	webSocket)Zcommentabler   Zsingle_cookiehighZhls)ZaccessRightMethodZ	chasePlayZlatencyr   quality)	reconnectroomstreamZstartWatching)datatyper   Zpingz{"type":"pong"}z{"type":"keepSeat"}Z
disconnecterrorbodycode)defaultzServer response: d   )
isinstancer   ydlurlopenr   paramsgetZwrite_debugsendjsondumpsrecvloadsdictr   r	   r   r
   )r   r   r'   r   message)r   selfws_extractorr    O/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/downloader/niconico.pycommunicate_ws   sP    




z4NiconicoLiveFD.real_download.<locals>.communicate_wsc               
      s   d} zz  | }|du r$W W d} d S W nV t y| } z>d d|  td W Y d }~W d} qW Y d }~n
d }~0 0 W d} qd} 0 qd S )NFTz[niconico:live] z;: Connection error occured, reconnecting after 10 seconds: 
   )BaseExceptionZ	to_screentimesleep)r   rete)r/   r+   video_idr-   r.   ws_mainH   s     
z-NiconicoLiveFD.real_download.<locals>.ws_mainT)targetdaemon)r   r    r"   copy	threadingThreadstartdownload)r+   filenameZ	info_dictoptsdlZnew_info_dictr7   threadr-   )r/   r   r+   r6   r,   r   r.   real_download   s    /zNiconicoLiveFD.real_downloadN)__name__
__module____qualname____doc__rC   r-   r-   r-   r.   r      s   r   )r%   r;   r2   commonr   Zexternalr   Z
networkingr   Znetworking.websocketr   utilsr   r	   r
   Zutils.traversalr   r   r-   r-   r-   r.   <module>   s   