
    ai.#                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
dZdZedz  dz  ZdZ ej        ed           dZd	Zd
ddgiiZ eej                  dk     r ed            ej        d           	 ej        d         Z ej        ej        d                   Zej        d         Zej        d         Z eej                  dk    rej        d         ndZe                    dd          Zej         !                    ee          Z"n0# e#$ r(Z$ ede$             ej        d           Y dZ$[$ndZ$[$ww xY wd!dZ%d Z&d!dZ'd Z(d Z)d Z*d Z+d Z,e-dk    rg	  ej         ej.         e,                      pd            dS # e#$ r4Z/ ede/             e'd             ej        d           Y dZ/[/dS dZ/[/ww xY wdS )"    Nzws://progress-ws:30022   i   z/var/www/it7/html/downloads/T)exist_okz!https://youtube.it7.kr/downloads/z3http://it7-nginx/service/youtube_history_update.phpyoutubeplayer_clientandroid   u   ❌ Not enough arguments.             .mp4u   ❌ Argument parsing error: c                    K   	 d||d}|r||d<   |                      t          j        |                     d {V  d S # t          $ r}t	          d|            Y d }~d S d }~ww xY w)Nprogress)type
session_idr   messageu   ❌ WebSocket send error: )sendjsondumps	Exceptionprint)wsr   r   r   payloades         7/var/www/it7/html/youtubeDownloader/youtube_download.pysend_ws_messager   3   s      
0$ 
 

  	)!(GIggdj))*********** 0 0 0.1../////////0s   :A   
A'
A""A'c                 P    t           t          j                            |           z   S N)PUBLIC_DOWNLOAD_BASE_URLospathbasename)	file_paths    r   public_download_urlr%   @   s    #bg&6&6y&A&AAA    c                    t           sd S t          j        t          t                     t          | d |pg D             d                              d          }t          j                            t          |ddid          }	 t          j        
                    |d	          5 }|                                                    dd
          }t          d|  d|j         d|d d                     d d d            d S # 1 swxY w Y   d S # t          j        j        t          j        j        t$          t&          f$ r}t          d|            Y d }~d S d }~ww xY w)Nc                 ,    g | ]}t          |          S  )r%   ).0r"   s     r   
<listcomp>z*persist_history_status.<locals>.<listcomp>K   s!    PPP%d++PPPr&   )idr   statusfileszutf-8zContent-Typezapplication/jsonPOST)dataheadersmethod   )timeoutreplace)errorsu   🧾 History update z: HTTP     u   ❌ History update error: )history_log_idr   r   intr   encodeurllibrequestRequestHISTORY_UPDATE_URLurlopenreaddecoder   r-   errorURLError	HTTPErrorTimeoutError
ValueError)r-   converted_filesr   reqresponsebodyexcs          r   persist_history_statusrM   C   s    j.!! PP9NBPPP	   
 vg  .
 
 !34	 !  C2^##C#33 	Xx==??))'))DDDVVVVV$tPSt*VVWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X L!6<#9<T 2 2 203001111111112s=   !D %AD4D DD D	D 1E?EEc                     dddt           d}dddt           d}fd} fd} ||d          r3t          j                                      rt	          d	            S  |              ||d
          r3t          j                                      rt	          d            S t	          d           d S )Nz3bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]mp4T)formatouttmplmerge_output_formatprefer_ffmpegextractor_argszbest[ext=mp4]/bestc                                           dd          } t          j        |           D ]'}	 t          j        |           # t          $ r Y $w xY wd S )Nr   z.f*)r5   globr!   removeOSError)patternleftoveroutput_paths     r   cleanup_fragmentsz)download_video.<locals>.cleanup_fragmentsp   ss    %%fe44	'** 	 	H	(####   	 	s   A
AAc                 "   	 t          j        |           5 }|                    g           d d d            n# 1 swxY w Y   t          j                                      S # t          $ r }t          d| d|            Y d }~dS d }~ww xY w)Nu   ❌ z download error: F)yt_dlp	YoutubeDLdownloadr!   r"   existsr   r   )optslabelydlrL   r[   urls       r   attemptzdownload_video.<locals>.attemptx   s    	!$'' $3cU###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $7>>+... 	 	 	6666677755555	s4   A$ :A$ >A$ >!A$ $
B.B		BPrimaryu   ✅ Downloaded: Fallbacku   ✅ Downloaded with fallback: u#   ❌ Download failed after fallback.)YOUTUBE_EXTRACTOR_ARGSr!   r"   ra   r   )re   r[   primary_optsfallback_optsr\   rf   s   ``    r   download_videorl   ]   s&   G$ 0 L '$0 M          w|Y'' BGNN;,G,G ...///w}j)) bgnn[.I.I <{<<===	
/0004r&   c           
         	 t          j        ddddddd| gt           j        t           j        d	          }t          |j                                                  S # t          $ r}t          d
