
    ^\j                     t   d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ  e	e                                          j        d         Z e	j                    dz  Zedz  Z ed          Zd	d
hZdZdZd ZddZd Zd Zd Zd Zd ZddZd Zd Z d Z!d Z"e#dk    r e$ e"                      dS )    N)datetime	timedeltatimezone)Path)ZoneInfo   z!.config/huyen-an-audio/postiz.envzlog/postiz-schedule.jsonzAsia/Ho_Chi_MinhQUEUE	PUBLISHEDcmrq10vod000hj7cbt8zvuj6acmrpr0j9u000bj7cboqonlx4bc                     i } t                                                                           D ]}|                                }|r|                    d          sld|v rh|                    dd          \  }}|                                                    d                              d          | |                                <   | S )N#=r   "')CONFIG	read_text
splitlinesstrip
startswithsplit)drawskvs        script/schedule-postiz.pyenvr      s    ))++ C CSIIKK! Cq||C   CSAXXwws1~~31Q17799??3#7#7#=#=c#B#Ba		l	    c           	      J   |(t          j        |d                                          nd }t          j                            |                     d          |z   |d|i|rddini |          }	 t          j                            |d	          5 }t          j        |          cd d d            S # 1 swxY w Y   d S # t          j	        j
        $ rN}t          d
|j         d|                                                    d          d d                    |d }~ww xY w)NFensure_ascii/AuthorizationzContent-Typezapplication/json)dataheadersmethodx   )timeoutzPostiz HTTP z: replace)errorsi  )jsondumpsencodeurllibrequestRequestrstripurlopenloaderror	HTTPErrorRuntimeErrorcodereaddecode)	basekeyr'   pathpayloadbodyreqres	            r   r0   r0      s|   9@9Ldje,,,33555RV^DKK,,T1t_UX  ER  DH  ]P]kl~\\  NP  ER  Z`  a  aC~c#..G!49Q<<GGGGGGGGGGGGGGGGGG  C  C  C,7zaf7z7zPQPVPVPXPXP_P_gpP_PqPqrwswrwPx7z7z*{*{  BC  %C  Cs=   1!C  B3&C  3B77C  :B7;C   D"A	DD"c                     t          j        t          |                               dd                    }|j         |                    t
          j                  n|                    t
          j                  S )NZ+00:00tzinfo)r   fromisoformatstrr*   rG   r   utc
astimezone)valuedts     r   parserN      s    3u::--c(;;<<gigpgxBJJV^VbJDcDcDc  A  L  L  MU  MY  Z  Z  >Zr   c                     |                      d          pi }t          |t                    r|                     d          nd S )Nintegrationid)get
isinstancedictpostxs     r   iidrX       s:    88M bz!D7I7I(Sdt!Sr   c                 |    |                      d          p|                      d          }|rt          |          nd S )NpublishDatedate)rR   rN   rU   s     r   whenr\   "   s8    88M.dhhv..!6MeAhhh/Mr   c                     t          | t                    r*|                     d|                     d|                     n| S )Npostsr%   )rS   rT   rR   )r>   s    r   rowsr_   $   s:    ZX_`dMeMerWW[[-H-HIIIkrrr   c           	      l   t           j                            |                                                    dd          |                                                    dd          d          }d |D             }t          t          | |dd|z                       D ]}t          |          }t          |	                    dd                    
                                }	t          |          }
||v r=|
r;|	t          v r2||                             |	                    d	          |	|
d
           |S )NrE   rD   )	startDateendDatec                     i | ]}|g S  rd   .0rW   s     r   
<dictcomp>zcalendar.<locals>.<dictcomp>'   s    
!
!
!A1R
!
!
!r   GETz/posts?state rQ   )rQ   ri   r[   )r/   rN   	urlencode	isoformatr*   r_   r0   rX   rI   rR   upperr\   OCCUPIEDappend)r;   r<   startendtargetsqfilteredrV   rP   ri   stamps              r   calendarrv   %   s@   	<u'8'8'@'@#'N'NY\YfYfYhYhYpYpqyz}Y~Y~  A  A
!
!
!
!
!'$s515566 L LT$ii+c$((72"6"677==??d4jjH5H+<+<Xk=R=Y=Y`d`h`him`n`nw|  EJ  [K  [K  >L  >L  >Lr      c           
      t   |                      t                    }g }g }|                    d          D ]V}t          t          |                                                    d                    \  }}|                    ||f           Wt          |          D ]}	|                                t          |	          z   }
