
    iD                         S SK Jr  S SKJrJrJr  S SKJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S
SKJr  SSKJrJr  SSKJrJ r   \" \!5      r" " S S5      r#g)    )open)pathmakedirslistdir)create_subprocess_execgatherwait_for)PIPE)RawConfigParser)loads)	getLogger)	randrange)findall   )Config   )cmd_execsync_to_async)get_mime_typecount_files_and_foldersc                       \ rS rSrS r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
S rS	 rS
 rS rS rS rS rS rS rS r\S 5       rS rSrg)RcloneTransferHelper   c                     Xl         S U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        [        R                  U l        g )Nz0 B-z0%z0 B/sF   r   )	_listener_proc_transferred_size_eta_percentage_speed_size_is_download
_is_upload	_sa_count	_sa_index
_sa_numberr   USE_SERVICE_ACCOUNTS_use_service_accounts)selflisteners     ;/app/bot/helper/mirror_leech_utils/rclone_utils/transfer.py__init__RcloneTransferHelper.__init__   se    !
!&	
!%+%@%@"    c                     U R                   $ N)r   r+   s    r-   transferred_size%RcloneTransferHelper.transferred_size%   s    %%%r0   c                     U R                   $ r2   )r!   r3   s    r-   
percentageRcloneTransferHelper.percentage)   s    r0   c                     U R                   $ r2   )r"   r3   s    r-   speedRcloneTransferHelper.speed-   s    {{r0   c                     U R                   $ r2   )r    r3   s    r-   etaRcloneTransferHelper.eta1   s    yyr0   c                     U R                   $ r2   )r#   r3   s    r-   sizeRcloneTransferHelper.size5   s    zzr0   c                   #    U R                   R                  Gc;  U R                   R                  R                  5       (       Gd  U R                  R
                  (       d   [        U R                   R                  R                  5       S5      I S h  vN nU(       d  g UR                  5       R                  5       n[        SU5      =n(       a$  US   u  U l        U l        U l        U l        U l        U R                   R                  cH  U R                   R                  R                  5       (       d  U R                  R
                  (       d  M  g g g g g g  N!    g = f7f)N<   zlTransferred:\s+([\d.]+\s*\w+)\s+/\s+([\d.]+\s*\w+),\s+([\d.]+%)\s*,\s+([\d.]+\s*\w+/s),\s+ETA\s+([\dwdhms]+)r   )r   
returncodestdoutat_eofr   is_cancelledr	   readlinedecodestrip
re_findallr   r#   r!   r"   r    )r+   datas     r-   	_progressRcloneTransferHelper._progress9   s"    JJ!!-zz  ''))~~**%djj&7&7&@&@&BBGG ;;=&&(D! t  G*J$KI) JJ!!-zz  ''))~~*** * .* * .
 Hs7   AE !1E EE B8E E E EE c                     U R                   U R                  S-
  :X  a  SU l         OU =R                   S-  sl         U =R                  S-  sl        SU R                   S 3n[        R	                  SU S35        U$ )Nr   r   sa03zSwitching to z remote)r'   r(   r&   LOGGERinfo)r+   remotes     r-   _switch_service_account,RcloneTransferHelper._switch_service_accountR   sg    >>T__q00DNNNaN!dnnR()mF8734r0   c                 J  ^^	#    SnU SU S3n[         R                  " U5      I S h  vN (       a  U$ [        USS9I S h  vN   UR                  S5      =m(       a  Sm	O#UR                  S5      =m(       a  Sm	OSU l        g	[        S
5      I S h  vN nSR                  UU	4S j[        U5       5       5      n[        US5       IS h  vN nUR                  U5      I S h  vN   S S S 5      IS h  vN   U$  N N Nm N5 N N! , IS h  vN  (       d  f       U$ = f7f)N	rclone_sa/.confT)exist_ok
team_driveroot_folder_idFrclone.confaccounts c           
   3   H   >#    U  H  u  pS US SU ST ST S3	v   M     g7f)z[sarQ   z=]
type = drive
scope = drive
service_account_file = accounts/
z = z

N ).0irP   gd_idoptions      r-   	<genexpr>5RcloneTransferHelper._create_rc_sa.<locals>.<genexpr>l   sA      
) !BWXZW[[]^d]eehinhoost)s   "w)
aiopathisfiler   getr*   r   join	enumerateaiopenwrite)
r+   rT   remote_optssa_conf_dirsa_conf_filefilestextfrf   rg   s
           @@r-   _create_rc_sa"RcloneTransferHelper._create_rc_sa\   s    !%axu5---{T222OOL1151!F!oo&677U7%F).D& j))ww 
"5)
 

 ,,,''$- -,) .2 * - -,,s   $D#C<D#C>AD#D 9D#DD#D%D&D*D#5D6D#>D# D#D#DD#D DD D#c                 :  #    [        U[        [        S.6I S h  vN U l        U R                  5       I S h  vN   U R                  R	                  5       I S h  vN u  p4U R                  R
                  nU R                  R                  (       a  g US:X  a#  U R                  R                  5       I S h  vN   g US:w  GaH  UR                  5       R                  5       nU(       d  US:X  a  U R                  (       a  Sn[        R                  U5        U R                  S:w  a  US:X  a  SU;   a  U R                  (       a  U R                  U R                  :  ae  U R!                  5       nU SUS   R#                  SS	5      S	    3US'   U R                  R                  (       a  g U R%                  X5      I S h  vN $ [        R'                  S
U R                   35        U R                  R)                  US S 5      I S h  vN   g g  GN GN GN GN_ NZ N7f)NrE   stderrr   drivez=Mostly your service accounts don't have access to this drive!RATE_LIMIT_EXCEEDED:   r   ?Reached maximum number of service accounts switching, which is   )r   r
   r   rM   communicaterD   r   rG   on_download_completerI   rJ   r*   rR   errorr(   r&   rU   split_start_downloadrS   on_download_errorr+   cmdremote_type_r|   return_coder   rT   s           r-   r   $RcloneTransferHelper._start_downloadu   s    13tDQQ
nn**0022	jj++>>&&!..55777BMMO))+E[G38R8RWLL 1$7*)U2..>>DOO3!99;F &xqQc1)=a)@(ABCF~~22!%!5!5c!GGGKKYZ^ZhZhYij ..225$<@@@1  R2 8$ H Asj   HHHH!HHAH5H6DH<H=AHHHHHHHHc                   #    SU l          U R                  X!5      I S h  vN nUS   nUS:X  a  U R                  (       a  US:X  a  [        R                  " S5      I S h  vN (       a  UR                  S5      (       d  U R                  X5      I S h  vN nUS:w  ae  [        S5      I S h  vN n[        U5      U l        [        U R                  5      U l        SU R                  S 3n[         R#                  S	U 35        U R%                  X! S
U R                  R&                   3US5      nUS:X  a,  U R                  R(                  (       d  UR+                  S5        U R-                  X5      I S h  vN   g  GN\! [         a7  nU R                  R	                  [        U5      5      I S h  vN     S nAg S nAff = f GNc GN2 GN NU7f)NTtyper~   r^   r_   service_account_filerP   rQ   zDownload with service account r   copy)	--drive-acknowledge-abusez--drive-chunk-size128M
--tpslimit1--tpslimit-burstr   --transfersr   )r$   _get_remote_options	Exceptionr   r   strr*   rk   isdirrm   rx   r   lenr(   r   r'   rR   rS   _get_updated_commandlinkrc_flagsextendr   )	r+   rT   config_pathr   rr   errr   sa_filesr   s	            r-   downloadRcloneTransferHelper.download   s     	 $ 8 8 MMK "&) 7"**},mmJ///OO$:;; $ 2 26 GGKm+!(!44"%h-!*4??!;dnnR01<VHEF''81T^^%8%8$9:D&
 '!$..*A*AJJ
 ""3444Q N 	..223s8<<<	 0 H42 	5s   GE> E;E> ;GG 3GGG,G-CG5G6G;E> >
F?'F:/F20F:5G:F??GGGGc                 L  ^ #    US:X  a  UR                  SS5      S   OUnSSSSS	S
UU/n[        U5      I S h  vN u  pgnUS:X  a6  [        U5      n	[        U 4S jU	 5       S5      n
US:X  a  SU
 3nU$ SU
 S3nU$ US:w  a  [        R                  SU SU 35        SnW$  Nh7f)NFolderrY   r   r   mltb_rlsjson--fast-listz--no-mimetypez--no-modtime--configc              3   j   >#    U  H(  oS    TR                   R                  :X  d  M!  US   v   M*     g7f)PathIDN)r   name)rd   rr+   s     r-   rh   8RcloneTransferHelper._get_gdrive_link.<locals>.<genexpr>   s*     M&QfI9L9L,L4&s    33r   z'https://drive.google.com/drive/folders/zhttps://drive.google.com/uc?id=z&export=downloadr}   z while getting drive link. Path: z
. Stderr: r`   )rsplitr   r   nextrR   r   )r+   r   destination	mime_typeepathr   resr   coderesultfidr   s   `           r-   _get_gdrive_link%RcloneTransferHelper._get_gdrive_link   s     1:h1F""3*1-K	
  (},$193ZFM&MuC
 ( :#?   7se;KL   RZLL2;-z#O D# -s   6B$B"A)B$c                   #    [        U[        [        S.6I S h  vN U l        U R                  5       I S h  vN   U R                  R	                  5       I S h  vN u  p4U R                  R
                  nU R                  R                  (       a  gUS:X  a  gUS:X  a  gUR                  5       R                  5       n[        R                  U5        U R                  S:w  a  US:X  a  SU;   a  U R                  (       a  U R                  U R                  :  af  U R                  5       nU SUS	   R!                  SS
5      S
    3US	'   U R                  R                  (       a  S$ U R#                  X5      I S h  vN $ [        R%                  SU R                   35        U R                  R'                  US S 5      I S h  vN   g GN GN GNv NV N7f)Nr{   Fr}   r   Tr~   r   r      r   r   r   )r   r
   r   rM   r   rD   r   rG   rI   rJ   rR   r   r(   r*   r&   rU   r   _start_uploadrS   on_upload_errorr   s           r-   r   "RcloneTransferHelper._start_upload   s    13tDQQ
nn**0022	jj++>>&&"AMMO))+ELL1$7*)U2..>>DOO3!99;F &xqQc1)=a)@(ABCF  >>66  $(#5#5c#GG KKYZ^ZhZhYij ..00u>>>C R20 H ?sW   GG	GG!GGD!G;G<AGGGGGGGc                   #    SU l         U R                  R                  nUR                  S5      (       a0  UR	                  SS5      S   nSU R                  R
                   S3nOSnUR	                  SS5      u  pB[        R                  " U5      I S h  vN (       aP  Sn[        U5      I S h  vN u  pgX"(       a  S	U R                  R                   3OU R                  R                  -  nO[        [        U5      I S h  vN nS
nSn U R                  X45      I S h  vN nUS   n
UnUnU
S:X  a  U R                   (       a  US:X  a  [        R                  " S5      I S h  vN (       a  UR#                  S5      (       d  U R%                  XH5      I S h  vN nUS:w  ae  ['        S5      I S h  vN n[)        U5      U l        [-        U R*                  5      U l        SU R.                  S 3n[0        R3                  SU 35        U R5                  XU SU 3S5      nU
S:X  a,  U R                  R6                  (       d  UR9                  S5        U R;                  X5      I S h  vN nU(       d  g US:X  a  U SU 3nOAU(       a  U SU S	U R                  R                   3nOU SU R                  R                   3nU
S:X  a  U R=                  UUU5      I S h  vN nOJSSSUU/n[?        U5      I S h  vN u  nn	nUS
:X  a  UnO#US:w  a  [0        RA                  SU SU	 35        SnU R                  RB                  (       a  g [0        R3                  SU 35        U R                  RE                  WXvUU5      I S h  vN   g  GN GN GN GNr! [         a7  n	U R                  R                  [        U	5      5      I S h  vN     S n	A	g S n	A	ff = f GNu GND GN. GN| GN N Nf7f)NTzmrcc:r   zrclone/rZ   r^   r   r   rY   r   r   r~   r_   r   rP   rQ   zUpload with service account move)r   r   r   r   r   r   r   r   r   r}   while getting link. Path:  | Stderr: r`   zUpload Done. Path: )#r%   r   up_dest
startswithr   user_idrk   r   r   r   r   r   r   r   r   r   r*   rm   rx   r   r   r(   r   r'   rR   rS   r   r   r   r   r   r   r   rG   on_upload_complete)r+   r   rc_pathoconfig_pathoremoter   foldersru   rr   r   r   fremotefconfig_pathr   r   r   r   r   r   r   s                       r-   uploadRcloneTransferHelper.upload	  s    ..((g&&mmGQ/2G$T^^%;%;$<EBL(L"==a0t$$$ I#:4#@@NGG4>>../0ATATTG+M4@@IGE	 $ 8 8 OOK "&)#7"**-mmJ///OO$:;;!%!3!3G!IIL},!(!44"%h-!*4??!;t~~b12:7)DE''7)1WI 6
 '!$..*A*AJJ	 ))#;; $IQwi0K$IQwiq1D1D0EFK$IQt~~':':&;<K'!..|[)TTD C $,C=0NCdqy9+kRUQVWX>>&&)+78nn//%)[
 	
 	
 	e %@ A
 P 	..00S:::	 0 J4* < U 1	
s   BO,N	O,/N0AO,NO,N  N!N %?O,$O%3O,OO,1O2B4O,&O"'A7O,O%O,9O(:B	O,O*O,O,O,N 
O'OO	OO,OO,O,O,"O,%O,(O,*O,c                   #    U R                   R                  nUR                  SS5      u  px [        U R	                  X5      U R	                  X5      5      I S h  vN u  pU	S   U
S   pU R                  X SU 3Xe5      nU R                   R                  (       d  US:X  a  UR                  S5        [        U[        [        S.6I S h  vN U l        U R                  5       I S h  vN   U R                  R                  5       I S h  vN u  nnU R                  R                   nU R                   R"                  (       a  gUS:X  a  gUS	:X  a  US
:w  a9  UU(       a  SU R                   R$                   3OU R                   R$                  -  nUS:X  a;  U R'                  XU5      I S h  vN nU R                   R"                  (       a  S$ UU4$ SSSUU/n[)        U5      I S h  vN u  nnnU R                   R"                  (       a  gUS	:X  a  UU4$ US:w  a  [*        R-                  SU SU 35        S U4$ g UR/                  5       R1                  5       n[*        R-                  U5        U R                   R                  US S 5      I S h  vN   g GN:! [
         a7  nU R                   R                  [        U5      5      I S h  vN     S nAgS nAff = f GN GN GN GN: GN N[7f)Nr   r   )NNr   r~   )r   r   3r   r   r   r   r{   r}   r   r   rY   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r
   r   rM   r   rD   rG   r   r   r   rR   r   rI   rJ   )r+   r   
src_remotesrc_pathr   methodr   
dst_remotedst_pathsrc_remote_optsdst_remote_optr   src_remote_typedst_remote_typer   r   r|   r   r   r   r   r   s                         r-   cloneRcloneTransferHelper.cloneh  s    nn,,*00a8
	4:((A((A5 /+O F#6" )
 ''<q
3[
 ~~&&?g+EJJ
 23tDQQ
nn**0022	6jj++>>&&"AH$19a++,-t~~?R?R ')!22;YWW$(NN$?$?LFJKEX
  (0}!4S$>>..%19++RZLL4[MSER  ,,	   MMO))+ELL..00u>>>U/  	..00S:::	2 R2 X "5  ?s   +K--J JJ "A)K-KK-(K)!K-
K"B K-+K%,:K-&K('B(K-K+K-J 
K"'K	K
KK-KK-K-"K-%K-(K-+K-c                    SnUR                  S5      S   R                  S5      (       a  UR                  S5      S    S3nSnSUSS	US
UUSSSSSSS/nU(       a(  UR                  SU R                  R                  45        OU R                  R
                  (       a?  SSR                  U R                  R
                  5      -   S-   nUR                  SU45        O>SSR                  U R                  R                  5      -   S-   nUR                  SU45        U R                  R                  =n(       a  UR                  S5      nU Hy  n	SU	;   a@  [        [        R                  U	R                  SS5      5      u  pUR                  X45        MI  [        U	5      S:  d  MZ  UR                  U	R                  5       5        M{     U$ )NFr   rclone_selectr   Tr   r   r   z-Pz-Lz--retries-sleep3sz--ignore-casez--low-level-retriesr   z-Mz--files-fromz*.{,}z	--includez	--exclude|r   )r   r   r   r   r   included_extensionsrn   excluded_extensionsr   mapr   rJ   r   append)r+   r   sourcer   r   r   r   extrcflagsflagkeyvalues               r-   r   )RcloneTransferHelper._get_updated_command  s    <<R ++O<<S)!,-Q/F M!
" JJ(;(;<=^^//#((4>>#E#EFFLCJJS)*#((4>>#E#EFFLCJJS)*nn---7-mmC(G$;!$SYY

30B!CJCJJ|,Y]JJtzz|,   
r0   c                 j  #    [        5       n[        U S5       IS h  vN nUR                  5       I S h  vN nUR                  U5        S S S 5      IS h  vN   UR	                  U5      nU Vs0 s H  ofUR                  X5      _M     sn$  Np NZ N;! , IS h  vN  (       d  f       NP= fs  snf 7f)Nr   )r   rp   readread_stringoptionsrm   )r   rT   configrw   contentsr   opts          r-   r   (RcloneTransferHelper._get_remote_options  s      "+s++qVVX~Hx( ,+ ..(8?@VZZ,,@@	 ,% ,+++ As`   B3BB3BBBB3BB30B.B3BB3B+BB+'B3c                   #    SU R                   l        U R                  b   U R                  R                  5         U R                  (       aP  [
        R                  SU R                   R                   35        U R                   R                  S5      I S h  vN   g U R                  (       aP  [
        R                  SU R                   R                   35        U R                   R                  S5      I S h  vN   g [
        R                  SU R                   R                   35        U R                   R                  S5      I S h  vN   g !    GN= f N N_ N7f)NTzCancelling Download: zStopped by user!zCancelling Upload: zyour upload has been stopped!zCancelling Clone: zyour clone has been stopped!)r   rG   r   killr$   rR   rS   r   r   r%   r   r3   s    r-   cancel_task RcloneTransferHelper.cancel_task  s    &*#::!

! KK/0C0C/DEF..223EFFF__KK-dnn.A.A-BCD..001PQQQKK,T^^-@-@,ABC..001OPPP G R QsN   EE AEEA E8E9AEE	EEEEE)r    r$   r%   r   r!   r   r&   r'   r(   r#   r"   r   r*   N)__name__
__module____qualname____firstlineno__r.   propertyr4   r7   r:   r=   r@   rM   rU   rx   r   r   r   r   r   r   r   staticmethodr   r   __static_attributes__rc   r0   r-   r   r      s    A & &          22"H+5Z>"H]~Ob,\ A AQr0   r   N)$aiofilesr   rp   aiofiles.osr   rk   r   r   asyncior   r   r	   asyncio.subprocessr
   configparserr   jsonr   loggingr   randomr   rer   rK   core.config_managerr   ext_utils.bot_utilsr   r   ext_utils.files_utilsr   r   r   rR   r   rc   r0   r-   <module>r     sK    # : : < < # (    $ * :
 
8	jQ jQr0   