
    ]j&                       d dl m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 dlmZ  ee                                          j        d         Zedz  ZdZdZd'dZd(dZd)dZd*dZd+dZd,dZd-dZedk    r	  ej         e                       dS # e$ rZ dd e!e           j         d e  ej        "                    ej#        j$                  %                                d!Z&	  ej'        e(                    d"#                    Z) e ee)d$          e&           n# e$ r Y nw xY w e* ej+        e&d%          ej,        &            ej        d           Y dZ [ dS dZ [ ww xY wdS ).    )annotationsN)Path   zscript/project-manifest.jsonz0http://192.168.40.32:7861/voice/ngoc-huyen-cloneu   Các bạn đang nghe truyện được phát từ Gác Mái Audio, chúc các bạn có những giây phút nghe truyện vui vẻ. Hãy ủng hộ chúng tôi bằng cách like video và đăng ký kênh.pathr   returnstrc                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   script/build-intro.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)r   digestchunkr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'manifestdictkeyc                   |                      d          pi                      |          }t          |t                    r|st          d| d          t	          |          }|                                s
t          |z  }	 |                                                    t                                                     n%# t          $ r}t          d|           |d }~ww xY w|S )Nactive_pathszactive_paths.z is missingzactive path escapes project: )
get
isinstancer   RuntimeErrorr   is_absoluteROOTresolverelative_to
ValueError)r   r   valuer   excs        r   resolve_activer(      s    \\.))/R44S99EeS!! = =;3;;;<<<;;D d{K""4<<>>2222 K K K@3@@AAsJKKs   >C 
C$CC$databytesNonec                   | j                             dd           t          j        d| j         d| j                   \  }}	 t          j        |d          5 }|                    |           |                                 t          j	        |
                                           d d d            n# 1 swxY w Y   t          j        ||            t
          j                            |          rt          j        |           d S d S # t
          j                            |          rt          j        |           w w xY w)NTparentsexist_ok.)prefixdirwb)parentmkdirtempfilemkstempnameosfdopenwriteflushfsyncfilenoreplacer   existsunlink)r   r)   fdr8   r   s        r   atomic_bytesrC   ,   sX   KdT222'749'7'7'7T[IIIHBYr4   	&FLLLLNNNHV]]__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	
47>>$ 	IdOOOOO	 	27>>$ 	IdOOOO	s1   D AB6*D 6B::D =B:>D 6Er&   c                |    t          | t          j        |dd          dz                       d                     d S )NF   )ensure_asciiindent
utf-8)rC   jsondumpsencode)r   r&   s     r   atomic_jsonrM   :   s=    
5uQGGG$NVVW^__`````r   objectbytes | Nonec                N   t          | t                    rdD ]}|                     |          }t          |t                    r|                    d          r|                    dd          d         n|}	 t          j        |d          }n# t          $ r d}Y nw xY w|                    d	          r|d
d         dk    r|c S | 	                                D ]}t          |          }|r|c S n/t          | t                    r| D ]}t          |          }|r|c S d S )N)audio_base64base64audior)   zdata:,r   T)validater      RIFF         WAVE)r   r   r   r   
startswithsplitrR   	b64decode	Exceptionvalues
find_audiolist)r&   r   itemrawdecodedfounds         r   r`   r`   >   sn   % > 		# 		#C99S>>D$$$ #040H0HRdjja((,,d"$.sTBBBGG  " " "!GGG"%%g.. #71R4=G3K3K"NNNLLNN 	 	Dt$$E 	 
E4	 	   	 	Dt$$E 4s   8BBBc                |    t          j        t          j        dddddddt	          |           gd	                    S )
Nffprobe-verrorz-show_entriesz[format=duration:stream=codec_name,codec_type,width,height,sample_rate,channels,r_frame_ratez-ofrJ   T)text)rJ   loads
subprocesscheck_outputr   )r   s    r   probern   V   sM    :j-4/evs4yy/ 	     r   intc                 `   t          j        t                              d                    fddD             t          j        d                             d                    } t          j        d                             d                    }|                     d          }|                     d          d	k    s|                     d
          durt          d          |                    d          d	k    s0|                    d
          dus|                    d          |k    rt          d          |                    di                               t          d                             t                              i           }|                    d          t          d                   k    rt          d          fddD             }|rt          d|           dD ]$}|         j
                            dd           %t          j                            t          dddd                              d          }t          j                            t&          |ddid          }t          j                            |d           5 }|                                }	|j        }
