
    %j%                         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mZ d dl	Z	d dl
mZ d dlmZmZmZ  ej                   e      Zd Z G d d      Z G d	 d
      Z G d d      Zy)    N)OrderedDict)ListOptional)inject_call)
PageSource
XPathEntryXPathSelectorc                 $    | j                          y N)click)els    X/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/uiautomator2/watcher.py_callback_clickr      s    HHJ    c                       e Zd ZddddefdZddedefdZdefd	Zd
e	j                  fdZd ZdefdZd ZdefdZd Zd Zd Zd Zd Zy)WatchContextduiautomator2.Devicebuiltinc                    || _         t               | _        g | _        t	        j
                         | _        t        j                         | _        t	        j                         | _
        t	        j                         | _        d| _        |r6| j                  d      j                          | j                  d      j                  d      j                          | j                  d      j                  d      j                          | j                  d      j                          | j                  d      j                          | j                  d      j                          | j                  d	      j                          | j                  d
      j                          | j                  d      j                          y y )NFu   继续使用u   移入管控u   取消u   ^立即(下载|更新)u   同意u   ^(好的|确定)u   继续安装u   安装AgreeALLOW)_dr   
_callbacks_WatchContext__xpath_list	threadingLock_WatchContext__locktime_WatchContext__trigger_timeEvent_WatchContext__stop_WatchContext__stopped_WatchContext__startedwhenr   )selfr   r   s      r   __init__zWatchContext.__init__   s8   %-nn&"iik  oo'"*IIn%++-IIn%**84::<II./44X>DDFIIh%%'II()//1IIn%++-IIh%%'IIg$$&IIg$$& r   secondstimeoutc                    | j                   s| j                          t        j                         |z   }t        j                         |k  rq| j                  5  t        j                         | j                  z
  |kD  r
	 ddd       y	 ddd       t        j
                  d       t        j                         |k  rqt        d      # 1 sw Y   AxY w)z wait until watches not triggered
        Args:
            seconds: stable seconds
            timeout: raise error when wait stable timeout

        Raises:
            TimeoutError
        NTg?Unstable)r$   startr   r   r    sleepTimeoutError)r&   r(   r)   deadlines       r   wait_stablezWatchContext.wait_stable/   s     ~~JJL99;(iikH$  99;!4!44w>   >  JJrN	 iikH$
 :&&	   s   &CCxpathc                 <    | j                   j                  |       | S )u=    当条件满足时,支持 .when(..).when(..) 的级联模式)r   appendr&   r1   s     r   r%   zWatchContext.whenC   s      'r   fnc                 l    t        | j                        }g | _        |sJ d       || j                  |<   y)z
        Args:
            fn: support args (d: Device, el: Element)
                see _run_callback function for more details
        zwhen should be called beforeN)tupler   r   )r&   r5   
xpath_lists      r   callzWatchContext.callH   s8     4,,-
999z&(
#r   c                 .    | j                  t               y r   )r9   r   r&   s    r   r   zWatchContext.clickT   s    		/"r   returnc                    t         j                  d       | j                  j                         }| j                  j                         D ]  \  }}d}d }|D ]U  }| j                  j                  ||      }|j                  sd} n(|j                         }t         j                  d|       W |sgt         j                  d|       | j                  ||        y y)Nzwatch checkTsourceFz	match: %szwatchContext xpath matched: %s)
loggerdebugr   dump_hierarchyr   itemsr1   existsget_last_match_run_callback)r&   r?   xpathsfuncok
last_matchr1   sels           r   _runzWatchContext._runW   s    ]#'') OO113 	LFDBJ 1%)WW]]5]%HzzB //1
[%01 =vF""44	 r   c                 f    t        || j                  |       t        j                         | _        y )N)r   r   )r   r   r   r    )r&   rH   elements      r   rF   zWatchContext._run_callbackk   s     DDGG0"iikr   intervalc                 n   	 | j                   j                         sU| j                  5  | j                          d d d        t	        j
                  |       | j                   j                         sU| j                  j                          y # 1 sw Y   TxY w# | j                  j                          w xY wr   )r"   is_setr   rL   r   r-   r#   setr&   rO   s     r   _run_foreverzWatchContext._run_forevero   s    	!kk((*[[  IIK 

