o
    c4                  
   @   s  d dl Zd dlmZ ejjZedjZdZ	dZ
dZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZeZ eZ!eZ"dZ#dZ$dZ%d Z&dZ'dZ(G dd dej)Z*dd Z+dd Z,dd Z-e.dZ/e/j0Z0ejj1e0_2e+e0_3ejj4eejj5ejj1ejj5e6ejj5e6e*efe0_7e/j8Z8ejj4e8_2e,e8_3ejj9ejj5ejj5eejj5ejj5ejj4fe8_7e/j:Z:ejj1e:_2ejj4fe:_7e/j;Z;ejj1e;_2e+e;_3ejj4e6e*fe;_7e/j<Z=ejj4e=_2e,e=_3eejj1ejj1ejj9fe=_7e/j>Z>ejj1e>_2e+e>_3ejj4fe>_7e/j?Z?ejj5e?_2e-e?_3ejj4ejj5ejj1fe?_7e/j@Z@ejj4e@_2e,e@_3ejj4ejj4eejj5fe@_7e/jAZAejj1eA_2e+eA_3ejj4eee6e*ejj5feA_7e/jBZBejj1eB_2e+eB_3ejj4ejj5ejj5e6e*feB_7e/jCZCejj5eC_2e-eC_3ejj4ejjDejj5ejj5feC_7G dd  d ej)ZEe6eEZFeZGed!d" eeegZHed#d" e	e
eeeeeegZId$ZJd%ZKd&d' ZLd(d) ZMd*d+ ZNd,d- ZOd.d/ ZPd0d1 ZQG d2d3 d3ZRd4d5 ZSdS )6    N)reduce                   @      i   i   @      i  i        i  i  c                   @   s@   e Zd ZdefdefdejjfdejjfdefdejjfgZdS )
OVERLAPPEDInternalInternalHighOffset
OffsetHighPointerhEventN)	__name__
__module____qualname__LPVOIDctypeswintypesDWORDHANDLE_fields_ r    r    ]G:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\watchdog\observers\winapi.pyr   \   s    


r   c                 C   s   | st  |S Nr   WinErrorvaluefuncargsr    r    r!   _errcheck_boolf   s   r)   c                 C   s    | st  | tkrt  |S r"   )r   r$   INVALID_HANDLE_VALUEr%   r    r    r!   _errcheck_handlel   s
   r+   c                 C   s   | dkrt  |S )Nl    r#   r%   r    r    r!   _errcheck_dwordt   s   r,   kernel32c                   @   s:   e Zd Zdejjfdejjfdejjfdejd fgZdS )FILE_NOTIFY_INFORMATIONNextEntryOffsetActionFileNameLengthFileNamer   N)r   r   r   r   r   r   c_charr   r    r    r    r!   r.      s    


r.   c                 C      | |B S r"   r    xyr    r    r!   <lambda>       r8   c                 C   r4   r"   r    r5   r    r    r!   r8      r9   i   i   c                 C   s   g }|dkrAt | td }t |tjj }t ||j}|	|j
|df |j}|dkr3	 |S | |d  } ||8 }|dks|S )Nr   zutf-16)r   castLPFNI	addressofr.   r2   offset	string_atr1   appendr0   decoder/   )Z
readBufferZnBytesresultsZfniptrfilenameZ	numToSkipr    r    r!   _parse_event_buffer  s   rD   c                 C   s"   t t}t| |tt |j|kS r"   )r   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr&   )handlepathbuffr    r    r!   _is_observed_path_deleted'  s   

rL   c                  C   sT   t d} tdtt| | jd}t |}t t	}t 
|t || ||fS )N.r   zutf-8)r   rE   r.   FILE_ACTION_DELETED_SELFlenr&   encodesizeofcreate_string_bufferrF   memmover<   )rJ   eventZ
event_sizerK   r    r    r!   %_generate_observed_path_deleted_event0  s   


