
    %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     Q/var/www/oz-panel.ru/ozpay-pub/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 	!NN7#LLN4;;w/0HFFKK

7#fkk$&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---- &faffkk"o FD$?DX&&44U;$FD$5	6 	6 	6s   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]]QVV[[_..*dE7}}W-4$--;;EBE tT5$77  		8 	8  4$--113E4	8 	8sA   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      c7<<(,,.C		#::$)cGLL##67"#VWWc7<<#4#9#9:CLL?EsCu55r   c           
      "   t        |t        j                        r|j                  d      }nt        |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    c7<<(((4.CS!,,s#((.CeY/0**S/C3' 6c BCCSy3t||d233
f- 	sF+c4AFF4LE  #H$5$5$9$9$;$E$E$G HGfkk$.F$FGFFKK&++dCJ*G GHFFKK&#e*,J  ]]1-
&":.. ' 1g&GGI#	$ 		#++IY&M+,- -  1g&GGI '!	 	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- 	<mmA&%<%}}T166!9=a@H$%MM($;M"=$77E\E\!'tQVVAY!?!BJFF:.E5zZ/&';<<K"#5s;;  	< 	< 	<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    xx))$/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<<71<>>#s++==c8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{     c3,,s#CXXd^ 	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-:AFFdN 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>       dllQVV3q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2E: E
 8D
 8E  L)#sxx8'.||KSXX4N'OGh7&w(KK	L  6)#tyy9)#tyy9T^^GW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 c3,,s#C
C(+ cH==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83 8/ /S!1 /
  6W\\3y&//%YZ 6,,w||S0166 6 &)6< ,gllC	6??RS, , 	,
 ,
 %(,\< <)? <&1s 1u 1?c ?S ?s ?5 5&,,sGLL/@"A 5T 5^a 5 S v||C4E'F 3  ->C ->fll3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   