
    i$                     
   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  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JrJr  SSKJ r   SSK!J"r"  \	" \#5      r$\	" S5      RK                  \
5         " S S5      r&g)    )service_account)build)AuthorizedHttp)
build_http)	getLoggerERROR)pathlistdir)load)	randrange)search)parse_qsurlparse)retrywait_exponentialstop_after_attemptretry_if_exception_type   )Config   )is_gdrive_idzgoogleapiclient.discoveryc                   h   \ rS rSrS r\S 5       r\S 5       rS rS r	S r
SS jr\" \" S	S
SS9\" S
5      \" \5      S9S 5       r\" \" S	S
SS9\" S
5      \" \5      S9S 5       r\" \" S	S
SS9\" S
5      \" \5      S9SS j5       r\" \" S	S
SS9\" S
5      \" \5      S9S 5       rS r S rSrg)GoogleDriveHelper   c                 H   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
        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%https://www.googleapis.com/auth/driveztoken.picklez"application/vnd.google-apps.folderz1https://drive.google.com/uc?id={}&export=downloadz)https://drive.google.com/drive/folders/{}Fr      d   r   )_OAUTH_SCOPE
token_pathG_DRIVE_DIR_MIME_TYPEG_DRIVE_BASE_DOWNLOAD_URLG_DRIVE_DIR_BASE_DOWNLOAD_URLis_uploadingis_downloading
is_cloningsa_indexsa_count	sa_numberalt_authservicetotal_filestotal_foldersfile_processed_bytes
proc_bytes
total_timestatusupdate_intervalr   USE_SERVICE_ACCOUNTSuse_saselfs    9/app/bot/helper/mirror_leech_utils/gdrive_utils/helper.py__init__GoogleDriveHelper.__init__   s    DE(%I"? 	& .Y*!#$%! 11    c                 D     U R                   U R                  -  $ !    g= f)Nr   )r.   r/   r4   s    r6   speedGoogleDriveHelper.speed3   s$    	??T__44	s    c                     U R                   $ N)r.   r4   s    r6   processed_bytes!GoogleDriveHelper.processed_bytes:   s    r9   c                 x  #    U R                   b  U R                   R                  U R                   R                  5       -  U R                  -
  nU R                   R                  U R                   R                  5       -  U l        U =R                  U-  sl        U =R
                  U R                  -  sl        g g 7fr>   )r0   
total_sizeprogressr-   r.   r/   r1   )r5   
chunk_sizes     r6   rC   GoogleDriveHelper.progress>   s     ;;"&&)=)=)??++,  )-(>(>AUAUAW(WD%OOz)OOOt333O #s   B8B:c                    S nU R                   (       a  [        S5      n[        U5      U l        [	        U R                  5      U l        [        R                  SX R
                      S35        [        R                  R                  SX R
                      3U R                  S9nO[        R                  " U R                  5      (       aM  [        R                  SU R                   35        [        U R                  S5       n[!        U5      nS S S 5        O[        R#                  S5        [%        U['        5       S	9nS
UR(                  l        [-        SSUSS9$ ! , (       d  f       N== f)NaccountszAuthorizing with z service accountz	accounts/)scopeszAuthorize with rbztoken.pickle not found!)httpTdrivev3F)rJ   cache_discovery)r3   r
   lenr(   r   r&   LOGGERinfor   Credentialsfrom_service_account_filer   ospathexistsr   openploaderrorr   r   rJ   "disable_ssl_certificate_validationr   )r5   credentials
json_filesfauthorized_https        r6   	authorizeGoogleDriveHelper.authorizeH   s   ;; ,J _DN%dnn5DMKK+J}},E+FFVWX)55OOJ}}567@Q@Q P K ]]4??++KK/$//):;<doot,#Ah -, LL23(:<HBF?Wd%PP -,s   E
E*c                    U R                   U R                  S-
  :X  a  SU l         OU =R                   S-  sl         U =R                  S-  sl        [        R	                  SU R                    S35        U R                  5       U l        g )Nr   r   zSwitching to z index)r&   r(   r'   rO   rP   r]   r*   r4   s    r6   switch_service_account(GoogleDriveHelper.switch_service_account\   sa    ==DNNQ..DMMMQMmDMM?&9:~~'r9   c                 *   U(       a<  UR                  S5      (       a&  SU l        SU S3U l        UR                  SSS5      nOaUR                  S5      (       a  SU l        UR                  SSS5      nO0UR                  S	5      (       a  SU l        UR                  S	SS5      n[	        U5      (       a  U$ S
U;   d  SU;   a,  Sn[        X15      nUc  [        S5      eUR                  S5      $ [        U5      n[        UR                  5      S   S   $ )Nzmtp:Fztokens/z.pickle r   zsa:Tztp:foldersfilezOhttps:\/\/drive\.google\.com\/(?:drive(.*?)\/folders\/|file(.*?)?\/d\/)([-\w]+)zG-Drive ID not found.r   idr   )
startswithr3   r   replacer   	re_search
IndexErrorgroupr   r   query)r5   linkuser_idregexresparseds         r6   get_id_from_url!GoogleDriveHelper.get_id_from_urle   s    tv..DK 'y8DO<<A.D__U##DK<<r1-D__U##DK<<r1-DK$fEE(C{ !89999Q<$%d+A..r9      r      )
multiplierminmax)waitstopr   c                 |    SSS SS.nU R                   R                  5       R                  XSS9R                  5       $ )NreaderanyoneT)roletypevaluewithLink)fileIdbodysupportsAllDrives)r*   permissionscreateexecute)r5   file_idr   s      r6   set_permission GoogleDriveHelper.set_permission{   sC     	
 LL$$&V7VMWY	
r9   c                 p    U R                   R                  5       R                  USSS9R                  5       $ )NTzname, id, mimeType, size)r   r   fields)r*   filesgetr   )r5   r   s     r6   get_file_metadata#GoogleDriveHelper.get_file_metadata   s:     LL S"&1  
 WY	
