Ë
    Î9´jy  ã                   óü   — 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  ed«      Z ed«      ZdZ	 ed«      Z
dd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zedk(  r- edd¬«       	  e e«       d¬«        ej(                  d«       Œ"y)é    N)ÚPathz%/root/workspace/shorts_data/shorts.dbz!/root/workspace/shorts_data/mediaz/root/.local/bin/yt-dlpz//root/workspace/shorts_data/youtube-cookies.txtc                 óV   — | j                  d|f«      j                  «       }|r|d   S |S )Nz&SELECT value FROM settings WHERE key=?r   )ÚexecuteÚfetchone)ÚdbÚkeyÚdefaultÚrows       ú /root/workspace/shorts_worker.pyÚsettingr      s/   € Ø
�*‰*Ð=À¸vÓ
F×
OÑ
OÓ
Q€CÙˆ3ˆq‰6Ð%˜gÐ%ó    c                  ó4   — t        j                  | ddd¬«      S )NTi„  )ÚtextÚcapture_outputÚtimeout)Ú
subprocessÚrun)Úargss    r   Úcommandr      s   € Ü�>‰>˜$ T¸$ÈÔLÐLr   c                  óx   — t         j                  «       rdt        t         «      fnd}t        g|¢d‘d‘d‘d‘| ¢­S )Nz	--cookies© z--js-runtimesÚnodez--remote-componentsz
ejs:github)ÚCOOKIESÚis_fileÚstrÚYTDLP)r   Úauths     r   Ú
ytdlp_argsr      sD   € Ü*1¯/©/Ô*;ˆKœœW›Ñ&À€DÜÐ^�DÐ^˜/Ð^¨6Ð^Ð3HÐ^È,Ð^ÐY]Ñ^Ð^r   c           	      ó@  — t        t        dddd| «      Ž }|j                  dk7  rt        |j                  dd  xs d«      ‚t        j                  |j                  «      }|j                  d«      xs |g}|D �cg c]  }|sŒ|j                  d	«      sŒ|‘Œ c}S c c}w )
Nz--flat-playlistz--dump-single-jsonz--playlist-endÚ5r   éþÿÿz yt-dlp could not read the sourceÚentriesÚid)	r   r   Ú
returncodeÚRuntimeErrorÚstderrÚjsonÚloadsÚstdoutÚget)ÚurlÚresultÚdatar"   Úes        r   Úprobe_sourcer/      s�   € Ü”jÐ!2Ð4HÐJZÐ\_ÐadÓeÐf€FØ×Ñ˜AÒÜ˜6Ÿ=™=¨¨Ð/ÒUÐ3UÓVÐVÜ�:‰:�f—m‘mÓ$€DØ�h‰h�yÓ!Ò+ d V€GØÖ4�!¢!¨¯©¨d­ŠAÒ4Ð4ùÒ4s   Á:BÂBÂBc                 ó4  — d}|D ]�  }|d   }|j                  d«      xs d|› �}|j                  d«      xs |}| j                  d|f«      j                  «       }|rŒY| j                  d||dd	d	t        t	        j                  «       «      f«       |d
z  }Œ’ |S )Nr   r#   Úwebpage_urlz https://www.youtube.com/watch?v=Útitlez+SELECT 1 FROM candidates WHERE source_url=?zjINSERT INTO candidates(source_url,title,status,ratings_json,warnings_json,created_at) VALUES (?,?,?,?,?,?)Ú
discoveredz[]é   )r*   r   r   ÚintÚtime)	r   Ú
source_urlr"   ÚcreatedÚentryÚvideo_idr+   r2   Úexistss	            r   Úinsert_source_candidatesr<   &   sã   € Ø€GØò ˆØ˜‘;ˆØ�i‰i˜Ó&ÒWÐ,LÈXÈJÐ*WˆØ—	‘	˜'Ó"Ò. hˆØ—‘ÐIÈCÈ6ÓR×[Ñ[Ó]ˆÙØØ
�
‰
Ðð  CFð  HMð  O[ð  ]að  cgô  ilô  mq÷  mvñ  mvó  mxó  iyð  Bzô  	{Ø�1‰‰ðð €Nr   c                 óÜ  — |\  }}t         j                  dd¬«       t         t        |«      z  }|j                  d¬«       |dz  }|j                  «       skt	        t        ddddd	d
t        |«      |«      Ž }|j                  dk7  r;| j                  ddt        j                  |j                  dd  xs dg«      |f«       y |dz  }|j                  «       syt	        dddddt        |«      ddddddddddd d!t        |«      «      }|j                  dk7  r;| j                  ddt        j                  |j                  dd  xs d"g«      |f«       y | j                  d#t        |«      d$|f«       y )%NT)ÚparentsÚexist_ok)r?   z
source.mp4z--no-playlistz-fz$bv*[height<=1080]+ba/b[height<=1080]z--merge-output-formatÚmp4z-or   z:UPDATE candidates SET status=?, warnings_json=? WHERE id=?Úerrorr!   zdownload failedzclip.mp4Úffmpegz-yz-ssÚ0z-iz-tÚ60z-vfzCscale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920z-c:vÚlibx264z-presetÚveryfastz-crfÚ23z-c:aÚaaczrender failedz6UPDATE candidates SET clip_path=?, status=? WHERE id=?Úawaiting_agent_scores)ÚMEDIAÚmkdirr   r;   r   r   r$   r   r'   Údumpsr&   )r   r
   Úcidr+   ÚworkÚsourcer,   Úclips           r   Úprocess_candidaterQ   4   s  € Ø�H€CˆÜ	‡K�K˜ t€KÔ,Ü”3�s“8Ñ€DØ‡J�J˜€JÔØ�LÑ €FØ�=‰=Œ?Üœ* _°dÐ<bÐd{ð  ~Cð  EIô  KNð  OUó  KVð  X[ó  \ð  ]ˆØ×Ñ Ò!Ø�J‰JÐSÐV]Ô_c×_iÑ_iÐkq×kxÑkxÐy}Ðy~Ðkò  lUð  DUð  kVó  `Wð  Y\ð  V]ô  ^ð  `fØ�*Ñ€DØ�;‰;Œ=ä˜ 4¨°°T¼3¸v»;ÈÈdÐTYð  \að  cið  ktð  vð  AKð  MSð  UYð  [að  chô  jmð  nró  jsó  tˆØ×Ñ Ò!Ø�J‰JÐSÐV]Ô_c×_iÑ_iÐkq×kxÑkxÐy}Ðy~Ðkò  lSð  DSð  kTó  `Uð  WZð  V[ô  \ð  ^dØ‡J�JÐGÌ#ÈdË)ÐUlÐnqÐIrÕsr   c                  óp  — t        j                  t        «      5 } t        t	        j                  «       «      }| j                  dd«       | j                  ddt        |«      f«       | j                  «        t        | d«      }|skddddœ}| j                  dd	«       | j                  dd
t        t        t	        j                  «       «      «      f«       | j                  «        |cd d d «       S 	 t        |«      }t        | ||«      }| j                  d«      j                  «       D ]  }t        | |«       Œ dt        |«      |dœ}| j                  dd«       | j                  dd
t        t        t	        j                  «       «      «      f«       | j                  dd«       | j                  ddt        j                  |«      f«       | j                  «        |cd d d «       S # t         $ rº}t        |«      }d|dœ}| j                  dd«       | j                  dd
t        t        t	        j                  «       «      «      f«       | j                  dd|f«       | j                  ddt        j                  |«      f«       | j                  «        |cY d }~cd d d «       S d }~ww xY w# 1 sw Y   y xY w)Nz7INSERT OR REPLACE INTO settings(key,value) VALUES (?,?))Úworker_statusÚscanningÚscan_startedr7   ÚidleÚsource_url_not_configuredr   )ÚstatusÚreasonr8   )rS   rV   Ú	last_scanzFSELECT id,source_url FROM candidates WHERE status='discovered' LIMIT 1Úok)rX   r"   r8   )rS   r[   )Ú
last_errorÚ Úlast_resultrA   )rX   rA   )rS   rA   r\   )Úsqlite3ÚconnectÚDBr5   r6   r   r   Úcommitr   r/   r<   ÚfetchallrQ   Úlenr'   rL   Ú	Exception)	r   ÚstartedrO   r,   r"   r8   r
   ÚexcÚmessages	            r   Úrun_onceri   G   s_  € Ü	�‰œÓ	ð   Ü”d—i‘i“kÓ"ˆØ
�
‰
ÐLÐNjÔkØ
�
‰
ÐLÈ~Ô^aÐbiÓ^jÐNkÔlØ
�	‰	ŒÜ˜˜\Ó*ˆÙØ &Ð2MÐZ[Ñ\ˆFØ�J‰JÐPÐRjÔkØ�J‰JÐPÐS^Ô_bÔcfÔgk×gpÑgpÓgrÓcsÓ_tÐRuÔvØ�I‰IŒKØ÷ ñ  ð	Ü" 6Ó*ˆGÜ.¨r°6¸7ÓCˆGØ—z‘zÐ"jÓk×tÑtÓvò +�Ü! " cÕ*ð+à $´°W³È'ÑRˆFØ�J‰JÐPÐRhÔiØ�J‰JÐPÐS^Ô_bÔcfÔgk×gpÑgpÓgrÓcsÓ_tÐRuÔvØ�J‰JÐPÐRcÔdØ�J‰JÐPÐS`Ôae×akÑakÐlrÓasÐRtÔuØ�I‰IŒKØ÷/ ñ  øô0 ò 	Ü˜#“hˆGØ '°'Ñ:ˆFØ�J‰JÐPÐRkÔlØ�J‰JÐPÐS^Ô_bÔcfÔgk×gpÑgpÓgrÓcsÓ_tÐRuÔvØ�J‰JÐPÐS_ÐahÐRiÔjØ�J‰JÐPÐS`Ôae×akÑakÐlrÓasÐRtÔuØ�I‰IŒKØŒM÷A ñ  ûð0	ú÷1 ð  ús8   šCJ,Ã1C+G&Ç&	J)Ç/B&J$ÊJ)ÊJ,Ê$J)Ê)J,Ê,J5Ú__main__zshorts worker startedT)Úflushé
   )r]   )r'   Úosr_   r   r6   Úpathlibr   ra   rJ   r   r   r   r   r   r/   r<   rQ   ri   Ú__name__ÚprintÚsleepr   r   r   ú<module>rr      sŸ   ðã Û 	Û Û Û Ý á	Ð
1Ó2€ÙÐ0Ó1€Ø!€Ù
Ð@Ó
A€ó&ò
Mò_ò
5òòtò&!ðH ˆzÒÙ	Ð
!¨Õ.Ø
Ù‰h‹j Õ%Øˆ�
‰
�2Œð ð r   