a
    ñ»j$  ã                   @   sf   d dl Z 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	 eƒ Z
dZg ZG dd„ deƒZdS )é    N)ÚLock)ÚEasyProcess)Úxauthiè  c                   @   sz   e Zd ZdZddd„Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚAbstractDisplayz!Common parent for Xvfb and XephyrFc                 C   sˆ   t  ¡  z<|  ¡ | _| jtv r.|  jd7  _qt | j¡ W t  ¡  n
t  ¡  0 |rdt ¡ sdt 	¡ ‚|| _
d | _d | _t | | j¡ d S )Né   )ÚmutexÚacquireÚsearch_for_displayÚdisplayÚUSED_DISPLAY_NR_LISTÚappendÚreleaser   Úis_installedZNotFoundErrorÚ	use_xauthÚ
_old_xauthÚ_xauth_filenamer   Ú__init__Ú_cmd)Úselfr   © r   úFE:\soccer\ml_env\Lib\site-packages\sbvirtualdisplay/abstractdisplay.pyr      s    

zAbstractDisplay.__init__c                 C   s
   d| j  S )Nz:%s)r
   ©r   r   r   r   Únew_display_var    s    zAbstractDisplay.new_display_varc                 C   s
   t ƒ ‚d S )N)ÚNotImplementedErrorr   r   r   r   r   $   s    zAbstractDisplay._cmdc                    s>   d‰ d}t  t ˆ ¡|¡}‡ fdd„|D ƒ}dd„ |D ƒ}|S )Nz/tmpz.X*-lockc                    s   g | ]}t j ˆ |¡‘qS r   )ÚosÚpathÚjoin)Ú.0Úchild©Ztmpdirr   r   Ú
<listcomp>-   ó    z.AbstractDisplay.lock_files.<locals>.<listcomp>c                 S   s   g | ]}t j |¡r|‘qS r   )r   r   Úisfile)r   Úpr   r   r   r    .   r!   )ÚfnmatchÚfilterr   Úlistdir)r   ÚpatternÚnamesÚlsr   r   r   Ú
lock_files(   s    zAbstractDisplay.lock_filesc                 C   s6   dd„ |   ¡ D ƒ}t|ƒr.ttt|ƒd ƒ}nt}|S )Nc                 S   s(   g | ] }t | d ¡d  d¡d ƒ‘qS )ÚXr   ú-r   )ÚintÚsplit)r   Úxr   r   r   r    3   r!   z6AbstractDisplay.search_for_display.<locals>.<listcomp>é   )r*   ÚlenÚmaxÚMIN_DISPLAY_NR)r   r)   r
   r   r   r   r	   1   s
    z"AbstractDisplay.search_for_displayc                 C   s0   |r
| j n| j}|du r"tjd= n
|tjd< dS )z“
        on:
         * True -> set $DISPLAY to virtual screen
         * False -> set $DISPLAY to original screen
        :param on: bool
        NÚDISPLAY)r   Úold_display_varr   Úenviron)r   ÚonÚdr   r   r   Úredirect_display:   s    
z AbstractDisplay.redirect_displayc                 C   s@   | j r|  ¡  t | ¡ tj dd¡| _|  d¡ t	 
d¡ | S )z4
        start display
        :rtype: self
        r4   NTgš™™™™™¹?)r   Ú_setup_xauthr   Ústartr   r6   Úgetr5   r9   ÚtimeÚsleepr   r   r   r   r;   G   s    


zAbstractDisplay.startc                 C   s&   |   d¡ t | ¡ | jr"|  ¡  | S )z3
        stop display
        :rtype: self
        F)r9   r   Ústopr   Ú_clear_xauthr   r   r   r   r?   U   s
    

zAbstractDisplay.stopc                 C   s   |   ¡  | S )ú%Used by the :keyword:`with` statement)r;   r   r   r   r   Ú	__enter__`   s    zAbstractDisplay.__enter__c                 G   s   |   ¡  dS )rA   N)r?   )r   Úexc_infor   r   r   Ú__exit__e   s    zAbstractDisplay.__exit__c                 C   sz   t jddd�\}}|| _t |¡ i | _t d¡| jd< t d¡| jd< | tjd< tjd< t 	¡ }t 
d| jd|¡ dS )	zASet up the Xauthority file & the XAUTHORITY environment variable.zPyVirtualDisplay.z.Xauthority)ÚprefixÚsuffixÚAUTHFILEÚ
XAUTHORITYÚaddÚ.N)ÚtempfileÚmkstempr   r   Úcloser   Úgetenvr6   r   Zgenerate_mcookieÚcallr   )r   ÚhandleÚfilenameÚcookier   r   r   r:   i   s    ÿ

zAbstractDisplay._setup_xauthc                 C   sH   t  | j¡ dD ],}| j| du r,t j|= q| j| t j|< qd| _dS )z@Clear the Xauthority file and restore the environment variables.)rG   rH   N)r   Úremover   r   r6   )r   Úvarnamer   r   r   r@   y   s    
zAbstractDisplay._clear_xauthN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r*   r	   r9   r;   r?   rB   rD   r:   r@   r   r   r   r   r      s   


		r   )r$   r   rK   r=   Ú	threadingr   Zsbvirtualdisplay.easyprocessr   Zsbvirtualdisplayr   r   r3   r   r   r   r   r   r   Ú<module>   s   