|D ]f\  }}t          |
j        |
j        |
j        ||t                                         t          j                  }|| k    r|                    |           gt!          |          S )N,:daysrF   )rK   LOCALr   mapintr   ro   ranger[   r   r   yearmonthdayr   rJ   sorted)now_utcslotsr|   	now_localresultparsed_slotsitemhmnr   ru   s               r   
candidatesr   ,   s#   e$$BV[[ B BT	#djjll  %%&&#!A|':':Aa5'A'A'A'A
++ ) )Qnnya((((# ) )ca	#(39SWQq	>	>	>	I	I(,	W	W5GmmFMM%((() 	vr   c                 n    | D ]"t          fd|D                       rc S #t          d          )Nc              3   \   K   | ]&}t          fd |         D                        V  'dS )c              3   t   K   | ]2}t          |d          z
                                            dk     V  3dS )r[   r   N)abstotal_seconds)rf   rW   ru   s     r   	<genexpr>z#choose.<locals>.<genexpr>.<genexpr>9   sD      TTaaio4466779TTTTTTr   Nany)rf   targetrt   ru   s     r   r   zchoose.<locals>.<genexpr>9   sI      kkY_STTTT8FCSTTTTT	Tkkkkkkr   z"No common slot in candidate window)allr7   )candsrt   rr   ru   s    ` @r   chooser   7   sZ     y yUkkkkkcjkkkkkxsxlxlxlxx8999r   c           	          t          | |t          d          z
  t          d          z   |          fd|D             S )N   minutesc                 :    i | ]}|fd |         D             S )c                     g | ]Z}t          |d          z
                                            dk     0|d         |d         |d                                          d[S )r[   r   rQ   ri   )rQ   ri   rZ   )r   r   rl   )rf   rW   slots     r   
<listcomp>z*exact_found.<locals>.<dictcomp>.<listcomp>=   s      Z  Z  Z[\qtvwx~v  AE  wE  vT  vT  vV  vV  rW  rW  XY  rY  rYqwqz&	@S@S@U@UVV  rY  rY  rYr   rd   )rf   r   exactr   s     r   rg   zexact_found.<locals>.<dictcomp>=   sc      	q  	q  	q  _e  Z  Z  Z  Z`efl`m  Z  Z  Z  	q  	q  	qr   )rv   r   )r;   r<   r   rr   r   s     ` @r   exact_foundr   ;   sv    Si22224	!8L8L8L3LWUU 	q  	q  	q  	q  	q  ip  	q  	q  	q  qr   c                 :     t           fd|D                       S )Nc              3   V   K   | ]#}t          d  |         D                       V  $dS )c              3   .   K   | ]}|d          dk    V  dS )ri   r	   Nrd   re   s     r   r   z(both_queued.<locals>.<genexpr>.<genexpr>?   s+      ;;'
G#;;;;;;r   Nr   rf   r   founds     r   r   zboth_queued.<locals>.<genexpr>?   s>      RRC;;U6];;;;;RRRRRRr   )r   )r   rr   s   ` r   both_queuedr   >   s&    RRRR'RRRRRRr   c                  x   t           dz  t           dz  t           dz  g} d | D             }|r%t          dd                    |          z             t                      }|d         }|d         }|d	         }|d
         }|                    dd          }||ft
          t          fk    rt          d          t          j	        t           dz  
                                          }t          j	        t           dz  
                                          }	t          j	        t           dz  
                                          }
