o
    i!	                  	   @   s   d dl Z de jdefddZddededeeef fd	d
ZdedB dedB de jdefddZdedefddZ	dede
e fddZdS )    Nstat_resultreturnc                 C   s   t | dt| jd S )z0Extract mtime in nanoseconds from a stat result.st_mtime_nsi ʚ;)getattrintst_mtime)r    r   </mnt/c/Users/fbmor/ComfyUI/app/assets/services/file_utils.pyget_mtime_ns   s   r
   Tpathfollow_symlinksc                 C   s   t j| |d}|jt|fS )z0Get file size in bytes and mtime in nanoseconds.)r   )osstatst_sizer
   )r   r   str   r   r	   get_size_and_mtime_ns   s   r   mtime_dbsize_dbc                 C   sF   | du rdS t |}t| t|krdS |dur!t|jt|kS dS )a  Check if a file is unchanged based on mtime and size.

    Returns True if the file's mtime and size match the database values.
    Returns False if mtime_db is None or values don't match.

    size_db=None means don't check size; 0 is a valid recorded size.
    NFT)r
   r   r   )r   r   r   actual_mtime_nsr   r   r	   verify_file_unchanged   s   r   namec                 C   s   |  d S )z@Return True if a file or directory name is visible (not hidden)..)
startswith)r   r   r   r	   
is_visible'   s   r   base_dirc           
   
   C   s   g }t j| }t j|s|S t }t j|dddD ]Q\}}}zt |}|j|jf}W n t	y:   |
  Y qw ||v rD|
  q|| dd |D |dd< |D ]}	t|	s]qV|t jt j||	 qVq|S )z>Recursively list all files in a directory, following symlinks.T)topdownfollowlinksc                 S   s   g | ]}t |r|qS r   )r   ).0dr   r   r	   
<listcomp>A   s    z*list_files_recursively.<locals>.<listcomp>N)r   r   abspathisdirsetwalkr   st_devst_inoOSErrorclearaddr   appendjoin)
r   outbase_abs	seen_dirsdirpathsubdirs	filenamesr   dir_idr   r   r   r	   list_files_recursively,   s4   

r2   )T)r   r   r   r
   strbooltupler   r   r   listr2   r   r   r   r	   <module>   s     
