
    +j              	           d dl Z de j        defdZddededeeef         fdZd	edz  d
edz  de j        defdZdedefdZ	dede
e         fdZdS )    Nstat_resultreturnc                 N    t          | dt          | j        dz                      S )z0Extract mtime in nanoseconds from a stat result.st_mtime_nsi ʚ;)getattrintst_mtime)r   s    >/home/wildlama/comfy/ComfyUI/app/assets/services/file_utils.pyget_mtime_nsr      s+    ]C(<}(L$M$M      Tpathfollow_symlinksc                 Z    t          j        | |          }|j        t          |          fS )z0Get file size in bytes and mtime in nanoseconds.)r   )osstatst_sizer   )r   r   sts      r
   get_size_and_mtime_nsr      s+    		7	7	7B:|B''''r   mtime_dbsize_dbc                     | dS t          |          }t          |           t          |          k    rdS |%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_nss       r
   verify_file_unchangedr      sa     u";//O
8}}O,,,,u;&''3w<<774r   namec                 .    |                      d           S )z@Return True if a file or directory name is visible (not hidden)..)
startswith)r   s    r
   
is_visibler   '   s    s####r   base_dirc           
         g }t           j                            |           }t           j                            |          s|S t	                      }t          j        |dd          D ]\  }}}	 t          j        |          }|j        |j        f}n$# t          $ r |
                                 Y Jw xY w||v r|
                                 g|                    |           d |D             |dd<   |D ]b}	t          |	          s|                    t           j                            t           j                            ||	                               c|S )z>Recursively list all files in a directory, following symlinks.T)topdownfollowlinksc                 0    g | ]}t          |          |S  )r   ).0ds     r
   
<listcomp>z*list_files_recursively.<locals>.<listcomp>A   s#    :::AJqMM:a:::r   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   s
             r
   list_files_recursivelyr:   ,   sm   Cwx((H7=="" 
&)eeI')w$D( ( ( E E#)	!!Bi+FF 	 	 	MMOOOH	 YMMOOOf:::::
 	E 	EDd## JJrwrw||GT'B'BCCDDDD	E Js   /"BB32B3)T)r   r   r   r   strbooltupler   r   r   listr:   r$   r   r
   <module>r?      s    				bn     ( ( (d (eCQTHo ( ( ( (Dj4Z  
	   ,$S $T $ $ $ $
S T#Y      r   