
    %jL                        d dl m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m	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlZd dlZd dlmZ d dlmZ  ej8                  e      Z ej>                  d      Z d	e!d
e"fdZ#dejH                  d
e%fdZ&dejH                  d
e%fdZ'dejH                  d
e%fdZ(dejH                  dee!   de"fdZ)de!d
e!fdZ* G d de+      Z, G d de	      Z- G d de      Z.de!de"fdZ/y)    )absolute_importN)BaseHTTPRequestHandlerThreadingHTTPServer)AnyCallableDictListOptionalTuple)ElementTree)SERVER_PROTOCOL_VERSION)DEFAULT_SERVER_PORTz\[(\d+),(\d+)\]\[(\d+),(\d+)\]
bounds_strreturnc                 F   t         j                  |       }|syt        |j                  d            t        |j                  d            t        |j                  d            t        |j                  d            f\  }}}}t	        d||z
        t	        d||z
        z  S )Nr               )
_BOUNDS_RE	fullmatchintgroupmax)r   matchx1y1x2y2s         a/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/uiautomator2/agent_cli/server.py_bounds_arear!      s      ,EQ(#ekk!n*=s5;;q>?RTWX]XcXcdeXfTggNBBq"r'?SBG_,,    nodec                     | j                  d      dk(  ry| j                  dd      }t        |      xr t        |      dk(  S )N	displayedfalseTbounds r   )getboolr!   )r#   r'   s     r    _is_invisibler+   !   s?    xx'XXh#F<5L0A55r"   c                     t        | j                  dd      j                         xsB | j                  dd      j                         xs  | j                  dd      j                               S )Ntextr(   content-descresource-id)r*   r)   stripr#   s    r    _has_contentr2   (   s^    ""$ 	/88NB'--/	/88M2&,,. r"   c                 V    | j                  d      dk(  xs | j                  d      dk(  S )N	clickabletrue
scrollable)r)   r1   s    r    _is_interactiver7   0   s)    88K F*Ndhh|.D.NNr"   linesdepthc                 
   t        |       ry t        |       }| j                  dk7  r5t        |       s*t	        |       st        |      dk(  rt        |d   ||       y g }| j                  d| j                        }|r|dk7  r|j                  |       | j                  dd      j                         }|r|j                  d|z         | j                  dd      j                         }|r||k7  r|j                  d	|z         | j                  d
