
    in                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 ddlmZ  e       Z e       Z G d d	      Z G d
 d      Z e       Z e       Zy)    N)	unidecode)Console)Prompt)sanitize_filenamesanitize_filepath   )binary_pathsc                   j    e Zd Zd ZdefdZddededefdZdedefd	Zdded
ede	fdZ
dede	fdZy)	OsManagerc                 `    t        j                         | _        | j                         | _        y N)r	   _detect_systemsystem_get_max_length
max_lengthselfs    P/home/nidran/Documenti/script/streaming-community/StreamingCommunity/utils/os.py__init__zOsManager.__init__   s"    "113..0    returnc                 (    | j                   dk(  rdS dS )z$Get max filename length based on OS.windows   i   )r   r   s    r   r   zOsManager._get_max_length   s    kkY.s8D8r   Nfilenameyearc                    |s|S d}|rOt        |      j                  d      d   j                         }|j                         rt	        |      dk(  rd| d}t        |      }t        |      }t        j                  j                  |      \  }}||z   }	| j                  t	        d      z
  t	        |      z
  }
t	        |	      |
kD  r|	d|
 dz   }	|	|z   S )	z^Sanitize filename. Optionally append a year in format ' (YYYY)' if year is provided and valid. -r      z ()z...N)strsplitstripisdigitlenr   r   ospathsplitextr   )r   r   r   year_strydecoded	sanitizednameextname_with_yearmax_name_lengths              r   get_sanitize_filezOsManager.get_sanitize_file!   s    O D	$Q'--/Ayy{s1v{s!9 H%%g.	 GG$$Y/	c  //CJ6SA ~0+,<_=EN ##r   r(   c                    |s|S t        |      }t        |      }| j                  dk(  rf|j                  d      s|j                  d      rx|j	                  dd      j                  d      }|dd }t        |      dkD  r3|j                  |dd D cg c]  }|r| j                  |       c}       dj                  |      S t        |      dk\  r|d	   d
k(  r}|dd }|dd j                  d      j                  d      }|g|j	                  dd      j                  d      D cg c]  }|r| j                  |       c}z   }	dj                  |	      S |j	                  dd      j                  d      }dj                  d |D              S |j                  d      }
|j	                  dd      j                  d      }|D cg c]  }|r| j                  |       }}dj                  |      }|
rd|z   }|S c c}w c c}w c c}w )zSanitize complete path.r   z\\z///\Nr    r      :c              3   &   K   | ]	  }|s|  y wr    ).0ps     r   	<genexpr>z.OsManager.get_sanitize_path.<locals>.<genexpr>g   s      7qQ 7s   )r   r   r   
startswithreplacer#   r&   extendr2   joinlstrip)r   r(   r,   r-   partssanitized_partspartdriverest
path_partsis_absoluteresults               r   get_sanitize_pathzOsManager.get_sanitize_pathA   s!   K D/%g.	;;)###F+y/C/CD/I!))#t4::4@"') u:>#**$)!"I,  ..t4, 
 yy11 Y1$1)<!"1 }++D188=#W $S$ 7 = =d C( **40( 

 yy,, "))#t4::4@yy 7E 777 $..s3K%%dC066s;E " &&t,O  XXo.FvMK,( s   G=(HHmodec                     	 t        |      }| j                  |      }t        j                  ||d       y# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)a  
        Create directory path with specified permissions.

        Args:
            path (str): Path to create.
            mode (int, optional): Directory permissions. Defaults to 0o755.

        Returns:
            bool: True if path created successfully, False otherwise.
        T)rK   exist_okzPath creation error: NF)r"   rJ   r'   makedirs	Exceptionloggingerror)r   r(   rK   sanitized_pathes        r   create_pathzOsManager.create_pathy   sZ    	t9D!33D9NKKTDA 	MM1!56	s   47 	A" AA"folder_pathc                     	 t        j                  |       y# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)z
        Safely remove a folder.

        Args:
            folder_path (str): Path of directory to remove.

        Returns:
            bool: Removal status.
        TzFolder removal error: NF)shutilrmtreeOSErrorrP   rQ   )r   rU   rS   s      r   remove_folderzOsManager.remove_folder   s=    	MM+& 	MM21#67	s    	A>Ar   )i  )__name__
__module____qualname__r   intr   r"   r2   rJ   boolrT   rZ   r9   r   r   r   r      so    19 9$# $S $C $@6c 6c 6p 3 4 *  r   r   c                   >    e Zd ZdefdZdedefdZd	dededefdZy)
InternetManagerr   c                    t        |t              r	 t        |      j                         j                         }d|v r-t	        t        |j                  dd            dz  dz  dz        S d|v r*t	        t        |j                  dd            dz  dz        S d|v r't	        t        |j                  dd            dz        S d|v r$t	        t        |j                  dd                  S yt        |t
              st        |t              rN|dk  ry	g d
}d}|dk\  r2|t        |      dz
  k  r!|dz  }|dz  }|dk\  r|t        |      dz
  k  r!|dd||    S y# t        $ r Y yw xY w)zKFormats a file size from bytes into a human-readable string representation.GBr      MBKBBNr   0B)rg   rf   re   rc   TBr6   .2f )	
isinstancer"   upperr$   r^   floatr>   rO   r&   )r   
size_bytessize_strunits
unit_indexs        r   format_file_sizez InternetManager.format_file_size   s   j#&z?00288:8#uX%5%5dB%?@4G$NQUUVVX%uX%5%5dB%?@4G$NOOX%uX%5%5dB%?@4GHHH_uX%5%5c2%>?@@ 
E*jS.IQ1EJ$c%j1n)Dd"
a
 $c%j1n)D !%QuZ'8&9:: /J  s$   AE *-E *E 'E 	E'&E'bytesc                     t        |t              r"|dk  r|ddS |dk  r	|dz  ddS |dz  ddS t        |t              r/|dk\  r	|dz  ddS |dk\  r	|dz  dd	S |dk\  r	|dz  dd
S | dS y)z[Formats a transfer speed from bytes per second into a human-readable string representation.rd   rj   z Bytes/si   z KB/sz MB/si   @z GBz MBz KBz BN)rl   rn   r^   )r   rt   s     r   format_transfer_speedz%InternetManager.format_transfer_speed   s    eU#t|H--$$,s+511;/4E::s#**05S99+%+C044$*S)--|# $r   seconds	add_hoursc                     |dk  s|t        d      k(  ryt        |dz        }t        |dz        }|r)t        |dz        }t        |dz        }|dd|dd|dS |dd|dS )z#Format seconds to MM:SS or HH:MM:SSr   infz00:00<   02dr7   )rn   r^   )r   rw   rx   minutessecshourss         r   format_timezInternetManager.format_time   s    Q;'U5\1gm$7R< 2&E'B,'GC['#aSz::c]!D:..r   N)F)	r[   r\   r]   r"   rs   rn   rv   r_   r   r9   r   r   ra   ra      s;    ;c ;8$5 $S $(/5 /T /c /r   ra   )r'   rW   rP   r   rich.consoler   rich.promptr   pathvalidater   r   setup.binary_pathsr	   msgconsoler   ra   
os_managerinternet_managerr9   r   r   <module>r      s]    
        = . h
)F FR=/ =/B [
"$ r   