Ë
    ¾�je"  ã                   óÜ   — d 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
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  ej*                  e«      Zd	Zd
ZdZdZdZ G d„ d«      Zy)z3Created on Sun Apr 07 2024 19:38:48 by codeskyblue
é    N)Úcontextmanager)ÚAdbError)ÚFileInfo)Úappend_path)ÚAdbSyncError)Ú
BaseDeviceÚOKAYÚFAILÚDENTÚDONEÚDATAc                   óÄ  — e Zd Zdefd„Zededefd„«       Zdedefd„Z	dede
fd„Zdefd	„Zdedej                  e   fd
„Z	 	 ddej                   ej$                  eeeej*                  f   dej                   ej$                  ef   dededef
d„Z	 	 ddej                   ej$                  eeeej*                  f   dedededef
d„Zdedej2                  e   fd„Zdedefd„Zddededefd„Zddedej                   eej$                  f   dedefd„Zdedej                   eej$                  f   defd„Zddedej                   eej$                  f   dedefd„Zy)ÚSyncÚdevicec                 ó   — || _         y ©N)Ú_device)Úselfr   s     úN/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/adbutils/sync.pyÚ__init__zSync.__init__#   s	   € Øˆ�ó    ÚpathÚcmdc              #   ó’  K  — | j                   j                  d ¬«      5 }|j                  d«       |j                  «        t	        |j                  d«      «      }|j                  j                  |j                  d«      t        j                  d|«      z   |j                  d«      z   «       |–— d d d «       y # 1 sw Y   y xY w­w)N)Útimeoutzsync:úutf-8ú<I)
r   Úopen_transportÚsend_commandÚ
check_okayÚlenÚencodeÚconnÚsendÚstructÚpack)r   r   r   ÚcÚpath_lens        r   Ú_prepare_synczSync._prepare_sync&   s�   è ø€ à�\‰\×(Ñ(°Ð(Ó6ð 	¸!Ø�N‰N˜7Ô#Ø�L‰LŒNä˜4Ÿ;™; wÓ/Ó0ˆHØ�F‰F�K‰KØ—
‘
˜7Ó#¤f§k¡k°$¸Ó&AÑAØ—‘˜GÓ$ñ%ô&ð ŠG÷	÷ 	ñ 	üs   ‚CŸBB;Â2	CÂ;CÃ CÚreturnc                 ó@   — | j                  |«      }|j                  d uS r   )ÚstatÚmtime)r   r   Úfinfos      r   ÚexistszSync.exists2   s   € Ø—	‘	˜$“ˆØ�{‰{ $Ð&Ð&r   c                 óF  — | j                  |d«      5 }d|j                  d«      k(  sJ ‚t        j                  d|j                  j                  d«      «      \  }}}|rt        j                  j                  |«      nd }t        ||||«      cd d d «       S # 1 sw Y   y xY w)NÚSTATé   z<IIIé   )	r)   Úread_stringr%   Úunpackr#   ÚrecvÚdatetimeÚfromtimestampr   )r   r   r'   ÚmodeÚsizer-   Úmdtimes          r   r,   z	Sync.stat6   s‹   € Ø×Ñ  fÓ-ð 	6°Ø˜QŸ]™]¨1Ó-Ò-Ð-Ð-Ü &§¡¨f°a·f±f·k±kÀ"³oÓ FÑˆD�$˜á?D”X×&Ñ&×4Ñ4°UÔ;È$ˆFÜ˜D $¨°Ó5÷	6÷ 	6ò 	6ús   “A:BÂB c              #   óÚ  K  — | j                  |d«      5 }	 |j                  d«      }|t        k(  rnvt        j                  d|j
                  j                  d«      «      \  }}}}|j                  |«      }	 t        j                  j                  |«      }t        ||||«      –— Œ‘	 d d d «       y # t        $ r! t        j                  j                  «       }Y ŒDw xY w# 1 sw Y   y xY w­w)NÚLISTr2   z<IIIIé   )r)   r4   Ú_DONEr%   r5   r#   r6   r7   r8   ÚOSErrorÚnowr   )	r   r   r'   Úresponser9   r:   r-   ÚnamelenÚnames	            r   Úiter_directoryzSync.iter_directory>   sà   è ø€ Ø×Ñ  fÓ-ð 	8°ØØŸ=™=¨Ó+�ØœuÒ$ØÜ-3¯]©]Ø˜QŸV™VŸ[™[¨›_ó..Ñ*��d˜E 7à—}‘} WÓ-�ð4Ü$×-Ñ-×;Ñ;¸EÓB�Eô ˜t T¨5°$Ó7Ò7ð ð ÷		8ð 	8øô ò 4Ü$×-Ñ-×1Ñ1Ó3’Eð4ú÷	8ð 	8üsA   ‚C+•A"CÁ8B2ÂCÂ)	C+Â2'CÃCÃCÃCÃC(Ã$C+c                 ó6   — t        | j                  |«      «      S r   )ÚlistrE   ©r   r   s     r   rG   z	Sync.listM   s   € Ü�D×'Ñ'¨Ó-Ó.Ð.r   ÚsrcÚdstr9   Úcheckc                 ó´  — t        |t        j                  «      r|j                  «       }| j	                  |«      }|j
                  t        j                  z  dk7  rjt        |t        j                  t        f«      st        d«      ‚t        |t        j                  |«      j                  «      }t        j                  d|«       | j                  ||||«      S )a,  
        Push file from local:src to device:dst

        Args:
            src: source file path
            dst: destination file path or directory path
            mode: file mode
            check: check if push size is correct
        
        Returns:
            total file size pushed
        r   z1src should be a file path when dst is a directoryz$dst is a directory, update dst to %s)Ú
