o
    hG                     @  s   d dl m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
mZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ erbd dlmZ d dlmZ d d	lmZm Z  d d
lm!Z! G dd deZ"G dd deZ#dS )    )annotationsN)TYPE_CHECKING)
DirCreatedEventDirDeletedEventDirModifiedEventDirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEventgenerate_sub_created_eventsgenerate_sub_moved_events)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUTBaseObserverEventEmitter)close_directory_handleget_directory_handleread_events)HANDLE)FileSystemEvent)
EventQueueObservedWatch)WinAPINativeEventc                      sl   e Zd ZdZeddd fddZdddZe dkr#d fddZ	dddZ
dddZdddZ  ZS ) WindowsApiEmitterzmWindows API-based emitter that uses ReadDirectoryChangesW
    to detect file system changes for a watch.
    Ntimeoutevent_filterevent_queuer   watchr   r   floatr   "list[type[FileSystemEvent]] | NonereturnNonec                  s(   t  j||||d t | _d | _d S )Nr   )super__init__	threadingLock_lock_whandle)selfr   r   r   r   	__class__ ]/var/www/vscode/kcb/lib/python3.10/site-packages/watchdog/observers/read_directory_changes.pyr%   $   s   

zWindowsApiEmitter.__init__c                 C  s   t | jj| _d S N)r   r   pathr)   r*   r-   r-   r.   on_thread_start0   s   z!WindowsApiEmitter.on_thread_startPyPyc                   s"   ddl m} t   |d dS )z7PyPy needs some time before receiving events, see #792.r   )sleepg{Gz?N)timer4   r$   start)r*   r4   r+   r-   r.   r6   5   s   
zWindowsApiEmitter.startc                 C  s   | j r
t| j  d S d S r/   )r)   r   r1   r-   r-   r.   on_thread_stop<   s   z WindowsApiEmitter.on_thread_stoplist[WinAPINativeEvent]c                 C  s"   | j sg S t| j | jj| jjdS )N)	recursive)r)   r   r   r0   is_recursiver1   r-   r-   r.   _read_events@   s   zWindowsApiEmitter._read_eventsc           
      C  sl  |   }| j d}|D ]}tj| jj|j}|jr|}q|jrN|}|}tj	|rE| 
t|| | jjrDt||D ]}| 
| q<q| 
t|| q|jra| 
tj	|r[tnt| q|jrtj	|}| 
|rptnt| |r| jjrt|D ]}	| 
|	 qq|jr| 
t| q|jr| 
t| jj |   qW d    d S 1 sw   Y  d S )N )r;   r(   osr0   joinr   src_pathis_renamed_oldis_renamed_newisdirqueue_eventr   r:   r   r   is_modifiedr   r
   is_addedr   r   r   
is_removedr	   is_removed_selfr   stop)
r*   r   winapi_eventslast_renamed_src_pathwinapi_eventr?   	dest_pathsub_moved_eventrB   sub_created_eventr-   r-   r.   queue_eventsE   sD    "zWindowsApiEmitter.queue_events)
r   r   r   r   r   r    r   r!   r"   r#   )r"   r#   )r"   r8   r   r    r"   r#   )__name__
__module____qualname____doc__r   r%   r2   platformpython_implementationr6   r7   r;   rO   __classcell__r-   r-   r+   r.   r      s    	


r   c                      s(   e Zd ZdZedd	 fddZ  ZS )
WindowsApiObserverzdObserver thread that schedules watching directories and dispatches
    calls to event handlers.
    r   r   r    r"   r#   c                  s   t  jt|d d S )NrY   )r$   r%   r   )r*   r   r+   r-   r.   r%   l   s   zWindowsApiObserver.__init__rP   )rQ   rR   rS   rT   r   r%   rW   r-   r-   r+   r.   rX   g   s    rX   )$
__future__r   os.pathr=   rU   r&   typingr   watchdog.eventsr   r   r   r   r   r	   r
   r   r   r   watchdog.observers.apir   r   r   r   watchdog.observers.winapir   r   r   ctypes.wintypesr   r   r   r   r   r   rX   r-   r-   r-   r.   <module>   s    0H