|	d         }|                    d          dus|                    d          |k    rt          d          |
                    d          dusD|
                    d          |k    s+|
                    di                               d          durt          d          t                                          rt          j	        t          
                                          }|                    d          du rt          d          |                    d          dk    rB|                    d          |k    r(|                    d          rt          |d                   }t          |||||f          t          ||f          r|                    dddt#          j        t&          j                                                  d           t                              t          j        |dd          dz              t1          t          j        dd|d          d!d"                     d#S t3          fd$||fD                       rt          d%          |d&         d'         }|d&         d(         }i }||fD ]/}t5          ||d)d*|z             }t          |d+                   ||<   0t#          j        t&          j                  }t7          ||          }t9          |||t;          d,-          z
  |d.         t;          d,/          z   ||f          }t=          ||||f          }t9          |||t;          d,-          z
  |d.         t;          d,/          z   ||f          t=          |||f          }t           d0z  
                                }|                    d1d,          d,                             d2d,          d#                                          }|                    d2d,          d,                                          }d3|                                !                    d4d5          dg d6|i||d6         |d7         d8gd9gd:d;id<d6|i||d6         |d7         d8gd9gd=|d>d?|d6         |d7         d8g d@d<gdA}d,dd|dB|"                    tF                                                    |                                dC |$                                D             dfdD||fD             d||dEi t#          j        t&          j                                                  dF}t                              t          j        |dd          dz              t5          ||dGdH|           t          |||||f          t          ||f          }|                    ||rdndIt#          j        t&          j                                                  dJ           t                              t          j        |dd          dz              t1          t          j        ||d          |d         |dK         dLd"                     |rd#nd,S )MNzlog/postiz-media.jsonzstory/promotion-report.jsonzlog/upload-transcode.jsonc                 T    g | ]%}|                                 t          |          &S rd   )existsrI   )rf   r=   s     r   r   zmain.<locals>.<listcomp>B   s+    	>	>	>	>#d))	>	>	>r   z9Postiz schedule blocked: missing verified prerequisites: z, POSTIZ_BASE_URLPOSTIZ_API_KEYPOSTIZ_FACEBOOK_INTEGRATION_IDPOSTIZ_YOUTUBE_INTEGRATION_IDPOSTIZ_SLOTSz09:20,19:00z2Target integration IDs differ from skill authorityspoken_sha256verifiedTsource_canon_sha256zMedia receipt canon mismatchserver_verificationunder_one_gbzTranscode receipt invalidz:Verified schedule receipt already exists; do not duplicatestatus
submittingslot_utc	completed)r   r   r^   resumed_after_uncertain_post
checked_atF   )r"   indent

slot_local)r   resumedr   r^   r!   r   c              3   (   K   | ]}|         V  d S Nrd   r   s     r   r   zmain.<locals>.<genexpr>P   s'      	.	.F%-	.	.	.	.	.	.r   zJPartial or foreign occupancy at pending exact slot; manual review requiredmediavideo	thumbnailrh   z/find-slot/r[   r   r   r{   zoutput/info.txtzTITLE
z

