o
     JAf^                     @   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g d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d0 d1krG d2d3 d3eZ%ej$d4krG d5d6 d6eZ&G d7d8 d8eZ'd9d: Z(e)d;kre(  dS 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.10/webbrowser.pyr      s    r   F	preferredc                C   s   	 t 4 td u rt  ||gt|  < |str"| tv r"td|  nt|  W d    d S W d    d S 1 s:w   Y  d S )Nr   )_lock	_tryorderregister_standard_browsers	_browserslower_os_preferred_browserinsertappend)nameklassinstancer   r   r   r   r      s   	"r   c              	   C   s   	 t d u rt t d u rt  W d    n1 sw   Y  | d ur&| g}nt }|D ]P}d|v rKt|}|d dkrEt|d d   S t|  S zt|  }W n t	y`   t
|}Y nw |d d urm|d   S |d d urz|d    S q*td)N%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   %   s6   
r   Tc                 C   sf   	 t d u rt t d u rt  W d    n1 sw   Y  t D ]}t|}|| ||r0 dS q dS )NTF)r   r   r   r   r   )urlnew	autoraiser   r$   r   r   r   r   G   s   r   c                 C      	 t | dS Nr   r   r&   r   r   r   r   Z      
r   c                 C   r)   N   r+   r,   r   r   r   r   a   r-   r   c                C   s   	 |   d }t|sd d gS tj|}zt|  }W n ty+   d d g Y S w |d }|rX| |jkrXd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
controllerr5   r   r   r   r#   i   s&   

r#   c                   @   s8   e Zd Z	 dgZdddZdddZd	d
 Zdd ZdS )BaseBrowserr    c                 C   s   || _ || _d S N)r   r4   selfr   r   r   r   __init__   s   
zBaseBrowser.__init__r   Tc                 C   s   t r9   )NotImplementedErrorr;   r&   r'   r(   r   r   r   r      s   zBaseBrowser.openc                 C      |  |dS r*   r+   r;   r&   r   r   r   r         zBaseBrowser.open_newc                 C   r?   r.   r+   r@   r   r   r   r      rA   zBaseBrowser.open_new_tabN)r8   r   T)r   r	   r
   argsr<   r   r   r   r   r   r   r   r7      s    

r7   c                   @       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 )Nr   r   r   )
isinstancestrr   rC   r2   r3   r4   r:   r   r   r   r<      s   


zGenericBrowser.__init__r   Tc                    sv   t d  | jg fdd| jD  }zt jd d dkr$t|}ntj|dd}|  W S  ty:   Y dS w )	Nwebbrowser.openc                       g | ]}| d  qS r   replace.0argr,   r   r   
<listcomp>       z'GenericBrowser.open.<locals>.<listcomp>   winT)	close_fdsF)	sysauditr   rC   platform
subprocessPopenwaitOSErrorr;   r&   r'   r(   cmdlinepr   r,   r   r      s   zGenericBrowser.openNrB   r   r	   r
   r<   r   r   r   r   r   r!      s    
