B
    u9a9Z                 @   s  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ddddgZG dd deZe	 Z
i Zdadad;d	d
ddZd<ddZd=ddZdd Zdd Zd	d
ddZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZeZG d#d$ d$eZG d%d& d&eZG d'd( d(eZ G d)d* d*eZ!d+d, Z"d-d. Z#ej$dd/ d0krG d1d2 d2eZ%ej$d3krG d4d5 d5eZ&G d6d7 d7eZ'd8d9 Z(e)d:kre(  dS )>    NErroropenopen_newopen_new_tabgetregisterc               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r    /usr/lib/python3.7/webbrowser.pyr      s   F)	preferredc         	   C   sZ   t L td krt  ||gt|  < |s4trB| tkrBtd|  n
t|  W d Q R X d S )Nr   )_lock	_tryorderregister_standard_browsers	_browserslower_os_preferred_browserinsertappend)nameklassinstancer   r   r   r   r      s    c          	   C   s   t d kr&t t d krt  W d Q R X | d k	r6| g}nt }x|D ]}d|kr|t|}|d dkrrt|d d S t|S q@yt|  }W n t	k
r   t
|}Y nX |d d k	r|d S |d d k	r@|d  S q@W tdd S )Nz%s&   r   z!could not locate runnable browser)r   r   r   shlexsplitBackgroundBrowserGenericBrowserr   r   KeyError_synthesizer   )ZusingZalternativesbrowsercommandr   r   r   r   %   s,    


Tc          	   C   sR   t d kr&t t d krt  W d Q R X x&t D ]}t|}|| ||r,dS q,W dS )NTF)r   r   r   r   r   )urlnew	autoraiser   r"   r   r   r   r   G   s    
c             C   s
   t | dS )Nr   )r   )r$   r   r   r   r   R   s    c             C   s
   t | dS )N   )r   )r$   r   r   r   r   U   s    c            C   s   |   d }t|sd d gS tj|}yt|  }W n tk
rR   d d gS X |d }|r| |jkrdd l	}|	|}| |_
tj| |_t| d ||d d |gS d d gS )Nr   r   )r   r   )r   shutilwhichospathbasenamer   r   r    copyr   r   )r"   r   cmdr   r#   Z
controllerr-   r   r   r   r!   Y   s"    


r!   c               @   s6   e Zd ZdgZdddZdddZd	d
 Zdd ZdS )BaseBrowserz%s c             C   s   || _ || _d S )N)r   r,   )selfr   r   r   r   __init__   s    zBaseBrowser.__init__r   Tc             C   s   t d S )N)NotImplementedError)r1   r$   r%   r&   r   r   r   r      s    zBaseBrowser.openc             C   s   |  |dS )Nr   )r   )r1   r$   r   r   r   r      s    zBaseBrowser.open_newc             C   s   |  |dS )Nr'   )r   )r1   r$   r   r   r   r      s    zBaseBrowser.open_new_tabN)r0   )r   T)r   r	   r
   argsr2   r   r   r   r   r   r   r   r/   {   s
   

r/   c               @   s   e Zd Zdd ZdddZdS )	r   c             C   sF   t |tr|| _dg| _n|d | _|dd  | _tj| j| _d S )Nz%sr   r   )
isinstancestrr   r4   r*   r+   r,   )r1   r   r   r   r   r2      s    


zGenericBrowser.__init__r   Tc                sl   | j g fdd| jD  }y6tjd d dkr<t|}ntj|dd}|  S  tk
rf   dS X d S )Nc                s   g | ]}| d  qS )z%s)replace).0arg)r$   r   r   
<listcomp>   s   z'GenericBrowser.open.<locals>.<listcomp>   winT)	close_fdsF)r   r4   sysplatform
subprocessPopenwaitOSError)r1   r$   r%   r&   cmdlinepr   )r$   r   r      s    
zGenericBrowser.openN)r   T)r   r	   r
   r2   r   r   r   r   r   r      s   
r   c               @   s   e Zd ZdddZdS )r   r   Tc                sp   | j g fdd| jD  }y:tjd d dkr<t|}ntj|ddd}| d kS  tk
rj   dS X d S )Nc                s   g | ]}| d  qS )z%s)r7   )r8   r9   )r$   r   r   r:      s   z*BackgroundBrowser.open.<locals>.<listcomp>r;   r<   T)r=   start_new_sessionF)r   r4   r>   r?   r@   rA   pollrC   )r1   r$   r%   r&   rD   rE   r   )r$   r   r      s    zBackgroundBrowser.openN)r   T)r   r	   r
   r   r   r   r   r   r      s   r   c               @   s>   e Zd ZdZdZdZddgZdZdZdZ	dd Z
dd	d
ZdS )UnixBrowserNFTz%actionz%sc       
      C   s   g }|r*| j r*t|}| j | }|r*|g}| jg| | }|sD| jrLtj}nd }tj|d|| jrd|pfd |dd}|ry|d}	|	 S  tj	k
r   dS X n&| jr|
 d krdS dS n
