
    %j!                        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	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Zdej(                  eej,                  f   dedefdZd	edefd
ZdedefdZd Zdej(                  eef   fdZd Z d Z!defdZ"ddZ#defdZ$ G d d      Z% G d d      Z& G d d      Z'dedefdZ(y)    N)which)AdbErrori   baseadditionreturnc                     t        | t        j                        r| |z  j                         S | d   dk7  r| dz   |z   S | |z   S )N/)
isinstancepathlibPathas_posix)r   r   s     S/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/adbutils/_utils.pyappend_pathr      sE    $%x))++(,RCtczH$LTH_L    nc                 ,    dt        |       t        z  z  S )Nz%.1f MB)floatMB)r   s    r   humanizer      s    a2&&r   portc                     t        j                   t         j                  t         j                        5 }|j                  d| f      dk(  cd d d        S # 1 sw Y   y xY w)N	127.0.0.1r   )socketAF_INETSOCK_STREAM
connect_ex)r   ss     r   is_port_in_user   #   sG    	v~~v'9'9	: 6a||[$/0A56 6 6s   AAc                     	 t        j                   t         j                  t         j                        } | j                  d       	 | j	                         d   | j                          S # | j                          w xY w# t        $ rC t        d      D ])  }t        j                  dd      }t        |      r%|c cY S  t        d      w xY w)N)r   r         i'  i N  zNo free port found)r   r   r   bindgetsocknamecloseOSErrorrangerandomrandintr   r   )r   _r   s      r   get_free_portr+   (   s    -MM&..&*<*<=	 	==?1%GGIAGGI - r 	A>>%/D!$'	 +,,-s0   AA> A) A> )A;;A> >8C
7C
=C
argsc                 T    dj                  t        t        j                  |             S )z do not use subprocess.list2cmdline, use this instead

    Reason:
        subprocess.list2cmdline(['echo', '&']) --> "a &", but what I expect should be "a '&'"
     )joinmapshlexquote)r,   s    r   list2cmdliner3   :   s     88CT*++r   c                  <   t        j                   t         j                  t         j                        } 	 | j                  d       | j	                         d   }|| j                          S # t        $ r Y | j                          yw xY w# | j                          w xY w)N)z8.8.8.8P   r   r   )r   r   
SOCK_DGRAMconnectr$   r%   r&   )r   ips     r   
current_ipr9   C   st    fnnf&7&78A			/"]]_Q 	
	  		 	
	s#   %A* *	B3B	 BB	 	Bc                  F   t         j                  dk  r!t        j                  j	                  dd      } nAt        j                  j                  d      dz  }t        j                  j                  |      } | 5 }	 d d d        t        j                        S # 1 sw Y   xY w)N)   	   zadbutils.binariesz__init__.py)	sysversion_info	importlib	resourcespathfilesas_filestrparent)contextrefrA   s      r   _get_bin_dirrH   N   s    
& %%**+>N!!''(;<}L%%--c2	 D t{{ s   8BB c                  v   t        j                  d      rt        j                  d      S t        d      } | rt        |       r| S t	               }t         j
                  j                  |t         j                  dk(  rdnd      } t         j
                  j                  |       rt        |       r| S t        d      )NADBUTILS_ADB_PATHadbntzadb.exez5No adb exe could be found. Install adb on your system)
osgetenvr   _is_valid_exerH   rA   r/   nameisfiler   )exebin_dirs     r   adb_pathrT   Z   s    	yy$%yy,-- ,C
}S!
 nG
'',,wRWW_	%
HC	ww~~c}S1

J
KKr   c                 .   d }d }d}t         j                  j                  d      r7t        j                         }|xj
                  t        j                  z  c_        | r2t         j                  j                  d      rd}nt        j                  }|||dS )Nr   wini   )startupinfocreationflags
preexec_fn)	r=   platform
startswith
subprocessSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWrM   setpgrp)prevent_sigintrW   rY   rX   s       r   _popen_kwargsrb   m   s    KJM
||u% ,,.z>>> <<""5)&MJ"&  r   rR   c                     | dg}	 t        j                  |ft         j                  t         j                  t         j                  dt	                y# t
        t        t         j                  f$ r Y yw xY w)Nversion)stdinstdoutstderrTF)r\   
check_callDEVNULLSTDOUTrb   r&   
ValueErrorCalledProcessError)rR   cmds     r   rO   rO      so    	
C	
!))*2D2D$$	
(5	
 Z!>!>? s   AA A43A4c                   <    e Zd Zd
defdZdefdZdedefdZd	 Zy)ReadProgressN
total_sizec                 ,   || _         || _        d| _        t        j                         | _        t        j                         | _        t        j                         | _        d| _	        d| _
        |rdnt        j                  d      | _        || _        y)zU
        Args:
            source_path (str): store read content to filepath
        r    Nz.apk)suffix)rtotalcopiedtime
start_timeupdate_timehashlibmd5m_chunk_size_hashtempfileNamedTemporaryFile_tmpfd	_filepath)selfrt   rp   source_paths       r   __init__zReadProgress.__init__   sn    
 
))+99;
)dx/J/JRX/Y$r   chunkc                    t        |      }| j                  j                  |       |dk(  r| j                  j                         | _        | xj
                  |z  c_        | xj                  |z  c_        | j                  r&t        | j
                        | j                  z  dz  }n|rdnd}t        |      }t        j                         | j                  z
  }|dk(  s|dkD  r|rt        | j                  |z        dz   }nFt        dt        j                         | j                  z
        }t        | j
                  |z        dz   }t        j                         | _        d| _        t        | j
                        }t        | j                        }	t        t         j"                  d      r=t         j"                  j%                         rt'        d	j)                  ||||	             y y y y )