d      j                         }|r|j                  d|z         | j                  dd      }	|	rqt        j                  |	      }
|
rZ|j                  d|
j                  d      d|
j                  d      d|
j                  d      d|
j                  d      d	       g }| j                  d      dk(  r|j                  d       | j                  d      dk(  r|j                  d       | j                  d      dk(  r|j                  d       | j                  d      dk(  r|j                  d       | j                  d      dk(  r|j                  d       | j                  d      dk(  r|j                  d       |r |j                  dj                  |             |r,|j                  d|z  dj                  |      z          |dz   }n|}|D ]  }t        |||        y ) N	hierarchyr   r   classr-   r(   z"%s"r.   z	desc="%s"r/   z#%sr'   [,r   r   r   ]r4   r5   clickr6   scrollcheckedfocusedselectedenabledr&   disabled z  )r+   listtagr2   r7   len_render_noder)   appendr0   r   r   r   join)r#   r8   r9   childrenparts
class_namer-   descresource_idr'   r   flagschild_depthchilds                 r    rK   rK   4   s   TDzHxx;|D'9/RVBW\_`h\imn\nXa[%/E'488,JjK/Z 88FB%%'DVd]#88NB'--/D[4'(((="-335KU[()XXh#F$$V,LLEKKNEKKNEKKXYN\a\g\ghi\jklExx&Wxx'Xxx	f$Yxx	f$Yxx
v%Z xx	g%Z SXXe_%TE\CHHUO34ai 0UE;/0r"   xmlc                 l    t        j                  |       }g }t        ||d       dj                  |      S )Nr   
)ET
fromstringrK   rM   )rV   rootr8   s      r    hierarchy_to_textr\   o   s0    ==DEua 99Ur"   c            
          e Zd Z	 	 	 ddeedej                  f      deeg ee   f      deeg ef      fdZ	e
dee   fd       Zedee   fd	       Zedefd
       ZdedefdZdefdee   defdZdefdee   defdZy)DeviceRegistryN	connector.device_listerdefault_serial_getterc                     |xs t         j                  | _        |xs | j                  | _        |xs | j
                  | _        i | _        d | _        t        j                         | _        y N)u2connect
_connector_list_online_serials_device_lister_current_unique_serial_default_serial_getter_devices_default_serial	threadingLock_lock)selfr_   r`   ra   s       r    __init__zDeviceRegistry.__init__w   sW     $1rzz+Ht/H/H&;&Zt?Z?Z##^^%
r"   r   c                     | j                   S rc   )rl   rp   s    r    default_serialzDeviceRegistry.default_serial   s    ###r"   c                  x    t         j                  j                         D  cg c]  } | j                   c} S c c} w rc   )adbutilsadbdevice_listserial)devices    r    rg   z#DeviceRegistry._list_online_serials   s'    ,4LL,D,D,FG&GGGs   7c                  R    t         j                  j                         j                  S rc   )rv   rw   rz   ry    r"   r    ri   z%DeviceRegistry._current_unique_serial   s    ||""$+++r"   portc                 z   | j                   o| j                         }| j                   |v r| j                   S t        j                  d| j                          | j                  j                  d|fd        d | _         | j                         | _         t        j                  d| j                          | j                   S )Nz5default device offline, clear cached device serial=%rr(   zbind default device serial=%r)rl   rh   loggerinfork   poprj   )rp   r}   online_serialss      r    _resolve_default_serialz&DeviceRegistry._resolve_default_serial   s    +!002N##~5+++KKOQUQeQefMMr4j$/#'D #::<3T5I5IJ###r"   ry   c                 2    | j                  ||      \  }}|S )Nr}   )get_with_serial)rp   ry   r}   rz   _s        r    r)   zDeviceRegistry.get   s     ((d(;	r"   c                     | j                   5  |}|| j                  |      }|xs d|f}|| j                  vr | j                  ||      | j                  |<   | j                  |   |fcd d d        S # 1 sw Y   y xY w)Nr(   r   )ro   r   rk   rf   )rp   ry   r}   connect_serialkeys        r    r   zDeviceRegistry.get_with_serial   s    ZZ 	6#N%!%!=!=d!C<R&C$--'%)__^$_%Oc"==%~5	6 	6 	6s   AA33A<)NNN)__name__
__module____qualname__r
   r   rd   Devicer	   strrq   propertyrt   staticmethodrg   ri   r   r   DEFAULT_DEVICE_PORTr)   r   r|   r"   r    r^   r^   v   s   GKDHFJ&(8CN+C"D & ("d3i-)@ A&(0"c'1B(C& $ $ $ H$s) H H ,C , ,$C $C $ +/<O (3- c  7;H[ 6hsm 6# 6r"   r^   c                   >     e Zd ZdZddeeef   dee   f fdZ	 xZ
S )U2CliServerTserver_addressregistryc                 \    t         t        |   |t               |xs
 t	               | _        y rc   )superr   rq   U2CliRequestHandlerr^   r   )rp   r   r   	__class__s      r    rq   zU2CliServer.__init__   s$    k4).:MN 4N$4r"   rc   )r   r   r   daemon_threadsr   r   r   r
   r^   rq   __classcell__)r   s   @r    r   r      s-    N5uS#X 5(>BZ 5 5r"   r   c                   Z   e Zd ZU eed<   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#d$d%d&d'd(d)d*d+d,d-	Zd. Zd/ Zd0 Zd1e	d2e
