o ?Og^@sdZddlZddlZddlZddlZddlZddlZgdZGdddeZ e Z iZ da dad=dddd Zd=d d Zd>d dZddZddZddddZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZGd!d"d"eZGd#d$d$eZeZGd%d&d&eZGd'd(d(eZ Gd)d*d*eZ!Gd+d,d,eZ"d-d.Z#d/d0Z$ej%dd1d2krGd3d4d4eZ&ej%d5krGd6d7d7eZ'Gd8d9d9eZ(d:d;Z)e*dr r r rr?zBaseBrowser.open_new_tabN)r6rT) rr r __doc__argsr:rrrr r r r r5s   r5c@"eZdZdZddZd ddZdS) r!zVClass for all browsers started with a command and without remote functionality.cCsFt|tr ||_dg|_n |d|_|dd|_tj|j|_dS)Nrrr) isinstancestrrrBr0r1r2r8r r r r:s   zGenericBrowser.__init__rTcsvtd|jgfdd|jD}ztjdddkr$t|}ntj|dd}| WSty:YdSw) Nwebbrowser.opencg|]}|dqSrreplace.0argr+r r z'GenericBrowser.open..winT) close_fdsF) sysauditrrBplatform subprocessPopenwaitOSErrorr9r&r'r(cmdlinepr r+r rs    zGenericBrowser.openNr@rr r rAr:rr r r r r!s r!c@eZdZdZdddZdS)r zHClass for all browsers which are to be started in the background.rTcsz|jgfdd|jD}tdztjdddkr$t|}ntj|ddd}|duWSty<YdSw) NcrGrHrIrKr+r r rNrOz*BackgroundBrowser.open..rFrPrQT)rRstart_new_sessionF) rrBrSrTrUrVrWpollrYrZr r+r rs   zBackgroundBrowser.openNr@rr r rArr r r r r sr c@sDeZdZdZdZdZdZddgZdZdZ dZ d ddZ d d d Z dS) UnixBrowserz=Parent class for all Unix browsers with remote functionality.NFT%actionrc Csg}|r|jrt|}|j|}|r|g}|jg||}|s"|jr&tj}nd}tj|d||jr2|p3d|dd} |rOz | d} | WStj yNYdSw|jr\| durZdSdS|  S)NTrRstdinstdoutstderrr_F) raise_optsintr backgroundrVDEVNULLrWredirect_stdoutrXZTimeoutExpiredr`) r9rBZremoter(r&Z raise_optoptr[Zinoutr\rcr r r _invokes2         zUnixBrowser._invokercstd|dkr|jn!|dkr|jn|dkr'|jdur#|jn |jntdd|fdd|jD}d d|D}||d |}|s\fd d|jD}||d d Sd S) NrFrrr-zBad 'new' parameter to open(); zexpected 0, 1, or 2, got %scs g|] }|ddqS)rrcrIrKactionr&r r rNsz$UnixBrowser.open..cSsg|]}|r|qSr r rKr r r rNsTcrGrHrIrKr+r r rNsF) rSrT remote_actionremote_action_newwinremote_action_newtabr remote_argsrprB)r9r&r'r(rBZsuccessr rqr rs*   zUnixBrowser.openr7r@) rr r rArirkrmrvrsrtrurprr r r r rbs #rbc@s(eZdZdZddgZdZdZdZdZdS) Mozillaz$Launcher class for Mozilla browsers.rcrr6z -new-windowz-new-tabTN rr r rArvrsrtrurkr r r r rwrwc@s0eZdZdZddgZddgZdZdZdZd Z d S) Netscapez$Launcher class for Netscape browser.-noraisez-raise-remoteopenURL(%s%action)r6 ,new-window,new-tabTN) rr r rArirvrsrtrurkr r r r rz&srzc@s,eZdZdZddgZddgZdZdZdZd S) Galeonz,Launcher class for Galeon/Epiphany browsers.r{r6rcr-nz-wTN) rr r rArirvrsrtrkr r r r r1src@(eZdZdZddgZdZdZdZdZdS)Chromez)Launcher class for Google Chrome browser.rcrr6 --new-windowTNrxr r r r r;ryrc@r)Operaz!Launcher class for Opera browser.rcrr6rTNrxr r r r rGryrc@s,eZdZdZddgZdZdZdZdZdZ dS) Elinksz#Launcher class for Elinks browsers.r|r}r6r~rFN) rr r rArvrsrtrurkrmr r r r rQsrc@r^) KonquerorzController for the KDE File Manager (kfm, or Konqueror). See the output of ``kfmclient --commands`` for more information on the Konqueror remote-control interface. rTcCstd||dkr d}nd}tj}ztjd||gd|||d}Wn ty*Ynw|dSztjdd |gd|||dd }Wn tyJYn w|durSdSztjd d |gd|||dd }Wn tymYd Sw|duS)NrFr-ZnewTabZopenURL kfmclientT)rRrerfrg konquerorz--silentrdkfmz-dF)rSrTrVrlrWrYrXr`)r9r&r'r(rrdevnullr\r r r rfsH         zKonqueror.openNr@rar r r r r_src@s&eZdZddZddZd ddZd S) Grailc Csddl}ddl}ddl}ddl}tj|d}|t d}tj| || |d}||}|s:dS||j |j } |D]&} z | | W| Styjzt| Wn tygYnwYqDwdS)Nrz .grail-unixz-*)globpwdsockettempfiler0r1joinZ gettempdirgetpwuidgetuidescapeZAF_UNIXZ SOCK_STREAMZconnectrYunlink) r9rrrrZtempdiruserfilenameZmaybessfnr r r _find_grail_rcs4     zGrail._find_grail_rccCs&|}|sdS|||dS)Nrr)rsendclose)r9rrrr r r _remotes  z Grail._remoterTcCs4td||r|d|}|S|d|}|S)NrFzLOADNEW zLOAD )rSrTr)r9r&r'r(okr r r rs z Grail.openNr@)rr r rrrr r r r rsrcCstdr tddtddtjvrtdrtddtddtjvr1tdr1tddtddtjvrCtdrCtdttdtdrPtddtddD]}t|rat|dt|qRd D]}t|rst|dt|qdtd rtd ttd n td rtd ttd d D]}t|rt|dt |qtd rtd dtd dD]}t|rt|dt |qtdrtddt dtdrtddtdtdrtdt ddSdS)Nzxdg-openZGNOME_DESKTOP_SESSION_IDz gvfs-openz gnome-openZKDE_FULL_SESSIONrz x-www-browser)firefoxZ iceweaselZiceape seamonkey)zmozilla-firefoxzmozilla-firebirdfirebirdmozillanetscaperr)ZgaleonZepiphanyZ skipstone)z google-chromechromeZchromiumzchromium-browseroperaZmosaicZgrail) r.r/rr r0environrrwrzrrrr)r$r r r register_X_browserssN            rc Cs6gatjdkr'tddtdtddtdtddtdtddtdtjdkr4tddtdtjdd d krhtd ttj tj d d d}dddddd|fD]}t |rft|dt|qWn{tj dsttj drzd}tj|tjd}|}WnttjttfyYnw|attj drt drtddtdt drtddtdt drtddtdt drtddtdt drtddtddtj vrtj dtj}||D] }|dkrt|d d!}|d"durt|dt|d d!qdSdS)#NdarwinMacOSXdefaultrrZsafariZ serenityosZBrowserrPrQzwindows-defaultZ PROGRAMFILESzC:\Program FileszInternet Explorer\IEXPLORE.EXErrrrrZDISPLAYZWAYLAND_DISPLAYz$xdg-settings get default-web-browser)rgZTERMz www-browserZlinksZelinksZlynxZw3mZBROWSERr6Tr r)rrSrUrMacOSXOSAScriptr WindowsDefaultr0r1rrrr.r/rrVZ check_outputrldecodestripFileNotFoundErrorZCalledProcessErrorPermissionErrorNotADirectoryErrorrrr!rpathsepreverser#)Ziexplorer$r4Z raw_resultresultZ userchoicesr[r r r r sh             rrPrQc@seZdZdddZdS)rrTcCs2td|zt|WdStyYdSw)NrFFT)rSrTr0Z startfilerYr<r r r r\s   zWindowsDefault.openNr@)rr r rr r r r r[srrc@rC) ra{Launcher class for Aqua browsers on Mac OS X Optionally specify a browser name on instantiation. Note that this will not work for Aqua browsers if the user has moved the application package after installation. If no browser is specified, the default browser, as specified in the Internet System Preferences panel, will be used. cC ||_dSr7)rr8r r r r:w zMacOSX.__init__rTc Cstd|d|vrd|}tt|}|jdkr"d|dd}n|jdkr*d }nd |d }d |dd}d |j||f}tdd}|durLdS||| }| S)NrF:zfile:ropen location "%s""%22ZOmniWebr6z toWindow %drz OpenURL "%s"ztell application "%s" activate %s %s end tell osascriptwF) rSrTrjboolrrJr0popenwriter) r9r&r'r(scriptZtoWindowr4osapiperor r r rzs&        z MacOSX.openNr@r]r r r r rms rc@seZdZddZdddZdS) rcCrr7)_namer8r r r r:rzMacOSXOSAScript.__init__rTcCsb|jdkrd|dd}n d|j|ddf}tdd}|dur%dS|||}| S) Nrrrrz tell application "%s" activate open location "%s" end rrF)rrJr0rrr)r9r&r'r(rrror r r rs   zMacOSXOSAScript.openNr@)rr r r:rr r r r rsrc Csddl}dtjd}z|tjddd\}}Wn&|jy@}zt|tjdt|tjdtdWYd}~nd}~wwd}|D]\}}|dkrPd}qE|dkrVd}qEt|dkrit|tjdtd|d}t||td dS) NrzDUsage: %s [-n | -t] url -n: open new window -t: open new tabrZntd)filerz-tr-) getoptrSargverrorprintrgexitlenr) rZusageZoptsrBmsgZnew_winoar&r r r mains.      r__main__r7r@)+rAr0rr.rSrVZ threading__all__ ExceptionrRLockrrrrrrrrrr#objectr5r!r rbrwrzrrZChromiumrrrrrrrUrrrrrr r r r sV  ""O     56AO /