a
    lOKc¤$  ã                   @   sn   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZejdkrTd dl	Z	nd dl
Z
G dd„ dƒZdS )é    NÚntc                   @   sr   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zddd„Zdd„ Zdd„ Z	dd„ Z
dd„ Zddd„Zdd„ Zdd„ ZdS ) ÚUtilsúPython Scriptc                 C   sZ   || _ t ¡ }t tj tj t¡¡¡ tj d¡rFt	 
tdƒ¡| _ni | _t |¡ d S )Nzcolors.json)ÚnameÚosÚgetcwdÚchdirÚpathÚdirnameÚrealpathÚ__file__ÚexistsÚjsonÚloadÚopenZcolors_dict)Úselfr   Úcwd© r   ú5/Volumes/EFI-PX-HACK/Utils/GenSMBIOS/Scripts/utils.pyÚ__init__   s    zUtils.__init__c                 C   s8   zt  ¡ dk}W n" ty2   tjj ¡ dk}Y n0 |S )Nr   )r   ÚgetuidÚAttributeErrorÚctypesÚwindllÚshell32ZIsUserAnAdmin)r   Zis_adminr   r   r   Úcheck_admin   s
    zUtils.check_adminc                 C   s¨   |   ¡ rd S tjdkr>tjj d dd tj	¡d |¡d d¡ nfzPt
jddgt
jt
jd}| ¡ d  d	d
¡ dd¡}t |tj	dgtj ¡ W n   tdƒ Y n0 d S )Nr   Zrunasz"{}"é   ÚwhichÚsudo)ÚstdoutÚstderrr   zutf-8ÚignoreÚ
Ú Zpython)r   r   r   r   r   r   ZShellExecuteWÚformatÚsysÚ
executableÚ
subprocessÚPopenÚPIPEÚcommunicateÚdecodeÚreplaceÚexecvÚargvÚexit)r   ÚfileÚpÚcr   r   r   Úelevate   s    
(zUtils.elevatec                 K   sî   t | dd¡ƒ}t | dd¡ƒ}| dd¡}t |ƒ}t |ƒ}|rP| ¡ }| ¡ }|  | |¡| |¡¡\}}tt|ƒƒD ]p}	d dd„ ||	 D ƒ¡}
d d	d„ ||	 D ƒ¡}|  |
|¡\}
}t |
ƒt |ƒk rÒ dS t |
ƒt |ƒkrx d
S qxd S )NÚpadr#   Ú	separatorÚ.Úignore_caseTc                 s   s   | ]}|  ¡ r| ¡ V  qd S ©N©ÚisalnumÚlower©Ú.0r2   r   r   r   Ú	<genexpr>H   ó    z)Utils.compare_versions.<locals>.<genexpr>c                 s   s   | ]}|  ¡ r| ¡ V  qd S r8   r9   r<   r   r   r   r>   I   r?   F)ÚstrÚgetr;   Ú
pad_lengthÚsplitÚrangeÚlenÚjoin)r   Zvers1Zvers2Úkwargsr4   Úsepr7   Zv1_partsZv2_partsÚiZv1Zv2r   r   r   Úcompare_versions-   s$    zUtils.compare_versionsÚ0c                    s  t tˆ ƒƒdk rdn
tˆ ƒd ‰ t|ƒt|ƒks8||fS t |ƒt |ƒk rœt|ƒtu r~| ‡ fdd„tt |ƒt |ƒ ƒD ƒ¡ qþd ˆ t |ƒt |ƒ  |¡}nbt |ƒt |ƒk rþt|ƒtu râ| ‡ fdd„tt |ƒt |ƒ ƒD ƒ¡ nd ˆ t |ƒt |ƒ  |¡}||fS )Nr   rK   r   c                    s   g | ]}t ˆ ƒ‘qS r   ©r@   ©r=   Úx©r4   r   r   Ú
<listcomp>\   r?   z$Utils.pad_length.<locals>.<listcomp>z{}{}c                    s   g | ]}t ˆ ƒ‘qS r   rL   rM   rO   r   r   rP   a   r?   )rE   r@   ÚtypeÚlistÚextendrD   r$   )r   Zvar1Zvar2r4   r   rO   r   rB   T   s     **zUtils.pad_lengthc                 C   sè   |}d }|d kr||krd S |}t |ƒs,d S tj |¡rDtj |¡S |d |d krn|d dv rn|dd… }q|d dkr”tj |¡}||kr”|}q|d dv r®|dd … }q|d dv rÈ|d d… }qd dd	„ | d
¡D ƒ¡}qd S )Nr   éÿÿÿÿ)ú"ú'r   ú~)ú ú	ú\c                 S   s   g | ]}|  d d¡‘qS )rZ   r#   )r,   rM   r   r   r   rP   †   r?   z$Utils.check_path.<locals>.<listcomp>z\\)rE   r   r	   r   ÚabspathÚ
expanduserrF   rC   )r   r	   Z	test_pathZ	last_pathZtilde_expandedr   r   r   Ú
check_pathf   s,    zUtils.check_pathc           
      K   s  |  dd¡}|  dd ¡}|dkr>tjdkr2t|ƒS tt|ƒƒS tj |¡ tj ¡  t	j