8$ kk((*
 NN 	    NN s!   &B B7B BB B4c                     | j                   ry d| _         | j                  j                          | j                  j                          d}t	        j
                  | j                  d|f      j                          y )NT       @)targetdaemonargs)r$   r"   clearr#   r   ThreadrT   r,   rS   s     r   r,   zWatchContext.startx   s]    >> 1 1 $'l	,,1EGr   c                 ~    | j                   j                          | j                  j                  d       d| _        y )N
   r)   F)r"   rR   r#   waitr$   r;   s    r   stopzWatchContext.stop   s,    B'r   c                 $    | j                          y)z alias of stop N)r`   r;   s    r   closezWatchContext.close   s    		r   c                     | S r    r;   s    r   	__enter__zWatchContext.__enter__   s    r   c                 N    t         j                  d       | j                          y )Nzcontext closed)r@   infor`   )r&   typevalue	tracebacks       r   __exit__zWatchContext.__exit__   s    $%		r   N)F)g      @g      N@)__name__
__module____qualname__boolr'   floatr0   strr%   typingCallabler9   r   rL   rF   rT   r,   r`   rb   re   rk   rd   r   r   r   r      s    '/ '$ '.'5 ' '(# 

)v 
)#d (*!U !	4
r   r   c                       e Zd ZddZedefd       Zd ZddZdde	fdZ
d	 Zd
 ZdefdZedefd       Zde	fdZddee   fdZddefdZdeddfdZddZy)Watcherc                     || _         g | _        t        j                         | _        t        j                         | _        d| _        d| _        y )NF)r   	_watchersr   r!   _watch_stop_event_watch_stopped	_watching_triggering)r&   r   s     r   r'   zWatcher.__init__   s=    !*!2'oo/ r   r<   c                 .    | j                   j                  S r   )r   r1   r;   s    r   _xpathzWatcher._xpath   s    ww}}r   c                 6    | j                   j                         S r   )r   rB   r;   s    r   _dump_hierarchyzWatcher._dump_hierarchy   s    ww%%''r   Nc                     t        | |      S r   XPathWatcherr4   s     r   r%   zWatcher.when   s    D%((r   rO   c                     | j                   rt        j                  d       yd| _         t        j                  d| j
                  |f      }d|_        |j                          |S ) stop watcher zalready startedNTwatcher)namerW   rY   )rz   r@   warningr   r[   _watch_foreverrX   r,   )r&   rO   ths      r   r,   zWatcher.start   sW    >>NN,-9%)%8%8$,<1 	

	r   c                 `   | j                   st        j                  d       y| j                  j	                         ry| j                  j                          | j                  j                  d       d| _         | j                  j                          | j                  j                          y)r   zwatch already stoppedNr]   r^   F)	rz   r@   r   ry   rQ   rR   rx   r_   rZ   r;   s    r   r`   zWatcher.stop   s    ~~NN23%%'!##B#/ !!#$$&r   c                 \    | j                   r| j                          | j                          y)z' stop watching and remove all watchers N)rz   r`   remover;   s    r   resetzWatcher.reset   s    >>IIKr   c                     | j                   S r   )rz   r;   s    r   runningzWatcher.running   s    ~~r   c                     | j                   S r   )r{   r;   s    r   
triggeringzWatcher.triggering   s    r   c                 .   	 |}| j                   j                  |      s=| j                         }|rt        d|      n|}| j                   j                  |      s=| j                  j                          y # | j                  j                          w xY w)Nr^   g      ?)ry   r_   runminrx   rR   )r&   rO   wait_timeout	triggereds       r   r   zWatcher._watch_forever   s~    	)#L))..|.D HHJ	5>s31H ))..|.D ""&&(D""&&(s   AA8 8Br?   c                     | j                   ry	 | j                  |      S # t        $ r }t        j	                  d|       Y d}~yd}~ww xY w)zJ run watchers
        Args:
            source: hierarchy content
        Fr>   z_run_watchers exception: %sN)r   _run_watchers	Exceptionr@   r   )r&   r?   es      r   r   zWatcher.run   sI    
 ??	%%V%44 	NN8!<	s   ! 	A
AA
c                    |xs | j                   j                         }| j                  D ]  }d}|d   D ]$  }| j                  ||      }|j                  r"d} n |s4t        j                  d|d   |d          d| _        |d   }|| j                  |d}t        j                  |      }|j                  j                         D ci c]  }||v r|||    }	} |j                  d
i |	}
|
j                          	  ||
j                  i |
j                   d	| _         y y	c c}w # t         $ r }t        j#                  d|       Y d}~4d}~ww xY w# d	| _        w xY w)z<
        Returns:
            bool (watched or not)
        NrG   zXPath(hook:%s): %sr   Tcallback)selectorr   r?   zwatchers exception: %sFrd   )r}   get_page_sourcerw   rD   r@   rg   r{   r   inspect	signature
parameterskeysbindapply_defaultsrY   kwargsr   r   )r&   r?   hlast_selectorr1   cbdefaultsstkeyr   bar   s               r   r   zWatcher._run_watchers   sz   
 84;;668 	A M8  $E6 :$++$(M	 0!F)Qx[I#' z] -$
 &&r*  "}}113sh #&  RWW&v&!!#--299- (-D$=	>  ! @NN#;Q??@ (-D$s0   	D&?D++	E4E
EEE	E r   r   c                     t        | d |      S r   r   )r&   r   s     r   __call__zWatcher.__call__  s    D$--r   c                     |g | _         y| j                   dd D ]@  }|d   |k(  st        j                  d||d          | j                   j                  |       B y)z remove watcher Nr   zremove(%s) %srG   )rw   r@   rA   r   )r&   r   ws      r   r   zWatcher.remove  s[    <DN" 	)AyD _dAhK@%%a(	)r   r   r   r   )rV   )rl   rm   rn   r'   propertyr   r}   r   r%   rp   r,   r`   r   ro   r   r   r   r   r   r   r   rq   r   r   rd   r   r   ru   ru      s    ! 
  ()e '"   D    )u )(:. &D &P.S .^ .)r   ru   c                   H    e Zd ZddededefdZddefdZdefdZd	 Z	d
 Z