Nr   d   g        g      Y@g      ?z/sg?isattyz{:.1f}%	{} [{}/{}])lenr|   update	hexdigestr~   rv   r}   ru   r   intrw   ry   r   maxrx   hasattrr=   rf   r   printformat)
r   r   
chunk_sizepercentpdurationspeedcopytimecopysize	totalsizes
             r   r   zReadProgress.update   sy   Z
e?))+DJz!J&::DKK(4::5;G'cUGL99;!1!11:C !1!1H!<=DsDIIK$//$AB x!784?#yy{D D,H ,Iszz8,1B1B1D+227E83<> ? 2E, (r   r   r   c                     | j                   j                  |      }| j                  |       | j                  r| j                  j	                  |       |S N)rt   readr   r   write)r   r   r   s      r   r   zReadProgress.read   s=    AE;;KKe$r   c                     | j                   r| j                   S | j                  j                  d       | j                  j                  S )Nr   )r   r   seekrP   r   s    r   filepathzReadProgress.filepath   s5    >>>>!{{r   r   )	__name__
__module____qualname__r   r   bytesr   r   r    r   r   ro   ro      s2    %c % ?E ?>c e  r   ro   c                   2    e Zd Zdej                  fdZd Zy)	APKReaderfpc                     || _         y r   )_fp)r   r   s     r   r   zAPKReader.__init__   s	    r   c                    	 ddl m} j                  | j                        }|j                          |j                         }|j                  }|r|d   nd }|r|j                  d      dk(  rd|z   }t        d|       t        d|       t        d|j                         t        d	|j                         y # t        $ r t        j                  d       Y w xY w)
Nr   )APKz2apkutils is not installed, please install it first.r	   zpackage:zmain-activity:zversion-name:zversion-code:)apkutilsr   ImportErrorr=   exitfrom_ior   get_manifestget_manifest_main_activitiespackage_namefindr   _version_name_version_code)r   r   apk
activitiesr   main_activitys         r   	dump_infozAPKReader.dump_info   s    	K$ kk$((#557
'')3
1]//4:-/Mj,'.os001os001  	KHHIJ	Ks   B8 8CCN)r   r   r   typingBinaryIOr   r   r   r   r   r   r      s    6?? 2r   r   c                   D    e Zd Zd Zd
dZd ZdefdZd ZdefdZ	d	 Z
y)	StopEventc                 h    t        j                         | _        t        j                         | _        y r   )	threadingEvent_StopEvent__stop_StopEvent__doner   s    r   r   zStopEvent.__init__   s    oo'oo'r   Nc                     | j                   j                          | j                  j                  |      st	        d|      y)zf send stop signal and wait signal accepted 
        
        Raises:
            TimeoutError
        zwait for stopped timeoutN)r   setr   waitTimeoutError)r   timeouts     r   stopzStopEvent.stop   s7     	{{(97CC )r   c                 8    | j                   j                          y)z send stop signal N)r   r   r   s    r   stop_nowaitzStopEvent.stop_nowait       r   r   c                 6    | j                   j                         S r   )r   is_setr   s    r   
is_stoppedzStopEvent.is_stopped   s    {{!!##r   c                 8    | j                   j                          y)z2 for worker thread to notify stop signal accepted N)r   r   r   s    r   donezStopEvent.done   r   r   c                 6    | j                   j                         S )z( check if background worker has stopped )r   r   r   s    r   is_donezStopEvent.is_done   s    {{!!##r   c                 l    | j                   j                          | j                  j                          y r   )r   clearr   r   s    r   resetzStopEvent.reset  s"    r   r   )r   r   r   r   r   r   boolr   r   r   r   r   r   r   r   r      s4    (D$D $$ $r   r   textc                    | j                  t        j                  i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdB            }|S )CzN
    A helper that escape special characters

    Args:
        text: str
    -z\-+z\+[z\[]z\](z\()z\){z\{}z\}\z\\\\^z\^$z\$*z\*r   z\.,z\,:z\:~z\~;z\;>z\><z\<%z\%#z\#'z\\'"z\\"`z\`!z\!?z\?|z\|=z\=@z\@r
   z\/r*   z\_r.   z%s&z\&)	translaterD   	maketrans)r   escapeds     r   escape_special_charactersr     s    nn "
"
"
 "
 	"

 "
 "
 "
 "
 '"
 "
 "
 "
 "
 "
 "
  !"
" #"
$ %"
& '"
( )"
* +"
, &-"
. &/"
0 1"
2 3"
4 5"
6 7"
8 9"
: ;"
< ="
> ?"
@ A"
B C"
 "	#GH Nr   )F))rz   importlib.resourcesr?   rM   r(   r1   r   r\   r=   r   r   rw   r   zipfiler   shutilr   adbutils.errorsr   r   UnionrD   r   r   r   r   r   r   r+   listtupler3   r9   rH   rT   rb   rO   ro   r   r   r   r   r   r   <module>r     s     	     
         $ Mfll3#45 M M M' ' '6 6 6
-$,v||D%K0 ,		L# L&,	s 	;  ; |2 20   F+C +C +r   