|  S d S )NT)r=   stdinstdoutstderrrF      F)
raise_optsintr   
backgroundr@   DEVNULLrA   redirect_stdoutrB   ZTimeoutExpiredrG   )
r1   r4   Zremoter&   Z	raise_optoptrD   ZinoutrE   rcr   r   r   _invoke   s0    

 



zUnixBrowser._invoker   c                s   |dkr| j  nB|dkr | j n2|dkrB| jd kr:| j qR| j ntdd|   fdd| jD }dd |D }| |d	|}|sfd
d| jD }| |ddS d	S d S )Nr   r   r'   zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %sc                s    g | ]}| d  d qS )z%sz%action)r7   )r8   r9   )actionr$   r   r   r:      s   z$UnixBrowser.open.<locals>.<listcomp>c             S   s   g | ]}|r|qS r   r   )r8   r9   r   r   r   r:      s    Tc                s   g | ]}| d  qS )z%s)r7   )r8   r9   )r$   r   r   r:     s    F)remote_actionremote_action_newwinremote_action_newtabr   remote_argsrT   r4   )r1   r$   r%   r&   r4   successr   )rU   r$   r   r      s$    

zUnixBrowser.open)r   T)r   r	   r
   rM   rO   rQ   rY   rV   rW   rX   rT   r   r   r   r   r   rH      s   #rH   c               @   s$   e Zd ZddgZdZdZdZdZdS )Mozillaz%actionz%sr0   z-new-windowz-new-tabTN)r   r	   r
   rY   rV   rW   rX   rO   r   r   r   r   r[   	  s
   r[   c               @   s,   e Zd ZddgZddgZdZdZdZdZd	S )
Netscapez-noraisez-raisez-remotezopenURL(%s%action)r0   z,new-windowz,new-tabTN)	r   r	   r
   rM   rY   rV   rW   rX   rO   r   r   r   r   r\     s   r\   c               @   s(   e Zd ZddgZddgZdZdZdZdS )	Galeonz-noraiser0   z%actionz%sz-nz-wTN)r   r	   r
   rM   rY   rV   rW   rO   r   r   r   r   r]     s
   r]   c               @   s$   e Zd ZddgZdZdZdZdZdS )Chromez%actionz%sr0   z--new-windowTN)r   r	   r
   rY   rV   rW   rX   rO   r   r   r   r   r^   (  s
   r^   c               @   s$   e Zd ZddgZdZdZdZdZdS )Operaz%actionz%sr0   z--new-windowTN)r   r	   r
   rY   rV   rW   rX   rO   r   r   r   r   r_   4  s
   r_   c               @   s(   e Zd ZddgZdZdZdZdZdZdS )Elinksz-remotezopenURL(%s%action)r0   z,new-windowz,new-tabFN)	r   r	   r
   rY   rV   rW   rX   rO   rQ   r   r   r   r   r`   >  s   r`   c               @   s   e Zd ZdddZdS )	Konquerorr   Tc             C   s   |dkrd}nd}t j}yt jd||gd|||d}W n tk
rJ   Y nX |  dS y t jdd|gd|||dd	}W n tk
r   Y nX | d krdS y t jd
d|gd|||dd	}W n tk
r   dS X | d kS d S )Nr'   ZnewTabZopenURL	kfmclientT)r=   rI   rJ   rK   	konquerorz--silent)r=   rI   rJ   rK   rF   kfmz-dF)r@   rP   rA   rC   rB   rG   )r1   r$   r%   r&   rU   devnullrE   r   r   r   r   S  s:    zKonqueror.openN)r   T)r   r	   r
   r   r   r   r   r   ra   L  s   ra   c               @   s&   e Zd Zdd Zdd Zd
ddZd	S )Grailc             C   s   dd l }dd l}dd l}dd l}tj| d}|t	 d }tj||d }| |}|shd S ||j
|j}	xX|D ]P}
y|	|
 W n8 tk
r   yt|
 W n tk
r   Y nX Y q~X |	S q~W d S )Nr   z.grail-unixz-*)globpwdsockettempfiler*   r+   joinZ
gettempdirgetpwuidgetuidZAF_UNIXZSOCK_STREAMZconnectrC   unlink)r1   rg   rh   ri   rj   ZtempdiruserfilenameZmaybessfnr   r   r   _find_grail_rc  s*    

zGrail._find_grail_rcc             C   s&   |   }|sdS || |  dS )Nr   r   )rs   sendclose)r1   rU   rq   r   r   r   _remote  s    
zGrail._remoter   Tc             C   s&   |r|  d| }n|  d| }|S )NzLOADNEW zLOAD )rv   )r1   r$   r%   r&   okr   r   r   r     s    z
Grail.openN)r   T)r   r	   r
   rs   rv   r   r   r   r   r   rf     s   rf   c              C   s  t drtdd td dtjkr>t dr>tdd td dtjkrbt drbtdd td dtjkrt drtdttd t drtdd td x&dD ]} t | rt| d t|  qW x&d	D ]} t | rt| d t|  qW t d