|            Y d }~d S d }~ww xY w)Nffprobez-vrC   z-show_entrieszformat=durationz-ofz"default=noprint_wrappers=1:nokey=1Tstdoutstderrtextu   ❌ Duration error: )
subprocessrunPIPEfloatrp   stripr   r   )r$   resultr   s      r   get_video_durationry      s    tWou&JI!
 /*/F F F V]((**+++   (Q(()))ttttts   AA 
B&A>>Bc                    g }| dk    r |                     d           | dz  } | dk     | dk     r |                     d           | dz  } | dk      |                     dt          | d                      d                    |          S )Ng       @z
atempo=2.0g      ?z
atempo=0.5zatempo=r	   ,)appendroundjoin)speedchains     r   build_atempo_chainr      s    E
#++\""" #++ #++\""" #++ 
LL,5??,,---88E??r&   c                   K   t          |          }|st          d           d S ||z  }t          dz  |z  dz  }d}t          ||z
            }	|	dk    rt          d           d S t	          |          }
d|z  }g dd	d
dd|dd| d|
 dddddddddddd|	 dd|	 dd|	dz   dddd | dd!d"|}t          d#d$                    |                      t          | |d           d {V  t          j        |t          j	        t          j
        d%&          }d}|j        D ]}|                    d'          r	 t          |                                                    d(          d                   }|d)z  }t          ||z  d*z            }t          |d*          }||k    r,t          | ||           d {V  t          d+| d,           |}# t           $ r}t          d-|            Y d }~d }~ww xY w|                                 t          | |d*           d {V  |j        dk    rt          d.| d/|            |S t          d0|j                    d S )1Nu   ❌ Cannot get video duration.r3   i     r   u   ❌ Bitrate too low.r
   ffmpegz-yz-hwaccelcudaz-iz-filter_complexz[0:v]setpts=z*PTS[v];[0:a]z[a]z-mapz[v]z-c:v
h264_nvencz-presetp1z-rcvbrz-b:vkz-maxratez-bufsizer	   z-c:aaacz-b:az	-progresszpipe:1u   ✨ Running: r7   Tro   zout_time_ms==i@B d   u   🚀 %u   ❌ Parsing error: u   ✅ zx Conversion Done: u   ❌ ffmpeg Error. Return code: )ry   r   TARGET_FILESIZE_BYTESr:   r   r~   r   rs   Popenru   STDOUTrp   
startswithrw   splitminr   wait
returncode)r   
input_fileoutput_filer   r   durationnew_durationtarget_total_kbps
audio_kbps
video_kbpsatempo_chainsetpts_valuecmdprocesslast_progresslineout_time_mscurrent_secr   r   s                       r   convert_videor      s     !*--H .///te#L.2lBTIJ&344JQ$%%%t%e,,Lu9L"$*,02<V,VV\VVV 	    % 		 	 (	 *.	 05	 7<	
 	
    
 #-
 2<.>.>.>
 AK
 PZZ[|L^L^L^ 	   #-/// 	   +C 

)#((3--
)
)***
"j!
,
,,,,,,,,s:?:CT[_```GM 1 1??>** 	1
1!$**,,"4"4S"9"9!"<==)I5l :cABBx--},,)"j(CCCCCCCCC-(---...$,M 1 1 1/A//000000001	1 LLNNN
"j#
.
........Q<U<<{<<===D0BDDEEEts   BG//
H9HHc            
      T  K   t          j                     } t          j        t                    D ]}t          j                            t          |          }t          j                            |          rL| t          j                            |          z
  dk    r&t          j        |           t          d|            t          j        t                    4 d {V }t          |t          dd           d {V  t          t           t"                    }|rt          j                            |          s2t          d           t'          d           	 d d d           d {V  dS g }t(          D ]}t          j                            t          t*           d	| d
          }t-          |||t/          |          t                     d {V }|r4t          j                            |          r|                    |           t          j                            |          r#t          j        |           t          d           t          t3          j        d|i                     t'          |rdnd|           	 d d d           d {V  dS # 1 d {V swxY w Y   d S )Ni,  u   🗑 Deleted r   u   다운로드 중...)r   u   ❌ Download failed.failedr	   _zx.mp4u   🗑 Removed original file.rH   	completed)timer!   listdirDOWNLOAD_DIRr"   r~   isfilegetmtimerW   r   
websocketsconnectWEBSOCKET_SERVER_URLr   r   rl   re   r[   ra   rM   speed_optionsbase_filenamer   rv   r|   r   r   )	nowfr"   r   
downloadedrH   r   r   rx   s	            r   mainr      s3     
)++CZ%% * *w||L!,,7>>$ 	*C"'*:*:4*@*@$@3$F$FIdOOO($(()))!"677       2b*a9NOOOOOOOOOO $C55
 	
!;!; 	()))"8,,,              " 	4 	4E',,|5T5T5T5T5TUUK(ZeEllT^________F 4"'..55 4&&{333 7>>*%% 	2Ij!!!0111 	dj+_=>>???oK{{8_]]]5                             s   !A9J-DJ
J!$J!__main__u   ❌ Worker fatal error: r   r   )0r^   r!   rV   rs   sysr   r   asyncior   urllib.errorr<   urllib.requestr   TARGET_FILESIZE_MBr   r   makedirsr    r?   ri   lenargvr   exitre   loadsr   original_filenamer   r9   r5   r   r"   r~   r[   r   r   r   r%   rM   rl   ry   r   r   r   __name__rt   rL   r)   r&   r   <module>r      s     				      



                /   *T1D8 - L4 ( ( ( (> J 
 )  3sx==1	E
%&&&CHQKKK

(1+CDJsx{++M!J$'CMMA$5$5SXa[[2N%--fb99M',,|->??KK   	E
,
,
,---CHQKKKKKKKK
0 0 0 0B B B2 2 2 24/ / /d	 	 		 	 	9 9 9x# # #J zTTVV$$)*****   ...///x((( s1   BD E$EE0(F G)GG