dkrÀt ¡ }d}t ¡ ržt ¡ }t|ƒdkrŠqìnt|ƒdkrž||7 }t|ƒdkrjt ¡ | |krjqìqjn,t tjgg g |¡\}}}	|rìtj ¡  ¡ }tdƒ t|ƒdkr|S |S d S )	NÚtimeoutr   Údefault)é   r   r   r#   é   é    )rA   r%   Úversion_infoÚinputr@   Ú	raw_inputr   ÚwriteÚflushr   r   ÚtimeÚmsvcrtZkbhitZgetcheÚordrE   ÚselectÚstdinÚreadlineÚstripÚprint)
r   ÚpromptrG   r^   r_   Z
start_timerI   r2   ÚoÚer   r   r   Úgrabˆ   s4    


z
Utils.grabc                 C   s   t  t jdkrdnd¡ d S )Nr   ÚclsÚclear)r   Úsystemr   )r   r   r   r   rt   ¬   s    z	Utils.clsc                 K   st   |  dd¡}tjdkrd}d}| jD ].}|r>| |d d¡}q$| |d |d ¡}q$|r\|S tj |¡ t|ƒ d S )	NÚstrip_colorsFr   Tz[0mÚfindr#   r,   )	rA   r   r   Zcolorsr,   r%   r   rf   ro   )r   ÚmessagerG   rw   Úresetr2   r   r   r   Úcprint¯   s    

zUtils.cprintNé7   c                 C   s¼   |d kr| j }|  ¡  td d| ¡ƒ tt|d t|ƒd  ƒd ƒ}d d| |d|| t|ƒ d  ¡}t|ƒ|d kr¤t|ƒ| }|d7 }|d | … d }t|ƒ td| ƒ d S )	Nz  {}ú#é   z	 #{}{}{}#rX   r   r`   z...#)r   rt   ro   r$   ÚintÚroundrE   )r   ÚtextÚwidthZmid_lenZmiddleZdir   r   r   ÚheadÚ   s     &z
Utils.headc                 C   s   t d ||¡ƒ d S )Nz
[8;{};{}t)ro   r$   )r   r‚   Úheightr   r   r   Úresizeë   s    zUtils.resizec                 C   s¢   |   ¡  tdƒ tdƒ tdƒ tdƒ tdƒ tj ¡  ¡ j}|dkrZ|dk rZtdƒ n<|dkrt|d	k rttd
ƒ n"|d	krŽ|dk rŽtdƒ ntdƒ tdƒ d S )Nzby CorpNewt
z7Thanks for testing it out, for bugs/comments/complaintsz5send me a message on Reddit, or check out my GitHub:
zwww.reddit.com/u/corpnewtzwww.github.com/corpnewt
r`   é   zHave a nice morning!

é   zHave a nice afternoon!

é   zHave a nice evening!

zHave a nice night!

r   )rƒ   ro   ÚdatetimeÚnowrh   Úhourr/   )r   Úhrr   r   r   Úcustom_quitî   s    


zUtils.custom_quit)r   )rK   )Nr|   )Ú__name__Ú
__module__Ú__qualname__r   r   r3   rJ   rB   r]   rs   rt   r{   rƒ   r…   r   r   r   r   r   r   
   s   
'
"$+
r   )r%   r   rh   Úrer   r‰   r   r'   r   ri   rk   r   r   r   r   r   Ú<module>   s   @

