
    i                     v    d dl Z d dlmZ d dlmZ ddlmZ  e       Z G d d      Zdee   fd	Z	dee   fd
Z
y)    N)Optional)Console   )binary_pathsc            
       d    e Zd Zd Zdedee   fdZd
dedededee   fdZddededee   fd	Zy)DeviceSearcherc                 6    t        j                         | _        y )N)r   ensure_binary_directorybase_dir)selfs    \/home/nidran/Documenti/script/streaming-community/StreamingCommunity/setup/device_install.py__init__zDeviceSearcher.__init__   s    $<<>    extreturnc                 J   	 t        j                  | j                        D ]O  }|j                         j	                  |      s#t         j
                  j                  | j                  |      }|c S  y# t        $ r%}t        j                  d| d|        Y d}~yd}~ww xY w)zBCheck for existing files with given extension in binary directory.Nz[red]Error checking existing z files: )
oslistdirr   lowerendswithpathjoin	Exceptionconsoleprint)r   r   filer   es        r   _check_existingzDeviceSearcher._check_existing   s    
	

4==1  ::<((-77<<t<DK 
  	MM9#hqcJK	s$   AA4 -A4 2A4 4	B"=BB"N	start_dirfilenamec                    	 t        j                  |      D ]  \  }}}|D ]x  }|r,||k(  st         j                  j                  ||      }|c c S |s4|j	                         j                  |      sTt         j                  j                  ||      }|c c S   y# t        $ r%}	t        j                  d| d|	        Y d}	~	yd}	~	ww xY w)z
        Find file recursively by extension or exact filename starting from start_dir.
        If filename is provided, search for that filename. Otherwise, search by extension.
        Nz0[red]Error during recursive search for filename : )	r   walkr   r   r   r   r   r   r   )
r   r   r   r    rootdirsfilesr   r   r   s
             r   _find_recursivelyz DeviceSearcher._find_recursively%   s    
	%'WWY%7 
(!dE! 	(D8+#%77<<d#;D#'K::<005#%77<<d#;D#'K	(
(  	MMLXJVXYZX[\]	s4   (B %B B B 4%B B 	C'CCc                    |r	 t         j                  j                  | j                  |      }t         j                  j	                  |      r$t         j                  j                  |      dkD  r|S | j                  |      S | j                  |      }|r|S | j                  |      S # t        $ r%}t        j                  d| d|        Y d}~yd}~ww xY w)z
        Search for file with given extension or exact filename in binary directory or recursively.
        If filename is provided, search for that filename. Otherwise, search by extension.
        r   z&[red]Error checking for existing file r"   N)r    )r   )r   r   r   r   existsgetsizer   r   r   r'   r   )r   r   r    target_pathr   r   s         r   searchzDeviceSearcher.search<   s    
  ggll4==(C77>>+.277??;3ORS3S&& ))8)<< '',D))c)22   FxjPRSTRUVWs   A,B* *	C3CC)N.N)NN)	__name__
__module____qualname__r   strr   r   r'   r,    r   r   r   r      se    ?3 8C= S C QT `hil`m .3# 3 3x} 3r   r   r   c                  X    	 t               } | j                  d      S # t        $ r Y yw xY w)zPCheck for device.wvd file in binary directory and extract from PNG if not found.z.wvdNr   r,   r   searchers    r   check_device_wvd_pathr7   T   0    !#v&&     	))c                  X    	 t               } | j                  d      S # t        $ r Y yw xY w)zRCheck for device.prd file in binary directory and search recursively if not found.z.prdNr4   r5   s    r   check_device_prd_pathr;   \   r8   r9   )r   typingr   rich.consoler   r   r   r   r1   r7   r;   r2   r   r   <module>r>      sK    
  ! ' )>3 >3Bx} x} r   