e	ef   fd3Zd4 Zd2e
e	ef   fd5Zd2e
e	ef   fd6Zd2e
e	ef   fd7Zd2e
e	ef   fd8Zd2e
e	ef   fd9Zd2e
e	ef   fd:Zd2e
e	ef   fd;Zd2e
e	ef   fd<Zd2e
e	ef   fd=Zd2e
e	ef   fd>Zd2e
e	ef   fd?Zd2e
e	ef   fd@Zd2e
e	ef   fdAZd2e
e	ef   fdBZd2e
e	ef   fdCZd2e
e	ef   fdDZd2e
e	ef   fdEZd2e
e	ef   fdFZd2e
e	ef   fdGZ e!d2e
e	ef   fdH       Z"d2e
e	ef   fdIZ#d2e
e	ef   fdJZ$d2e
e	ef   fdKZ%d2e
e	ef   fdLZ&d2e
e	ef   fdMZ'd2e
e	ef   fdNZ(d2e
e	ef   fdOZ)d2e
e	ef   fdPZ*dUdQe
e	ef   dRe+fdSZ,yT)Vr   server
screenshot_screenshotdump_hierarchy_dump_hierarchyapp_current_app_currentdevice_info_device_infowindow_size_window_size	app_start
_app_startapp_list	_app_listapp_stop	_app_stopapp_install_app_installapp_uninstall_app_uninstall	app_clear
_app_clearshell_shellopen_notification_open_notificationopen_quick_settings_open_quick_settingsopen_url	_open_urlpress_press	send_keys
_send_keys_clear_text_click_double_click_long_click_swipe_drag_selector_exists_selector_wait_selector_scroll)	
clear_textr@   double_click
long_clickswipedragselector_existsselector_waitselector_scrollc                 0    t        j                  |g|  y rc   )r   debug)rp   fmtargss      r    log_messagezU2CliRequestHandler.log_message   s    S 4 r"   c                     | j                   dk7  r| j                  dddd       y | j                  d| j                         d       y )	Nz/statusF	not foundokerror  statusTr   result)path
_send_json_statusrs   s    r    do_GETzU2CliRequestHandler.do_GET   s=    99	!OO5;?OLtt||~>?r"   c                 .   | j                   dk7  r| j                  dddd       y 	 t        | j                  j	                  d      xs d      }t        j                  | j                  j                  |      j                  d	            }|j	                  d
      dk(  rP| j                  dddid       t        j                  | j                  j                  d      j                          y | j                  |j	                  d
      |j	                  d      xs i       }| j                  d|d       y # t         $ rQ}t"        j%                  d       | j                  dt'        |      |j(                  j*                  d       Y d }~y d }~ww xY w)Nz/requestFr   r   r   r   Content-Length0utf-8methodzserver.stopTstoppingr   u2cli_server_shutdown)targetnameparamszu2cli request failed)r   r   type)r   r   r   headersr)   jsonloadsrfilereaddecoderm   Threadr   shutdownstart	_dispatch	Exceptionr   	exceptionr   r   r   )rp   content_lengthpayloadr   es        r    do_POSTzU2CliRequestHandler.do_POST   s=   99
"OO5;?OL	Z !1!12B!C!JsKNjj!@!G!G!PQG{{8$5t
D7I JK  (<(<CZ[aac^^GKK$97;;x;P;VTVWFOO46:; 	Z34OO53q61;;CWCWXYY	Zs    CD: 1AD: :	FAFFr   r   c                     |dk(  r| j                         S | j                  j                  |      }|r t        | |      |      S t	        d|z        )Nzserver.statuszunknown method: %s)r   _REQUEST_HANDLERSr)   getattr
ValueError)rp   r   r   handler_names       r    r   zU2CliRequestHandler._dispatch   sT    _$<<>!--11&9.74.v66-677r"   c                     | j                   j                  d d \  }}t        j                         ||t        | j                   j
                  j                  dS )Nr   )pidhostr}   protocol_versiondevice_serial)r   r   osgetpidr   r   rt   )rp   r  r}   s      r    r   zU2CliRequestHandler._status   sK    [[//3
d99; 7![[11@@
 	
r"   c                     t        |j                  d      xs t              }| j                  j                  j                  |j                  d      |      S )Nr}   ry   r   )r   r)   r   r   r   r   )rp   r   r}   s      r    _devicezU2CliRequestHandler._device   sD    6::f%<)<={{##33FJJx4Ht3TTr"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                         }|j                  \  }}|j                  |       ||d||dS )Nfilenamezfilename is requiredx)r  
resolutionr	  )r)   r  r  r   sizesave)rp   r   r  rz   r	  imagewidthheights           r    r   zU2CliRequestHandler._screenshot  sl    ::j)344 $V 4!!#