isinstanceÚpathlibÚPathÚas_posixr,   r9   ÚS_IFDIRÚstrr   r   rD   ÚloggerÚdebugÚ
_push_file)r   rI   rJ   r9   rK   r.   s         r   Úpushz	Sync.pushP   s�   € ô  �cœ7Ÿ<™<Ô(Ø—,‘,“.ˆCØ—	‘	˜#“ˆØ�:‰:œŸ™Ñ$¨Ò)Ü˜c¤G§L¡L´#Ð#6Ô7Ü"Ð#VÓWÐWÜ˜c¤7§<¡<°Ó#4×#9Ñ#9Ó:ˆCÜ�L‰LÐ?ÀÔEØ�‰˜s C¨¨uÓ5Ð5r   c           
      ó"  — t        |t        j                  «      r|j                  d«      }n„t        |t        «      r%t        j                  |«      j                  d«      }nOt        |t
        t        f«      rt        j                  |«      }n#t        |d«      st        dt        |«      z  «      ‚|dz   t	        t        j                  |z  «      z   }d}| j                  |d«      5 }t        |d«      r|nt        |d«      }	 	 |j                  d«      }	|	sht!        t"        j"                  j%                  «       j'                  «       «      }
|j(                  j+                  dt-        j.                  d	|
«      z   «       ne|j(                  j+                  d
t-        j.                  d	t1        |	«      «      z   «       |j(                  j+                  |	«       |t1        |	«      z  }Œà|j3                  d«      }|t4        k7  rt7        |«      ‚	 t        |d«      r|j9                  «        	 d d d «       |r0| j                  |«      j:                  }||k7  rt7        d||fz  «      ‚|S # t        |d«      r|j9                  «        w w xY w# 1 sw Y   Œ_xY w)NÚrbÚreadzInvalid src type: %sú,r   ÚSENDi   s   DONEr   s   DATAr2   Úclosez7Push not complete, expect pushed %d, actually pushed %d)rM   rN   rO   ÚopenrR   ÚbytesÚ	bytearrayÚioÚBytesIOÚhasattrÚ	TypeErrorÚtyper,   ÚS_IFREGr)   rY   Úintr7   rA   Ú	timestampr#   r$   r%   r&   r!   r4   Ú_OKAYr   r\   r:   )r   rI   rJ   r9   rK   r   Ú
total_sizer'   ÚrÚchunkr-   Ú
status_msgÚ	file_sizes                r   rU   zSync._push_filej   s  € ô �cœ7Ÿ<™<Ô(Ø—(‘(˜4“.‰CÜ˜œSÔ!Ü—,‘,˜sÓ#×(Ñ(¨Ó.‰CÜ˜œe¤YÐ/Ô0Ü—*‘*˜S“/‰Cä˜3 Ô'ÜÐ 6¼¸c»Ñ BÓCÐCà�S‰yœ3œtŸ|™|¨dÑ2Ó3Ñ3ˆØˆ
Ø×Ñ  fÓ-ð 	°Ü˜s FÔ+‘´°c¸4³ˆAðØØŸF™F 4›L�EÙ Ü #¤H×$5Ñ$5×$9Ñ$9Ó$;×$EÑ$EÓ$GÓ H˜ØŸ™Ÿ™ G¬f¯k©k¸$ÀÓ.FÑ$FÔGØØ—F‘F—K‘K ¬&¯+©+°d¼CÀ»JÓ*GÑ GÔHØ—F‘F—K‘K Ô&Ø¤# e£*Ñ,�Jð ð Ÿ]™]¨1Ó-�
Ø¤Ò&Ü" :Ó.Ð.ð 'ô ˜1˜gÔ&Ø—G‘G•I÷#	ñ$ ØŸ	™	 #›×+Ñ+ˆIØ˜YÒ&ÜØMØ Ð+ñ,ó-ð -ð Ðøô ˜1˜gÔ&Ø—G‘G•Ið 'ú÷!	ð 	ús%   Ã'JÄDI#È
JÉ#JÊJÊJc              #   ó
  K  — | j                  |d«      5 }	 |j                  d«      }|t        k(  rEt        j                  d|j                  d«      «      d   }|j                  |«      }t        ||«      ‚|t        k(  rnm|t        k(  rWt        j                  d|j                  d«      «      d   }|j                  |«      }t        |«      |k7  rt        d«      ‚|–— nt        d|«      ‚ŒÖ	 d d d «       y # 1 sw Y   y xY w­w)NÚRECVr2   r   r   zread chunk missingzInvalid sync cmd)