rU   c                 C   s   	 t | ttd ttd S r"   )CreateFileWFILE_LIST_DIRECTORYWATCHDOG_FILE_SHARE_FLAGSOPEN_EXISTINGWATCHDOG_FILE_FLAGS)rJ   r    r    r!   get_directory_handle:  s   r[   c                 C   sP   zt | d  t|  W d S  ty'   zt|  W Y d S  ty&   Y Y d S w w r"   )
CancelIoExCloseHandleOSError	Exception)rI   r    r    r!   close_directory_handle@  s   
r`   c              
   C   s   	 t t}t j }zt| t |t||tt |d d  W n+ t	yK } z|j
tkr7g dfW  Y d }~S t| |rEt W  Y d }~S |d }~ww |jt|jfS )Nr   )r   rR   BUFFER_SIZEr   r   ReadDirectoryChangesWbyrefrO   WATCHDOG_FILE_NOTIFY_FLAGSr^   winerrorERROR_OPERATION_ABORTEDrL   rU   rawintr&   )rI   rJ   	recursiveevent_buffernbyteser    r    r!   read_directory_changesK  s$   




rm   c                   @   sd   e Zd Zdd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
dd ZdS )WinAPINativeEventc                 C   s   || _ || _d S r"   )actionsrc_path)selfro   rp   r    r    r!   __init__e  s   
zWinAPINativeEvent.__init__c                 C   
   | j tkS r"   )ro   FILE_ACTION_CREATEDrq   r    r    r!   is_addedi     
zWinAPINativeEvent.is_addedc                 C   rs   r"   )ro   FILE_ACTION_REMOVEDru   r    r    r!   
is_removedm  rw   zWinAPINativeEvent.is_removedc                 C   rs   r"   )ro   FILE_ACTION_MODIFIEDru   r    r    r!   is_modifiedq  rw   zWinAPINativeEvent.is_modifiedc                 C   rs   r"   )ro   FILE_ACTION_RENAMED_OLD_NAMEru   r    r    r!   is_renamed_oldu  rw   z WinAPINativeEvent.is_renamed_oldc                 C   rs   r"   )ro   FILE_ACTION_RENAMED_NEW_NAMEru   r    r    r!   is_renamed_newy  rw   z WinAPINativeEvent.is_renamed_newc                 C   rs   r"   )ro   FILE_ACTION_REMOVED_SELFru   r    r    r!   is_removed_self}  rw   z!WinAPINativeEvent.is_removed_selfc                 C   s   dt | j| j| jf S )Nz<%s: action=%d, src_path=%r>)typer   ro   rp   ru   r    r    r!   __repr__  s   zWinAPINativeEvent.__repr__N)r   r   r   rr   propertyrv   ry   r{   r}   r   r   r   r    r    r    r!   rn   d  s    





rn   c                 C   s(   t | ||\}}t||}dd |D S )Nc                 S   s   g | ]	\}}t ||qS r    )rn   ).0ro   rp   r    r    r!   
<listcomp>  s    zread_events.<locals>.<listcomp>)rm   rD   )rI   rJ   ri   bufrk   eventsr    r    r!   read_events  s   
r   )Tctypes.wintypesr   	functoolsr   r   r   c_void_pr&   r*   FILE_NOTIFY_CHANGE_FILE_NAMEFILE_NOTIFY_CHANGE_DIR_NAMEFILE_NOTIFY_CHANGE_ATTRIBUTESFILE_NOTIFY_CHANGE_SIZEFILE_NOTIFY_CHANGE_LAST_WRITEFILE_NOTIFY_CHANGE_LAST_ACCESSFILE_NOTIFY_CHANGE_CREATIONFILE_NOTIFY_CHANGE_SECURITYFILE_FLAG_BACKUP_SEMANTICSFILE_FLAG_OVERLAPPEDrW   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETErY   rH   rt   FILE_ACTION_DELETEDrz   r|   r~   rN   FILE_ACTION_OVERFLOWFILE_ACTION_ADDEDrx   r   THREAD_TERMINATEWAIT_ABANDONEDWAIT_IO_COMPLETIONWAIT_OBJECT_0WAIT_TIMEOUTrf   	Structurer   r)   r+   r,   WinDLLr-   rb   BOOLrestypeerrcheckr   r   POINTERargtypesrV   LPCWSTRr]   r\   ZCreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusrG   LPWSTRr.   r;   rZ   rX   rd   ra   rF   rD   rL   rU   r[   r`   rm   rn   r   r    r    r    r!   <module>   s>  %














	
"