v

8$uf4M`mnnr"   c                    | j                  |      \  }}i }|j                  d      rd|d<   |j                  d      t        |j                  d            |d<    |j                  di |}|j                  d      r|n
t	        |      }|j                  d      }|r-t        |dd      5 }|j                  |       d d d        ||d	S ||d
S # 1 sw Y   xY w)N
compressedT	max_depthrawoutputwr   )encoding)r  r	  )contentr	  r|   )r  r)   r   r   r\   openwrite)	rp   r   rz   r	  kwargsrV   r   r  fs	            r    r   z#U2CliRequestHandler._dump_hierarchy  s     $V 4::l##'F< ::k"."%fjj&=">F;#f##-f-

5)/@/EH%fcG4    &GG!MBB   s   ,CCc                 X    | j                  |      \  }}|j                         }||d<   |S Nr	  )r  r   rp   r   rz   r	  r   s        r    r   z U2CliRequestHandler._app_current  s2     $V 4##%"/r"   c                 b    | j                  |      \  }}t        |j                        }||d<   |S r$  )r  dictr   r%  s        r    r   z U2CliRequestHandler._device_info%  s4     $V 4f(()"/r"   c                 \    | j                  |      \  }}|j                         \  }}|||dS )N)r  r  r	  )r  r   )rp   r   rz   r	  r  r  s         r    r   z U2CliRequestHandler._window_size+  s4     $V 4**,v&=QQr"   c                 :   |j                  d      }|st        d      | j                  |      \  }}i }|j                  d      r|j                  d      |d<   |j                  d      rd|d<   |j                  d      rd|d<    |j                  |fi | d|iS )Npackagepackage is requiredactivitywaitTstopr	  )r)   r  r  r   )rp   r   r*  rz   r	  r!  s         r    r   zU2CliRequestHandler._app_start0  s    **Y'233 $V 4::j!!'J!7F:::f!F6N::f!F6N+F+//r"   c                 |    | j                  |      \  }}|j                  |j                  d      xs d      }||dS )Nfilterr(   )packagesr	  )r  r   r)   )rp   r   rz   r	  r1  s        r    r   zU2CliRequestHandler._app_list?  s<     $V 4??6::h#7#=2>$}EEr"   c                     | j                  |      \  }}|j                  d      r|j                          d|iS |j                  d      }|st        d      |j	                  |       d|iS )Nallr	  r*  z(package is required unless --all is used)r  r)   app_stop_allr  r   )rp   r   rz   r	  r*  s        r    r   zU2CliRequestHandler._app_stopD  sl     $V 4::e!#]33**Y'GHH //r"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                  |      }||dS )Napkzapk is requiredr   r	  )r)   r  r  r   )rp   r   r6  rz   r	  r   s         r    r   z U2CliRequestHandler._app_installO  sM    jj.// $V 4##C( =AAr"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                  |      }||dS )Nr*  r+  r7  )r)   r  r  r   )rp   r   r*  rz   r	  r   s         r    r   z"U2CliRequestHandler._app_uninstallW  sM    **Y'233 $V 4%%g. =AAr"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                  |       d|iS )Nr*  r+  r	  )r)   r  r  r   )rp   r   r*  rz   r	  s        r    r   zU2CliRequestHandler._app_clear_  sK    **Y'233 $V 4!//r"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                  |t	        |j                  d      xs d            }|j
                  |j                  |dS )Ncommandzcommand is requiredtimeout<   r<  )r  	exit_coder	  )r)   r  r  r   r   r  r?  )rp   r   r;  rz   r	  responses         r    r   zU2CliRequestHandler._shellg  so    **Y'233 $V 4<<VZZ	5J5Pb1Q<R"//8J8J]jkkr"   c                 R    | j                  |      \  }}|j                          d|iS r$  )r  r   rp   r   rz   r	  s       r    r   z&U2CliRequestHandler._open_notificationo  s,     $V 4  "//r"   c                 R    | j                  |      \  }}|j                          d|iS r$  )r  r   rB  s       r    r   z(U2CliRequestHandler._open_quick_settingst  s,     $V 4""$//r"   c                     |j                  d      }|st        d      | j                  |      \  }}|j                  |       d|iS )Nurlzurl is requiredr	  )r)   r  r  r   )rp   r   rE  rz   r	  s        r    r   zU2CliRequestHandler._open_urly  sI    jj.// $V 4//r"   c                     |j                  d      }|t        d      | j                  |      \  }}|j                  |       d|iS )Nr   zkey is requiredr	  )r)   r  r  r   )rp   r   r   rz   r	  s        r    r   zU2CliRequestHandler._press  sK    jj;.// $V 4S//r"   c                     |j                  d      }|t        d      | j                  |      \  }}|j                  |t	        |j                  d                   d|iS )Nr-   ztext is requiredclear)rH  r	  )r)   r  r  r   r*   )rp   r   r-   rz   r	  s        r    r   zU2CliRequestHandler._send_keys  s`    zz&!</00 $V 4T&**W*=%>?//r"   c                 R    | j                  |      \  }}|j                          d|iS r$  )r  r   rB  s       r    r   zU2CliRequestHandler._clear_text  s,     $V 4//r"   c                     |j                  d      xs i } | di |}g }|j                  d      r |j                  |j                  d             |j                  |j                  d      xs g        |D ]  } |j                  di |} |S )Nselectorchild_selectorchild_selectorsr|   )r)   rL   extendrU   )rz   r   rK  objrM  rL  s         r    