r9   c                 n   S n/ nU(       d  SU S3nO-US:X  a  SU SU R                    S3nOSU SU R                    S3n U R                  R                  5       R                  SSUSS	S
SUS9R	                  5       nUR                  UR                  S/ 5      5        UR                  S5      nUc   U$ Mv  )N'z ' in parents and trashed = falserd   z' in parents and mimeType = 'z' and trashed = falsez' in parents and mimeType != 'TrK      z?nextPageToken, files(id, name, mimeType, size, shortcutDetails)zfolder, name)r   includeItemsFromAllDrivesqspacespageSizer   orderBy	pageTokenr   nextPageToken)r    r*   r   listr   extendr   )r5   	folder_id	item_type
page_tokenr   r   responses          r6   get_files_by_folder_id(GoogleDriveHelper.get_files_by_folder_id   s     
I;>?A)#I;;D<V<V;WWlmAI;<T=W=W<XXmnA""$&*.2" \*(  	   LLgr23!o6J!' r9   c                 f   USU R                   S.nUb  U/US'   U R                  R                  5       R                  USS9R	                  5       nUR                  S5      n[        R                  (       d  U R                  U5        [        R                  SUR                  S5       S	U 35        U$ )
Nz%Uploaded by Mirror-leech-telegram-bot)namedescriptionmimeTypeparentsT)r   r   rf   zCreated G-Drive Folder:
Name: r   z
ID: )r    r*   r   r   r   r   r   IS_TEAM_DRIVEr   rO   rP   )r5   directory_namedest_idfile_metadatare   r   s         r6   create_directory"GoogleDriveHelper.create_directory   s     #B22

 (/yM)$LL V$V?WY 	
 ((4.##(5dhhv6F5GvgYWXr9   c                 f    / SQnU H  nUR                  USU 35      nM     UR                  5       $ )N)	\r   "z\az\bz\fz\nz\rz\tr   )rh   strip)r5   estrcharschars       r6   escapesGoogleDriveHelper.escapes   s3    JD<<4&k2D zz|r9   c                   #    SU R                   l        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 U R                  (       aP  [        R	                  SU R                   R
                   35        U R                   R                  S5      I S h  vN   g g  N Ni N
7f)NTzCancelling Download: zStopped by user!zCancelling Clone: z=your clone has been stopped and cloned data has been deleted!zCancelling Upload: z@your upload has been stopped and uploaded data has been deleted!)
listeneris_cancelledr$   rO   rP   r   on_download_errorr%   on_upload_errorr#   r4   s    r6   cancel_taskGoogleDriveHelper.cancel_task   s     %)"KK/0B0B/CDE--112DEEE__KK,T]]-?-?,@AB--//O   KK-dmm.@.@-ABC--//R    F
s8   A-D>/D80A D>D:A D>1D<2D>:D><D>)r!   r"   r    r   r)   r-   r%   r$   r#   r.   r'   r&   r(   r*   r0   r   r+   r,   r/   r1   r3   N)rc   )__name__
__module____qualname____firstlineno__r7   propertyr;   r?   rC   r]   r`   rr   r   r   r   r   	Exceptionr   r   r   r   r   r   __static_attributes__ r9   r6   r   r      s'   22    4Q((/, q9"%i0



 q9"%i0
	

	
 q9"%i0

< q9"%i0

&(r9   r   N)'google.oauth2r   googleapiclient.discoveryr   google_auth_httplib2r   googleapiclient.httpr   loggingr   r   osr	   rS   r
   pickler   rV   randomr   rer   ri   urllib.parser   r   tenacityr   r   r   r   core.config_managerr   ext_utils.links_utilsr   r   rO   setLevelr   r   r9   r6   <module>r      s_    ) + / + $ &    " +  + 1	8	 	
% & / / 6g gr9   