o
    c-                     @   sL   	 d dl Z d dlZd dlmZ G dd dZG dd dZG dd dZdS )	    N)S_ISDIRc                   @   s   e Zd Z	 dddZd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edd Zedd ZdS )DirectorySnapshotDiffFc                    s,  j  j  } j j  }|rdd }ndd } j j @ D ]}| |||kr3|| || qt }t|D ]} |}	|	}
|
rU|| |||
f q;t|D ]}|}	 |	}|rt|| |||f qZt } j j @ D ]%}| |||kr ||ks ||kr|| q~|D ]\}}
 ||
ks ||
kr|| qfdd|D | _ fdd|D | _	 fdd|D | _
 fdd|D | _t|t| j | _t|t| j	 | _t|t| j
 | _t|t| j | _d S )	Nc                 S   s   |  |d S )Nr   inode	directory	full_path r	   ^G:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\watchdog\utils\dirsnapshot.py	get_inodeW   s   z1DirectorySnapshotDiff.__init__.<locals>.get_inodec                 S   s
   |  |S Nr   r   r	   r	   r
   r   Z      
c                       g | ]	}  |r|qS r	   isdir.0path)snapshotr	   r
   
<listcomp>       z2DirectorySnapshotDiff.__init__.<locals>.<listcomp>c                    r   r	   r   r   refr	   r
   r      r   c                    r   r	   r   r   r   r	   r
   r      r   c                    s"   g | ]\}}  |r||fqS r	   r   )r   frmtor   r	   r
   r      s   " )pathsaddsetr   r   removemtimesize_dirs_created_dirs_deleted_dirs_modified_dirs_movedlist_files_created_files_deleted_files_modified_files_moved)selfr   r   Zignore_devicecreateddeletedr   r   movedr   new_pathold_pathmodifiedr	   )r   r   r
   __init__R   sV   








(
(
zDirectorySnapshotDiff.__init__c                 C      |   S r   __repr__r*   r	   r	   r
   __str__      zDirectorySnapshotDiff.__str__c                 C   sT   d}| t| jt| jt| jt| jt| jt| jt| j	t| j
t| j	S )Nzz<{0} files(created={1}, deleted={2}, modified={3}, moved={4}), folders(created={5}, deleted={6}, modified={7}, moved={8})>)formattype__name__lenr&   r'   r(   r)   r!   r"   r#   r$   )r*   fmtr	   r	   r
   r4      s   zDirectorySnapshotDiff.__repr__c                 C      	 | j S r   )r&   r5   r	   r	   r
   files_created      z#DirectorySnapshotDiff.files_createdc                 C   r=   r   )r'   r5   r	   r	   r
   files_deleted   r?   z#DirectorySnapshotDiff.files_deletedc                 C   r=   r   )r(   r5   r	   r	   r
   files_modified   r?   z$DirectorySnapshotDiff.files_modifiedc                 C   r=   r   )r)   r5   r	   r	   r
   files_moved      z!DirectorySnapshotDiff.files_movedc                 C   r=   r   )r#   r5   r	   r	   r
   dirs_modified      z#DirectorySnapshotDiff.dirs_modifiedc                 C   r=   r   )r$   r5   r	   r	   r
   
dirs_moved   rC   z DirectorySnapshotDiff.dirs_movedc                 C   r=   r   )r"   r5   r	   r	   r
   dirs_deleted   rE   z"DirectorySnapshotDiff.dirs_deletedc                 C   r=   r   )r!   r5   r	   r	   r
   dirs_created   rE   z"DirectorySnapshotDiff.dirs_createdN)F)r:   
__module____qualname__r1   r6   r4   propertyr>   r@   rA   rB   rD   rF   rG   rH   r	   r	   r	   r
   r   8   s*    
8



	

	
r   c                   @   s~   e Zd Z	 dejejfddZdd Zedd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )DirectorySnapshotTc                 C   s|   || _ || _|| _i | _i | _| |}|| j|< || j|j|jf< | |D ]\}}|j|jf}|| j|< || j|< q'd S r   )	recursivestatlistdir
_stat_info_inode_to_pathst_inost_devwalk)r*   r   rM   rN   rO   stpir	   r	   r
   r1      s   


zDirectorySnapshot.__init__c           	   
   #   s    z fdd|   D }W n ty. } z|jtjtjtjfv r)W Y d }~d S  d }~ww g }|D ]}z|| |f}|| |V  W q3 tyO   Y q3w | jru|D ]!\}}zt	|j
rj| |D ]}|V  qdW qU tyt   Y qUw d S d S )Nc                    s   g | ]
}t j |jqS r	   )osr   joinname)r   entryrootr	   r
   r     s    z*DirectorySnapshot.walk.<locals>.<listcomp>)rO   OSErrorerrnoENOENTENOTDIREINVALrN   appendrM   r   st_moderT   PermissionError)	r*   r]   r   eentriesrV   r[   r   rU   r	   r\   r
   rT      s<   



zDirectorySnapshot.walkc                 C   s   	 t | j S r   )r   rP   keysr5   r	   r	   r
   r     s   zDirectorySnapshot.pathsc                 C   s   	 | j |S r   )rQ   get)r*   idr	   r	   r
   r   &  s   zDirectorySnapshot.pathc                 C   s   	 | j | }|j|jfS r   )rP   rR   rS   )r*   r   rU   r	   r	   r
   r   ,  s   
zDirectorySnapshot.inodec                 C   s   t | j| jS r   )r   rP   rd   r*   r   r	   r	   r
   r   1  s   zDirectorySnapshot.isdirc                 C      | j | jS r   )rP   st_mtimerk   r	   r	   r
   r   4     zDirectorySnapshot.mtimec                 C   rl   r   )rP   st_sizerk   r	   r	   r
   r    7  rn   zDirectorySnapshot.sizec                 C   s   	 | j | S r   )rP   rk   r	   r	   r
   	stat_info:  s   
zDirectorySnapshot.stat_infoc                 C   s   	 t || S r   )r   )r*   Zprevious_dirsnapr	   r	   r
   __sub__I  s   
zDirectorySnapshot.__sub__c                 C   r2   r   r3   r5   r	   r	   r
   r6   R  r7   zDirectorySnapshot.__str__c                 C   s
   t | jS r   )strrP   r5   r	   r	   r
   r4   U  r   zDirectorySnapshot.__repr__N)r:   rI   rJ   rX   rN   scandirr1   rT   rK   r   r   r   r   r   r    rp   rq   r6   r4   r	   r	   r	   r
   rL      s"    

	rL   c                   @   s&   e Zd Z	 edd Zedd ZdS )EmptyDirectorySnapshotc                 C   s   	 d S r   r	   )_r	   r	   r
   r   _  s   zEmptyDirectorySnapshot.pathc                 C   s   	 t  S r   )r   r5   r	   r	   r
   r   i  rC   zEmptyDirectorySnapshot.pathsN)r:   rI   rJ   staticmethodr   rK   r   r	   r	   r	   r
   rt   Y  s    
	rt   )r_   rX   rN   r   r   rL   rt   r	   r	   r	   r
   <module>   s       