_ui_objectzU2CliRequestHandler._ui_object  s    ::j)/R x ::&'""6::.>#?@vzz*;<BC- 	.N#))-n-C	.
r"   c                 N   | j                  |      \  }}|j                  d      xs i }|r5| j                  ||      j                  |j                  d             d|iS |j                  t	        |j                  d            t	        |j                  d                   d|iS )NrK  r<  r>  r  yr	  )r  r)   rP  r@   float)rp   r   rz   r	  rK  s        r    r   zU2CliRequestHandler._click  s     $V 4::j)/ROOFF+11&**Y:O1P  // LLvzz#/vzz#1GH//r"   c           	          | j                  |      \  }}|j                  t        |j                  d            t        |j                  d            t        |j                  d      xs d             d|iS )Nr  rR  durationg?rU  r	  )r  r   rS  r)   rB  s       r    r   z!U2CliRequestHandler._double_click  sh     $V 4E&**S/2E&**S/4JUZ[a[e[efp[q[xuxUyz//r"   c                    | j                  |      \  }}|j                  d      xs i }t        |j                  d      xs d      }|r6| j                  ||      j	                  ||j                  d             d	|iS |j	                  t        |j                  d            t        |j                  d            |       d	|iS )
NrK  rU        ?r<  )rU  r<  r  rR  rV  r	  )r  r)   rS  rP  r   )rp   r   rz   r	  rK  rU  s         r    r   zU2CliRequestHandler._long_click  s     $V 4::j)/RJ/637OOFF+66RXR\R\]fRg6h  // eFJJsO4eFJJsO6LW_`//r"   c           
         | j                  |      \  }}i }|j                  d      t        |j                  d            |d<   n.|j                  d      t        |j                  d            |d<   |j                  d      rF|j                  d      } |j                  |j                  d      fd|dn