r)   r4   Ú_FAILr%   r5   rY   r   r?   Ú_DATAr!   )r   r   r'   r   Ústr_sizeÚerror_messageÚ
chunk_sizerk   s           r   Úiter_contentzSync.iter_content˜   sí   è ø€ Ø×Ñ  fÓ-ð 	<°ØØ—m‘m AÓ&�Øœ%’<Ü%Ÿ}™}¨T°1·6±6¸!³9Ó=¸aÑ@�HØ$%§M¡M°(Ó$;�MÜ" =°$Ó7Ð7ØœE’\ØØœE’\Ü!'§¡¨t°Q·V±V¸A³YÓ!?ÀÑ!B�JØŸF™F :Ó.�EÜ˜5“z ZÒ/Ü&Ð';Ó<Ð<Ø“Kä"Ð#5°sÓ;Ð;ð ð ÷	<÷ 	<ñ 	<üs   ‚D•CC7Ã.	DÃ7D Ã<Dc                 óB   — dj                  | j                  |«      «      S )Nr   )Újoinru   rH   s     r   Ú
read_byteszSync.read_bytes«   s   € Ø�x‰x˜×)Ñ)¨$Ó/Ó0Ð0r   Úencodingc                 óD   — | j                  |«      j                  |¬«      S )z read content of a file )ry   )rx   Údecode)r   r   ry   s      r   Ú	read_textzSync.read_text®   s   € à�‰˜tÓ$×+Ñ+°XÐ+Ó>Ð>r   Úexist_okc                 ó²   — | j                  |«      }|j                  t         j                  z  dk7  }|r| j                  ||«      S | j	                  |||«      S )zz
        Pull file or directory from device:src to local:dst

        Returns:
            total file size pulled
        r   )r,   r9   re   Ú	pull_fileÚpull_dir)r   rI   rJ   r}   Úsrc_file_infoÚis_src_files         r   Úpullz	Sync.pull²   sQ   € ð Ÿ	™	 #›ˆØ#×(Ñ(¬4¯<©<Ñ7¸1Ñ<ˆáØ—>‘> # sÓ+Ð+à—=‘=  c¨8Ó4Ð4r   c                 ó  — t        |t        «      rt        j                  |«      }|j	                  d«      5 }d}| j                  |«      D ]!  }|j                  |«       |t        |«      z  }Œ# |cddd«       S # 1 sw Y   yxY w)z`
        Pull file from device:src to local:dst

        Returns:
            file size
        Úwbr   N)rM   rR   rN   rO   r]   ru   Úwriter!   )r   rI   rJ   Úfr:   rk   s         r   r   zSync.pull_fileÂ   s{   € ô �cœ3ÔÜ—,‘,˜sÓ#ˆCØ�X‰X�d‹^ð 	˜qØˆDØ×*Ñ*¨3Ó/ò #�Ø—‘˜”Øœ˜E›
Ñ"‘ð#ð ÷	÷ 	ò 	ús   ·9A:Á:Bc           	      ó  ‡ ‡— ddt         dt        j                  t         t        j                  f   dt
        dt        fˆˆ fd„Št        |t         «      rt        j                  |«      }t        j                  ||¬«        ‰|||¬«      S )zlPull directory from device:src into local:dst

        Returns:
            total files size pulled
        rI   rJ   r}   r*   c                 ó*  •— d}t        ‰j                  | «      «      }t        t        d„ |«      «      }t        t        d„ |«      «      }t        t        d„ |«      «      }|D ]f  }t        | |j                  «      }t        j                  t        ||j                  «      «      }	t        j                  |	|¬«       | ‰||	|¬«      z  }Œh |D ]C  }