|j                            dd!          }d d d            n# 1 swxY w Y   |	                    d"          r|	d#d$         d%k    r|	nd }|4t3          t          j        |	                    d                              }|t          d&          t7          d'         |           t9          d'                   }d( |                    d)g           D             st          d*          t;          j        d+d,d-d.d/d0d1d2d3d4d5d6t          d7                   gd8           t;          j        d+d,d-d.d1t          d'                   d1t          d7                   d9d:d;d<d=d>d?d@d5d6t          dA                   gd8           t?          |dB         dC                   }t?          t9          d7                   dB         dC                   }t?          t9          dA                   dB         dC                   }tA          |dDz
            dEk    stA          ||z
  dDz
            dFk    rt          dG          t;          j        g d+d,d-d.dHd@d1t          d                   d1t          dA                   d3|dIdJdKdLdMdNdOdPdQdRdSd5dTd=d>d?d4dUdVt          dW                   d8           t9          dW                   }t?          |dB         dC                   }|                    d)g           }dX |D             }dY |D             }|
dZk    otA          ||z
            d[k    otC          |          d\k    otC          |          d\k    o|d]                             d^          d_k    ottE          |d]                             d`d]                    tE          |d]                             dad]                    fdbk    o|d]                             d^          dTk    }i d|rd	ndcd
|d|dt          d                   t          d                   dddet          d                   dft          d                   dgt          dW                   dht          dit&          djddkdldmddn|
do|dpt          d'                   dqt          d'                   dr|t          d7                   t          d7                   |t          dA                   t          dA                   |t          dW                   |tA          ||z
            |tF          j#        $                    tF          j%        j&                  '                                dsdt}tQ          du         |           tS          t          j*        |d         ||t          du                   dvdwx                     |rd]nd\S )yNrI   encodingc                2    i | ]}|t          |          S  )r(   ).0r   projects     r   
<dictcomp>zmain.<locals>.<dictcomp>`   s1       3S.#..   r   )promotion_receiptlayout_receiptintro_normalizedintro_voiceintro_silenceintro_audiointrointro_receiptrx   ry   canon_sha256status	completedverifiedTzpromotion is not verifiedsource_canon_sha256z*layout receipt is absent, failed, or stale	artifactsrz   r   z2intro poster differs from verified layout artifactc                n    g | ]1}|                                          t          |                   2S rt   )r@   r   )ru   r   pathss     r   
<listcomp>zmain.<locals>.<listcomp>n   sh      M  M  MCx}  B  yC  yJ  yJ  yL  yL  ME#J  M  M  Mr   )r{   r|   r}   r~   r   zGintro production outputs already exist and require audit/invalidation: r-   
doc_truyenz1.0true)rj   stylespeeddenoisezContent-Typez!application/x-www-form-urlencodedPOST)r)   headersmethodiX  )timeout rW   rX   rY   rZ   z"intro TTS response contains no WAVr{   c                D    g | ]}|                     d           dk    |S 
codec_typerS   r   ru   rb   s     r   r   zmain.<locals>.<listcomp>   s/    aaaTtxx?U?UY`?`?`D?`?`?`r   streamsz*intro voice failed independent audio probeffmpegrh   ri   z-yz-flavfiz-izanullsrc=r=48000:cl=monoz-t2z-c:a	pcm_s16ler|   )checkz-filter_complexz[0:a][1:a]concat=n=2:v=0:a=1[a]z-mapz[a]z-ar48000z-ac1r}   formatdurationg       @gMbP?g{Gz?z0intro audio/silence duration verification failedz-loopz.6fz-r30z-c:v
h264_nvencz-presetp4z-cq21z-pix_fmtyuv420paacz	-movflagsz
+faststartr~   c                D    g | ]}|                     d           dk    |S )r   videor   r   s     r   r   zmain.<locals>.<listcomp>   .    SSSd,1G1G71R1RT1R1R1Rr   c                D    g | ]}|                     d           dk    |S r   r   r   s     r   r   zmain.<locals>.<listcomp>   r   r      g:m?r   r   
codec_nameh264widthheight)i  i8  failed)r   r   
input_pathinput_sha256output_path
intro_textendpointr   r   g      ?r   http_statusresponse_content_type
voice_pathvoice_sha256voice_duration_secondszsha256 streaming 8 MiB)silence_pathsilence_sha256silence_duration_secondsintro_full_pathintro_full_sha256audio_duration_secondsartifact_sha256video_duration_secondsduration_delta_secondsindependent_probecompleted_athash_methodr   )r   r   duration_secondsreceiptFrF   )+rJ   rk   PROJECT_MANIFEST	read_textr   r    r   r$   r"   r   r4   r5   urllibparse	urlencodeTEXTrL   requestRequestENDPOINTurlopenr   r   r   r[   r`   decoderC   rn   rl   runfloatabslenro   datetimenowtimezoneutc	isoformatrM   printrK   )	promotionlayout
canon_hash
normalizedexistingr   payloadr   responsebodyr   content_typerS   voice_probevoice_durationsilence_durationaudio_durationvideo_probevideo_durationr   video_streamsaudio_streamsr   r   r   rv   s                           @@r   mainr   ^   s
   j)33W3EEFFG    ;   E 