t        |      i| d|iS dD ]  }|j                  |      t        d        |j                  t        |j                  d	            t        |j                  d
            t        |j                  d            t        |j                  d            fi | d|iS )NstepsrU  	directionscaleg?r	  )fxfytxtyzfx, fy, tx and ty are requiredr]  r^  r_  r`  )r  r)   r   rS  	swipe_extr  r   )rp   r   rz   r	  r!  r\  r   s          r    r   zU2CliRequestHandler._swipe  sT    $V 4::g*!&**W"56F7OZZ
#/!&vzz*'=!>F:::k"JJw'EFVZZ4m5=CV[\aVbmflm#]33, 	CDzz$' !ABB	C 	&**T"#&**T"#&**T"#&**T"#		

 	
  //r"   c                 V   | j                  |      \  }}|j                  t        |j                  d            t        |j                  d            t        |j                  d            t        |j                  d            t        |j                  d      xs d             d|iS )	NsxsyexeyrU  rX  rV  r	  )r  r   rS  r)   rB  s       r    r   zU2CliRequestHandler._drag  s     $V 4&**T"#&**T"#&**T"#&**T"#6::j18S9 	 	
  //r"   c                     | j                  |      \  }}t        |j                  d      xs d      }| j                  ||      }|r|j	                  |      n|j                  }t        |      |dS )Nr<  r   r>  r7  )r  rS  r)   rP  existsr*   )rp   r   rz   r	  r<  rO  rh  s          r    r   z$U2CliRequestHandler._selector_exists  sd     $V 4

9-23ooff-07G,SZZv,GGr"   c                    | j                  |      \  }}| j                  ||      }t        |j                  d      xs d      }|j                  d      r|j	                  |      }n|j                  |      }t        |      |dS )Nr<  g      @goner>  r7  )r  rP  rS  r)   	wait_goner-  r*   )rp   r   rz   r	  rO  r<  r   s          r    r   z"U2CliRequestHandler._selector_wait  sx     $V 4ooff-

9-45::f]]7]3FXXgX.Fv,GGr"   c                    | j                  |      \  }}| j                  ||      }|j                  d      xs d}|j                  d      xs d}t        |j                  |      }|j                  d      r%|j                  |j                  d             d	|iS |j                  d      / t        ||      t        |j                  d                   d	|iS  t        ||              d	|iS )
Nr[  vertactionforwardto_text)r-   
max_swipes)rq  r	  )r  rP  r)   r  rA   tor   )rp   r   rz   r	  rO  r[  rn  r   s           r    r   z$U2CliRequestHandler._selector_scroll  s     $V 4ooff-JJ{+5v	H%2Y/::i II6::i0I1
  //	 ZZ%1#GFF#s6::l3K/LM  // $GFF#%//r"   datar   c                 0   t        j                  |      j                  d      }| j                  |       | j	                  dd       | j	                  dt        t        |                   | j                          | j                  j                  |       y )Nr   zContent-Typezapplication/jsonr   )
r   dumpsencodesend_responsesend_headerr   rJ   end_headerswfiler   )rp   rs  r   bodys       r    r   zU2CliRequestHandler._send_json  sq    zz$&&w/6");<)3s4y>:

r"   N)   )-r   r   r   r   __annotations__r  r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP  r   r   r   r   r   r   r   r   r   r   r|   r"   r    r   r      s   m+ 	~ 	~	
 	~ 	\ 	K 	K 	~ 	) 	\ 	 	1 	5 	K  	!" 	\#$ $'#-)-5:!@Z$8 8T#s(^ 8
Ud38n Uo$sCx. oCd38n C$4S> 4S> R4S> R
0c3h 0FS#X F
	0S#X 	0B4S> BBT#s(^ B0c3h 0lT#s(^ l0c3h 0
04S> 0
0S#X 00T#s(^ 00c3h 00$sCx. 0
 	4S> 	 	0T#s(^ 00DcN 0
0$sCx. 00T#s(^ 00	0DcN 	0HtCH~ HHT#s(^ H0tCH~ 0tCH~ s r"   r   r  r}   c                     t        | |f      }t        j                  d| |       	 |j                          |j	                          y # |j	                          w xY w)Nzu2cli server listening on %s:%d)r   r   r   serve_foreverserver_close)r  r}   httpds      r    
run_serverr    sK    t%E
KK14>s   A A)0
__future__r   r   loggingr
  rerm   http.serverr   r   typingr   r   r   r	   r
   r   	xml.etreer   rY   rv   uiautomator2rd   uiautomator2.agent_cli.protocolr   uiautomator2.corer   r   	getLoggerr   r   compiler   r   r   r!   Elementr*   r+   r2   r7   rK   r\   objectr^   r   r   r  r|   r"   r    <module>r     s"   '   	 	  C = = '   C H			8	$RZZ9:
-S -S -6

 6t 6rzz d O"** O O80rzz 80$s) 80C 80v3 3 16V 16h5% 5P0 Pf
S  r"   