t        | |
j                  «      }t        ||
j                  «      }	|‰j                  ||	«      z  }ŒE |S )Nr   c                 óB   — | j                   dk7  xr | j                   dk7  S )Nú.z..)r   )Úis    r   ú<lambda>z:Sync.pull_dir.<locals>.rec_pull_contents.<locals>.<lambda>Þ   s   € ˜!Ÿ&™& C™-Ò:¨A¯F©F°d©N€ r   c                 óB   — t         j                  | j                  z  dk7  S ©Nr   )r,   rQ   r9   ©r‡   s    r   r�   z:Sync.pull_dir.<locals>.rec_pull_contents.<locals>.<lambda>ä   ó   € œdŸl™l¨Q¯V©VÑ3°qÑ8€ r   c                 óB   — t         j                  | j                  z  dk7  S r�   )r,   re   r9   r�   s    r   r�   z:Sync.pull_dir.<locals>.rec_pull_contents.<locals>.<lambda>é   r‘   r   ©r}   )
rG   rE   Úfilterr   r   rN   rO   ÚosÚmakedirsr   )rI   rJ   r}   ÚsÚitemsÚdirsÚfilesÚdirÚnew_srcÚnew_dstÚfileÚrec_pull_contentsr   s              €€r   rŸ   z(Sync.pull_dir.<locals>.rec_pull_contentsÙ   s  ø€ ØˆAÜ˜×,Ñ,¨SÓ1Ó2ˆEäœÙ:Øóó ˆEô
 ÜÙ8ØóóˆDô
 ÜÙ8ØóóˆEð ò L�Ü)¨#¨s¯x©xÓ8�Ü'.§|¡|´KÀÀSÇXÁXÓ4NÓ'O�Ü—‘˜G¨hÕ7ØÑ& w°À(ÔKÑK‘ð	Lð ò 6�Ü)¨#¨t¯y©yÓ9�Ü)¨#¨t¯y©yÓ9�Ø�T—^‘^ G¨WÓ5Ñ5‘ð6ð
 ˆHr   r“   ©T)
rR   ÚtypingÚUnionrN   rO   Úboolrf   rM   r•   r–   )r   rI   rJ   r}   rŸ   s   `   @r   r€   zSync.pull_dirÒ   sp   ù€ ñ	¤3ð 	¬V¯\©\¼#¼w¿|¹|Ð:KÑ-Lð 	ÔX\ð 	Ôhkö 	ôD �cœ3ÔÜ—,‘,˜sÓ#ˆCÜ
�‰�C (Õ+á   c°HÔ=Ð=r   N)ií  F)r   )Fr    ) Ú__name__Ú
__module__Ú__qualname__r   r   r   rR   r)   r£   r/   r   r,   rE   r¡   ÚListrG   r¢   rN   rO   r^   r_   ÚBinaryIOrf   rV   rU   ÚIteratorru   rx   r|   rƒ   r   r€   © r   r   r   r   !   s  „ ð˜zó ð ð	 #ð 	¨Cò 	ó ð	ð'˜3ð ' 4ó 'ð6˜ð 6 ó 6ð8 3ó 8ð/˜ð / §¡¨SÑ!1ó /ð
 Ø ñ6˜Ÿ™ W§\¡\°3¸¸yÈ&Ï/É/Ð%YÑZð 6Ø—,‘,˜wŸ|™|¨SÐ0Ñ1ð6àð6ð ð6ð &)ó6ð< Øñ,à—‘˜gŸl™l¨C°¸	À6Ç?Á?ÐRÑSð,ð ð,ð ð	,ð
 ð,ð
 %(ó,ð\< ð <¨¯©¸Ñ)?ó <ð&1˜sð 1 uó 1ñ?˜cð ?¨Sð ?¸só ?ñ5˜ð 5 &§,¡,¨s°G·L±LÐ/@Ñ"Að 5ÈTð 5Ð^aó 5ð ˜Sð  v§|¡|°C¸¿¹Ð4EÑ'Fð È3ó ñ ->˜Cð -> f§l¡l°3¸¿¹Ð3DÑ&Eð ->ÐQUð ->Ðadô ->r   r   )Ú__doc__Úloggingr%   r7   r¡   r•   r`   r,   rN   Ú
contextlibr   Úadbutils._adbr   Úadbutils._protor   Úadbutils._utilsr   Úadbutils.errorsr   Úadbutils._device_baser   Ú	getLoggerr¤   rS   rh   rp   Ú_DENTr?   rq   r   rª   r   r   ú<module>rµ      sm   ðñó Û Û Û Û 	Û 	Û Û Ý %å "Ý $Ý 'Ý (Ý ,à	ˆ×	Ñ	˜8Ó	$€à€Ø€Ø€Ø€Ø€÷^>ò ^>r   