5!45???QQRRIZ./9979KKLLF~..J}}X+--z1J1JRV1V1V6777zz({**fjj.D.DD.P.PTZT^T^_tTuTu  zD  UD  UDGHHHK,,00U;M5N5Z5Z[_5`5`1a1aceffJ~~h6%0B*C#D#DDDOPPP M  M  M  M+t  M  M  MH qoemoopppX = =c
t<<<<l$$|e& &  vg  n$$w!DEf %  G 
				5	5 @}}o'++NB??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ OOG,,Padw1F1FDDDE}4:dkk'&:&:;;<<}?@@@}%u---m,--Kaa[__Y;;aaa IGHHHN$tWd<Vc6;E/,B(C(C     N$tS}1E-F-Fc%())+<)65%sFKU=-A)B)B	
     ;x0<==NU5#9::8DZPQQ5}!566x@LMMN
c!""U**c.>2QTW2W.X.X[_._._MNNNN !%'.0359;>uEW?X;Y;Y%&'')-2@/F/FHLNR 	  ( *. 05 7; =G IR 		 	 	 &	 (-	 /2	 4?	 AM	
 	E'N     g''K;x0<==Nooi,,GSSgSSSMSSgSSSMs 	8s>N#BCC~U 	8!#	8(+M(:(:a(?	8!  ..&8	8 q!%%gq1122Ca8H8L8LXWX8Y8Y4Z4Z[_kk	8 !  ..%7 7++x9CXz 	3u-='>#?#?6RWXhRiKjKjkk 	c% 2344	 7EfUSeMfFgFg	
 	s5>**
 -9$ 	H &| 6=c DMd 	{ %<\ 	c%.// 2@mH\A]A] 	!. E/233veTcNdGeGe$4u]3446RWXeRfKgKg"0VERYNE[E["0"%n~&E"F"F( )--h.?.CDDNNPP/%  G( o&000	$*(#*s5;Q7R7R        11as   &7K))K-0K-__main__r   Fz: )r   r   ri   	failed_atrI   rq   r   r   )file)r   r   r   r   )r   r   r   r   r   r   )r   r   r)   r*   r   r+   )r   r   r&   r   r   r+   )r&   rN   r   rO   )r   r   r   r   )r   ro   )-
__future__r   rR   r   r   rJ   r9   rl   sysr6   urllib.parser   urllib.requestpathlibr   __file__r#   r.   r"   r   r   r   r   r(   rC   rM   r`   rn   r   __name__exitr^   r'   typer   r   r   r   failurerk   r   rv   r   rK   stderrrt   r   r   <module>r      s   " " " " " "     				     



               tH~~'*88 = X         a a a a   0   g  g  g  g T z   ES		*33c33!*..x/@/DEEOOQQ
 

	 dj!1!;!;W!;!M!MNNGKw@@'JJJJ 	 	 	D	jdju555CJGGGG s=   	B# #E:(AE57:D21E52D:7E59D::5E55E: