a
    ;h                     @   sp   d dl Z d dlZ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
 G dd deZG d	d
 d
eZdS )    N   )FileDownloader)FFmpegFD   )
websocketsc                   @   s    e Zd ZdZdd Zdd ZdS )FFmpegSinkFDz8 A sink to ffmpeg for downloading fragments in any form c                    sL     }d|d< fdd G  fdddt}|jjp@i ||S )N-urlc                    s   zzz | I d H  W n ty*   Y n0 W tt  |  |  W d    n1 s^0    Y  tt t	j
 nNtt  |  |  W d    n1 s0    Y  tt t	j
 0 d S N)real_connectionOSError
contextlibsuppressflushcloseoskillgetpidsignalSIGINT)procstdin)	info_dictself `/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/yt_dlp/downloader/websocket.py	call_conn   s    &&z-FFmpegSinkFD.real_download.<locals>.call_connc                       s$   e Zd Zedd Z fddZdS )z1FFmpegSinkFD.real_download.<locals>.FFmpegStdinFDc                 S   s   t  S r
   )r   get_basename)clsr   r   r   r      s    z>FFmpegSinkFD.real_download.<locals>.FFmpegStdinFD.get_basenamec                    s&   t jtjd ||fd}|  d S )NT)targetdaemonargs)	threadingThreadasynciorunstart)r   r   r   threadr   r   r   on_process_started#   s    zDFFmpegSinkFD.real_download.<locals>.FFmpegStdinFD.on_process_startedN)__name__
__module____qualname__classmethodr   r)   r   r(   r   r   FFmpegStdinFD   s   
r.   )copyr   Zydlparamsdownload)r   filenamer   Z	info_copyr.   r   )r   r   r   r   real_download   s
    	zFFmpegSinkFD.real_downloadc                    s   t ddS )z Override this in subclasses z-This method must be implemented by subclassesN)NotImplementedError)r   sinkr   r   r   r   r   )   s    zFFmpegSinkFD.real_connectionN)r*   r+   r,   __doc__r3   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )WebSocketFragmentFDc              	      s   t j|d |di d4 I d H D}| I d H }t|trF|d}|| q$W d   I d H  q|1 I d H sr0    Y  d S )Nr	   http_headers)extra_headersutf8)r   connectgetrecv
isinstancestrencodewrite)r   r5   r   wsr=   r   r   r   r   /   s
    $

z#WebSocketFragmentFD.real_connectionN)r*   r+   r,   r   r   r   r   r   r7   .   s   r7   )r$   r   r   r   r"   commonr   Zexternalr   Zdependenciesr   r   r7   r   r   r   r   <module>   s   "