y)r   parentr1   r   c                 D    || _         || _        |r	|g| _        y g | _        y r   )_name_parent_xpath_list)r&   r   r1   r   s       r   r'   zXPathWatcher.__init__   s#    
16ugBr   Nc                 <    | j                   j                  |       | S r   )r   r3   r4   s     r   r%   zXPathWatcher.when%  s    &r   rH   c                 ~    | j                   j                  j                  | j                  | j                  |d       y)zP
        func accept argument, key(d, el)
        d=self._d, el=element
        )r   rG   r   N)r   rw   r3   r   r   )r&   rH   s     r   r9   zXPathWatcher.call)  s4    
 	%%JJ&&'
 	r   c                 :    dt         fd}| j                  |       y )Nr   c                 @    | j                         j                          y r   )rE   r   )r   s    r   _inner_clickz(XPathWatcher.click.<locals>._inner_click5  s    ##%++-r   )r	   r9   )r&   r   s     r   r   zXPathWatcher.click4  s    	.= 	. 			,r   c                 4    dfd}| j                  |       y)z
        key (str): on of
            ("home", "back", "left", "right", "up", "down", "center",
            "search", "enter", "delete", "del", "recent", "volume_up",
            "menu", "volume_down", "volume_mute", "camera", "power")
        c                 (    | j                         y r   )press)r   r   s    r   _inner_pressz(XPathWatcher.press.<locals>._inner_pressA  s    GGCLr   Nr   )r9   )r&   r   r   s    ` r   r   zXPathWatcher.press:  s    	 			,r   ) r   )rl   rm   rn   ru   rq   r'   r%   callabler9   r   r   rd   r   r   r   r     s>    ?w ?s ?# ?
# 	 	 
 r   r   )r   loggingr   r   rr   collectionsr   r   r   uiautomator2uiautomator2.utilsr   uiautomator2.xpathr   r   r	   	getLoggerrl   r@   r   r   ru   r   rd   r   r   <module>r      sc         # !  * D D			8	$z zzH) H)V%  % r   