rtd
ttd
 nt dr*tdttd x*dD ]"} t | r0t| d t	|  q0W t drrtdd td x*dD ]"} t | rxt| d t
|  qxW t drtdd td t drtdd td t drtdtd  d S )Nzxdg-openZGNOME_DESKTOP_SESSION_IDz	gvfs-openz
gnome-openZKDE_FULL_SESSIONrb   zx-www-browser)firefoxZ	iceweaselZiceape	seamonkey)zmozilla-firefoxzmozilla-firebirdfirebirdmozillanetscaperd   rc   )ZgaleonZepiphanyZ	skipstone)zgoogle-chromechromeZchromiumzchromium-browseroperaZmosaicZgrail)r(   r)   r   r   r*   environra   r[   r\   r]   r^   r_   rf   )r"   r   r   r   register_X_browsers  sD    







r   c           	   C   s$  g a tjdkrNtdd td tdd td tdd td tdd td tjd d dkrtd	t tjtj	
d
dd} x4dddddd| fD ]}t|rt|d t| qW ntj	
dry(d }tj|tjd}|  }W n ttjfk
r   Y nX |at  tj	
drtdrBtdd td tdr^tdd td tdrztdd td tdrtdd td tdrtdd td dtj	kr tj	d tj}|  xF|D ]>}|dkrt|dd}|d d krt|d t|dd qW d S ) NdarwinMacOSXdefaultr}   rx   Zsafarir;   r<   zwindows-defaultZPROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXErz   ry   r{   r|   r~   ZDISPLAYz$xdg-settings get default-web-browser)rK   ZTERMzwww-browserZlinksZelinksZlynxZw3mZBROWSERr0   T)r   r   )r   r>   r?   r   MacOSXOSAScriptWindowsDefaultr*   r+   rk   r   r   r(   r)   r   r   r@   Zcheck_outputrP   decodestripFileNotFoundErrorZCalledProcessErrorr   r   r   r`   pathsepreverser!   )Ziexplorer"   r.   Z
raw_resultresultZuserchoicesrD   r   r   r   r     sT    





r   r;   r<   c               @   s   e Zd ZdddZdS )r   r   Tc             C   s,   yt | W n tk
r"   dS X dS d S )NFT)r*   Z	startfilerC   )r1   r$   r%   r&   r   r   r   r   C  s
    zWindowsDefault.openN)r   T)r   r	   r
   r   r   r   r   r   r   B  s   r   r   c               @   s   e Zd Zdd ZdddZdS )	r   c             C   s
   || _ d S )N)r   )r1   r   r   r   r   r2   ]  s    zMacOSX.__init__r   Tc       	      C   s   d|krd| }t t|}| jdkr8d|dd }n<| jdkrHd}nd	|d
  }d|dd }d| j||f }tdd}|d krdS || | }| S )N:zfile:r   zopen location "%s""z%22ZOmniWebr0   ztoWindow %dr   zOpenURL "%s"ztell application "%s"
                                activate
                                %s %s
                            end tell	osascriptwF)rN   boolr   r7   r*   popenwriteru   )	r1   r$   r%   r&   scriptZtoWindowr.   osapiperS   r   r   r   r   `  s     


zMacOSX.openN)r   T)r   r	   r
   r2   r   r   r   r   r   r   S  s   
r   c               @   s   e Zd Zdd ZdddZdS )	r   c             C   s
   || _ d S )N)_name)r1   r   r   r   r   r2     s    zMacOSXOSAScript.__init__r   Tc             C   sb   | j dkrd|dd }nd| j |ddf }tdd}|d krJdS || | }| S )	Nr   zopen location "%s"r   z%22z
                   tell application "%s"
                       activate
                       open location "%s"
                   end
                   r   r   F)r   r7   r*   r   r   ru   )r1   r$   r%   r&   r   r   rS   r   r   r   r     s    

zMacOSXOSAScript.openN)r   T)r   r	   r
   r2   r   r   r   r   r   r     s   r   c        	   
   C   s   dd l } dtjd  }y|  tjdd  d\}}W nJ | jk
r~ } z*t|tjd t|tjd td W d d }~X Y nX d}x*|D ]"\}}|dkrd}q|dkrd}qW t|dkrt|tjd td |d }t|| td	 d S )
Nr   zDUsage: %s [-n | -t] url
    -n: open new window
    -t: open new tabr   Zntd)filez-nz-tr'   )	getoptr>   argverrorprintrK   exitlenr   )	r   usageZoptsr4   msgZnew_winoar$   r   r   r   main  s(      

r   __main__)N)N)r   T)*r*   r   r(   r>   r@   Z	threading__all__	Exceptionr   RLockr   r   r   r   r   r   r   r   r   r!   objectr/   r   r   rH   r[   r\   r]   r^   ZChromiumr_   r`   ra   rf   r   r   r?   r   r   r   r   r   r   r   r   r   <module>   sP   
"
"N

	
45AK.