r!   c                   @      e Zd Z	 dddZdS )r    r   Tc                    sz   | j g fdd| jD  }td  ztjd d dkr$t|}ntj|ddd}| d u W S  ty<   Y dS w )	Nc                    rH   rI   rJ   rL   r,   r   r   rO      rP   z*BackgroundBrowser.open.<locals>.<listcomp>rG   rQ   rR   T)rS   start_new_sessionF)	r   rC   rT   rU   rV   rW   rX   pollrZ   r[   r   r,   r   r      s   zBackgroundBrowser.openNrB   r   r	   r
   r   r   r   r   r   r       s    r    c                   @   sB   e Zd Z	 dZdZdZddgZdZdZdZ	dddZ
dd	d
ZdS )UnixBrowserNFT%actionr   c                 C   s   g }|r| j rt|}| j | }|r|g}| jg| | }|s"| jr&tj}nd }tj|d|| jr2|p3d |dd}	|rOz	|	d}
|
 W S  tj	yN   Y dS w | jr\|	
 d u rZdS dS |	  S )NTrS   stdinstdoutstderrr`      F)
raise_optsintr   
backgroundrW   DEVNULLrX   redirect_stdoutrY   TimeoutExpiredra   )r;   rC   Zremoter(   r&   Z	raise_optoptr\   Zinoutr]   rcr   r   r   _invoke   s2   






zUnixBrowser._invoker   c                    s   t d |dkr| j n!|dkr| j n|dkr'| jd u r#| j n| 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 )NrG   r   r   r/   zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %sc                    s    g | ]}| d  d qS )r   rd   rJ   rL   actionr&   r   r   rO     s    z$UnixBrowser.open.<locals>.<listcomp>c                 S   s   g | ]}|r|qS r   r   rL   r   r   r   rO     s    Tc                    rH   rI   rJ   rL   r,   r   r   rO     s    F)	rT   rU   remote_actionremote_action_newwinremote_action_newtabr   remote_argsrr   rC   )r;   r&   r'   r(   rC   successr   rs   r   r     s*   
zUnixBrowser.openr9   rB   )r   r	   r
   rj   rl   rn   rx   ru   rv   rw   rr   r   r   r   r   r   rc      s    
#rc   c                   @   s&   e Zd Z	 ddgZdZdZdZdZdS )Mozillard   r   r8   z-new-windowz-new-tabTNr   r	   r
   rx   ru   rv   rw   rl   r   r   r   r   rz         rz   c                   @   s.   e Zd Z	 ddgZddgZdZdZdZdZd	S )
Netscape-noraisez-raise-remoteopenURL(%s%action)r8   ,new-window,new-tabTN)	r   r	   r
   rj   rx   ru   rv   rw   rl   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 )	Galeonr~   r8   rd   r   -nz-wTN)r   r	   r
   rj   rx   ru   rv   rl   r   r   r   r   r   1  s    r   c                   @   &   e Zd Z	 ddgZdZdZdZdZdS )Chromerd   r   r8   --new-windowTNr{   r   r   r   r   r   ;  r|   r   c                   @   r   )Operard   r   r8   r   TNr{   r   r   r   r   r   G  r|   r   c                   @   s*   e Zd Z	 ddgZdZdZdZdZdZdS )Elinksr   r   r8   r   r   FN)	r   r	   r
   rx   ru   rv   rw   rl   rn   r   r   r   r   r   Q  s    r   c                   @   r_   )	Konquerorr   Tc                 C   s   t d| |dkrd}nd}tj}ztjd||gd|||d}W n	 ty*   Y nw |  dS ztjdd	|gd|||dd
}W n	 tyJ   Y n	w | d u rSdS ztjdd|gd|||dd
}W n
 tym   Y dS w | d u S )NrG   r/   ZnewTabZopenURL	kfmclientT)rS   rf   rg   rh   	konquerorz--silentre   kfmz-dF)rT   rU   rW   rm   rX   rZ   rY   ra   )r;   r&   r'   r(   rt   devnullr]   r   r   r   r   f  sH   


zKonqueror.openNrB   rb   r   r   r   r   r   _  s    r   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 }| |}|s:d S ||j|j}	|D ]&}
z
|	|
 W |	  S  tyj   zt|
 W n	 tyg   Y nw Y qDw d S )Nr   z.grail-unixz-*)globpwdsockettempfiler2   r3   join
gettempdirgetpwuidgetuidescapeAF_UNIXSOCK_STREAMconnectrZ   unlink)r;   r   r   r   r   tempdiruserfilenameZmaybessfnr   r   r   _find_grail_rc  s4   
zGrail._find_grail_rcc                 C   s&   |   }|sdS || |  dS )Nr   r   )r   sendclose)r;   rt   r   r   r   r   _remote  s   
zGrail._remoter   Tc                 C   s4   t d| |r| d| }|S | d| }|S )NrG   zLOADNEW zLOAD )rT   rU   r   )r;   r&   r'   r(   okr   r   r   r     s   z
Grail.openNrB   )r   r	   r
   r   r   r   r   r   r   r   r     s    r   c                  C   s  t drtdd td dtjv rt drtdd td dtjv r1t dr1tdd td dtjv rCt drCtdttd t drPtdd td dD ]} t | rat| d t|  qRd	D ]} t | rst| d t|  qdt d
rtd
ttd
 nt drtdttd dD ]} t | rt| d t	|  qt drtdd td dD ]} t | rt| d t
|  qt drtdd td t drtdd td t drtdtd  d S d S )Nzxdg-openZGNOME_DESKTOP_SESSION_IDz	gvfs-openz
gnome-openZKDE_FULL_SESSIONr   zx-www-browser)firefoxZ	iceweaselZiceape	seamonkey)zmozilla-firefoxzmozilla-firebirdfirebirdmozillanetscaper   r   )ZgaleonZepiphanyZ	skipstone)zgoogle-chromechromeZchromiumzchromium-browseroperaZmosaicZgrail)r0   r1   r   r    r2   environr   rz   r}   r   r   r   r   )r$   r   r   r   register_X_browsers  sN   











r   c                  C   s6  g a tjdkr'tdd td tdd td tdd td tdd td tjdkr4tdd td tjd d	 d
krhtdt tj	tj
ddd} dddddd| fD ]}t|rft|d t| qWn{tj
dsttj
drzd }tj|tjd}|  }W n ttjttfy   Y nw |at  tj
drtdrtdd td tdrtdd td tdrtdd td tdrtdd td tdrtdd td dtj
v rtj
d tj}|  |D ] }|dkrt|d d!}|d" d u rt|d t|d d! qd S d S )#NdarwinMacOSXdefaultr   r   ZsafariZ
serenityosZBrowserrQ   rR   zwindows-defaultZPROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXEr   r   r   r   r   ZDISPLAYZWAYLAND_DISPLAYz$xdg-settings get default-web-browser)rh   ZTERMzwww-browserZlinksZelinksZlynxZw3mZBROWSERr8   Tr   r   )r   rT   rV   r   MacOSXOSAScriptr    WindowsDefaultr2   r3   r   r   r   r0   r1   r   rW   check_outputrm   decodestripFileNotFoundErrorCalledProcessErrorPermissionErrorNotADirectoryErrorr   r   r!   r   pathsepreverser#   )Ziexplorer$   r6   Z
raw_resultresultZuserchoicesr\   r   r   r   r     sh   









r   rQ   rR   c                   @   s   e Zd ZdddZdS )r   r   Tc                 C   s2   t d| zt| W dS  ty   Y dS w )NrG   FT)rT   rU   r2   Z	startfilerZ   r>   r   r   r   r   \  s   zWindowsDefault.openNrB   rb   r   r   r   r   r   [  s    r   r   c                   @   rD   )	r   c                 C   
   || _ d S r9   )r   r:   r   r   r   r<   w     
zMacOSX.__init__r   Tc           	      C   s   t d| d|vrd| }tt|}| jdkr"d|dd }n| jdkr*d	}nd
|d  }d|dd }d| j||f }tdd}|d u rLdS || |	 }| S )NrG   :zfile:r   open location "%s""%22ZOmniWebr8   ztoWindow %dr   zOpenURL "%s"ztell application "%s"
                                activate
                                %s %s
                            end tell	osascriptwF)
rT   rU   rk   boolr   rK   r2   popenwriter   )	r;   r&   r'   r(   scriptZtoWindowr6   osapiperq   r   r   r   r   z  s&   



zMacOSX.openNrB   r^   r   r   r   r   r   m  s    	r   c                   @   s   e Zd Zdd ZdddZdS )	r   c                 C   r   r9   )_namer:   r   r   r   r<     r   zMacOSXOSAScript.__init__r   Tc                 C   sb   | j dkrd|dd }nd| j |ddf }tdd}|d u r%dS || | }| S )	Nr   r   r   r   z
                   tell application "%s"
                       activate
                       open location "%s"
                   end
                   r   r   F)r   rK   r2   r   r   r   )r;   r&   r'   r(   r   r   rq   r   r   r   r     s   

zMacOSXOSAScript.openNrB   r^   r   r   r   r   r     s    r   c            	   
   C   s   dd l } dtjd  }z|  tjdd  d\}}W n& | jy@ } zt|tjd t|tjd td W Y d }~nd }~ww d}|D ]\}}|dkrPd}qE|dkrVd}qEt|dkrit|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)filer   z-tr/   )	getoptrT   argverrorprintrh   exitlenr   )	r   usageZoptsrC   msgZnew_winoar&   r   r   r   main  s.   

r   __main__r9   rB   )*r2   r   r0   rT   rW   	threading__all__	Exceptionr   RLockr   r   r   r   r   r   r   r   r   r#   objectr7   r!   r    rc   rz   r}   r   r   ZChromiumr   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   <module>   sV   

""O

	
56AO
/
