o
    c                     @   s   d dl Z d dlZd dlZd dl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 dZG dd deZG dd	 d	eZdS )
    N)
DirCreatedEventDirDeletedEventDirMovedEventDirModifiedEventFileCreatedEventFileDeletedEventFileMovedEventFileModifiedEventgenerate_sub_moved_eventsgenerate_sub_created_events)EventEmitterBaseObserverDEFAULT_OBSERVER_TIMEOUTDEFAULT_EMITTER_TIMEOUT)read_eventsget_directory_handleclose_directory_handle   c                       sZ   e Zd Z	 ef fdd	Zdd Ze dkr fddZdd	 Z	d
d Z
dd Z  ZS )WindowsApiEmitterc                    s$   t  ||| t | _d | _d S N)super__init__	threadingLock_lock_handle)selfevent_queuewatchtimeout	__class__ mG:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\watchdog\observers\read_directory_changes.pyr   =   s   

zWindowsApiEmitter.__init__c                 C   s   t | jj| _d S r   )r   r   pathr   r   r"   r"   r#   on_thread_startB   s   z!WindowsApiEmitter.on_thread_startPyPyc                    s   	 t    td d S )Ng{Gz?)r   starttimesleepr%   r    r"   r#   r(   F   s   
zWindowsApiEmitter.startc                 C   s   | j r
t| j  d S d S r   )r   r   r%   r"   r"   r#   on_thread_stopK   s   z WindowsApiEmitter.on_thread_stopc                 C   s   t | j| jj| jjS r   )r   r   r   r$   is_recursiver%   r"   r"   r#   _read_eventsO   s   zWindowsApiEmitter._read_eventsc                 C   s  |   }| j d}|D ]}tj| jj|j}|jr|}q|jrU|}|}tj	|rLt
||}| jjrFtt t||D ]}| | q>| | q| t|| q|jrjtj	|r`tnt}	| |	| q|jrtj	|}
|
rwtnt}	| |	| |
r| jjrtt t|}|D ]}| | qq|jr| t| q|jr| t| jj |   qW d    d S 1 sw   Y  d S )N )r-   r   osr$   joinr   src_pathis_renamed_oldis_renamed_newisdirr   r,   r)   r*   !WATCHDOG_TRAVERSE_MOVED_DIR_DELAYr
   queue_eventr   is_modifiedr   r	   is_addedr   r   r   
is_removedr   is_removed_selfr   stop)r   r   Zwinapi_eventsZlast_renamed_src_pathZwinapi_eventr1   	dest_patheventZsub_moved_eventclsr4   Z
sub_eventsZsub_created_eventr"   r"   r#   queue_eventsR   sN   


"zWindowsApiEmitter.queue_events)__name__
__module____qualname__r   r   r&   platformpython_implementationr(   r+   r-   r?   __classcell__r"   r"   r    r#   r   7   s    r   c                       s"   e Zd Z	 ef fdd	Z  ZS )WindowsApiObserverc                    s   t  jt|d d S )N)emitter_classr   )r   r   r   )r   r   r    r"   r#   r      s   zWindowsApiObserver.__init__)r@   rA   rB   r   r   rE   r"   r"   r    r#   rF      s    rF   )r   os.pathr/   r)   rC   watchdog.eventsr   r   r   r   r   r   r   r	   r
   r   watchdog.observers.apir   r   r   r   watchdog.observers.winapir   r   r   r5   r   rF   r"   r"   r"   r#   <module>   s   0Q