DESCRIPTION
schedulerE   rD   rQ   r=   )rQ   r=   )contentimage__typefacebook)rP   rL   settingsyoutubepublicno)r   titletypeselfDeclaredMadeForKidsr   tags)r   r[   	shortLinkr   r^   zEGET /posts filtered by exact target integration IDs from current timec                 >    i | ]\  }}||                                 S rd   )rl   )rf   r   rW   s      r   rg   zmain.<locals>.<dictcomp>Y   sk      ]P  ]P  ]P  w  w}  ~  ^d  ef  ep  ep  er  er  ]P  ]P  ]Pr   c                 <    i | ]}|t          |                   S rd   )len)rf   r   	preflights     r   rg   zmain.<locals>.<dictcomp>Y   se      QF  QF  QF  tz  RX  Y\  ]f  gm  ]n  Yo  Yo  QF  QF  QFr   )r   r   )versionr   r   r   selection_authorityr   r   find_slot_advisory_utcfind_slot_was_not_lower_boundoccupied_counts_filteredignored_other_integrationsr   r^   submitting_atPOSTz/postspartial_failure)r   r   r^   r   r   )r   r   r   r   r^   )%PROJECT
SystemExitjoinr   rR   EXPECTED_FBEXPECTED_YTr7   r,   loadsr   OUTr   rN   r   r   updater   nowr   rJ   rl   
write_textr-   printr   r0   r   rv   r   r   r   r   r*   rK   r}   items)requiredmissingrB   r;   r<   fbytr   r   	promotion	transcodecanonpreviousprevious_slotr   thumbfindr   r%   r   r   rt   r   infor   descriptionr>   receiptr   r   r   s                                @@r   mainr   @   s   **73P+PQXYtQt
u	>	>	>	>	>l*XY]YbYbcjYkYkklll55a!"q)9':3a@`>a2ef  hG  fHbd  OP  OT  OT  Uc  dq  Or  Or  INGk+&&&\:n-o-o'oz722==??@@4:W^_|W|  WH  WH  WJ  WJ  LK  LK  VZ  V`  bi  jE  bE  aP  aP  aR  aR  VS  VS  LU  Zc  ds  Zt  TY	IIj%%3H)I)I5)P)PWc  eC  XD  XD  RDMM*T))Y]];P-Q-QSX-X-X\e\i\ij  AC  ]D  ]D  ]H  ]H  IW  ]X  ]X  `d  ]d  ]d  kw  xS  kT  kT  eTJJLL P:cmmoo&&(\\*%%L9u,v,v&v\\(\))hll;P.Q.QSX.X.X]e]i]ijt]u]u.Xx
+,,=;tCWYZ\V]3^3^U%B   jOOk%gk  zB  zF  GO  GS  zT  zT  z^  z^  z`  z`  a  a  b  b  b  cf  cq  cq  rv  r|  }E  SX  `a  rb  rb  rb  cg  rg  ch  ch  ch  in  os  oy  FJ  UY  go  p|  g}  FK  zL  zL  Z_  o`  o`  o`  ia  ia  ia  ij  ij		.	.	.	.r"g	.	.	...  P\  CO  6P  6P  0PW~gU7^K%@ub2w U UVtCmF233$tF|ATATDLL\(,jU&;&;XdSVWZ[dmn[o[o[oWopuvxpy  {D  JK  {L  {L  {L  qL  NP  QS  MT  FU  FUH  [a  bg  hp  rt  uw  qx  [y  [y  VZDS1!5!5!55eBi	q@Q@Q@Q6QSUVXRYZZ`fglmvxz{}w~``[_  ++--DJJy4K4KA4N4T4TUhij4k4klm4n4t4t4v4ve  DH  DN  DN  Ob  cd  De  De  fg  Dh  Dn  Dn  Dp  Dp  xC4>>#3#3#;#;HS#I#IV[ce  @D  EG  H  ]h  x}  ~B  xC  KP  QW  KX  rY  rY  qZ  R[  R[  Q\  iq  r|  h}  p~  p~  OS  TV  NW  lw  GL  MQ  GR  Z_  `f  Zg  Ah  Ah  @i  aj  aj  `k  AJ  SX  `h  CG  Z_  `d  Ze  mr  sy  mz  T{  T{  CE  wF  wF  G  G  oH  
I  
ISX  pw  EI  ET  ET  UZ  E[  E[  Ee  Ee  Eg  Eg  sw  sA  sA  sC  sC  ]P  ]P  CG  CM  CM  CO  CO  ]P  ]P  ]P  qu  QF  QF  QF  QF  A  BD  ~E  QF  QF  QF  dh  z  LQ  qR  qR  []  nv  nz  {C	  {G	  nH	  nH	  nR	  nR	  nT	  nT	  
U	  
U	
7Q???DEEEc&'***4D"R));ubW3M3M(HX.\kkK\ej  yA  yE  FN  FR  yS  yS  y]  y]  y_  y_  `  `  a  a  a
7Q???DEEEeDJck  zA  BN  zO  [b  cm  [n  JQ  Rl  Jm  v{  X|  X|  JO  MP  MP  MP  GQ  GQ  GQ  ^f  Ym  YZ  YZ  lm  Rmr   __main__r   )rw   )%r,   urllib.errorr/   urllib.parseurllib.requestr   r   r   pathlibr   zoneinfor   __file__resolveparentsr   homer   r   r}   rn   r   r   r   r0   rN   rX   r\   r_   rv   r   r   r   r   r   __name__r   rd   r   r   <module>r
     s                2 2 2 2 2 2 2 2 2 2            X  (+ty{{66&&h!""
+	'4O
 
 
C C C CZ Z ZT T TN N N r r r  
 
 
 
: : :q q qS S Sm m m> Zjj000r   