3
W>W"                 @   s   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 d dlm	Z	 d dl
mZ d dlZd dlZdZd	Zeed
\ZZZZG dd deZdS )    N   )Parser)Helpers)_)SourcesList)OptionParserFz/usr/share/app-install/channels   c               @   sD   e Z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 )AptUrlControllerc             C   s
   || _ d S )N)ui)selfr
    r   //usr/lib/python3/dist-packages/AptUrl/AptUrl.py__init__4   s    zAptUrlController.__init__c             C   s   t  }tjj }|j| g }x"|jD ]}||jkr&|j| q&W |sJtS | j	j
|js\tS | j	j|js| j	jtddj|j  tS | j	j  | j  tS )NzEnabling '%s' failedz, )r   
aptsourcesdistroZ
get_distroZget_sourcessectionZenabled_compsappend	RESULT_OKr
   ZaskEnableSectionsRESULT_CANCELTZdoEnableSectionerrorr   joinRESULT_ERRORdoUpdate	openCache)r   apturlZsourceslistr   Zrequested_componentsZ	componentr   r   r   enableSection7   s$    



zAptUrlController.enableSectionc             C   s   t jj|j}dt|f }dt|f }dt|f }t jj|s`| jjtd| td|  t	S d}t jj|r|t
|j }| jj|j|stS | jj||s| jjtd|j  t	S | jj  | j  tS )Nz
%s/%s.listz	%s/%s.keyz
%s/%s.eulazUnknown channel '%s'zThe channel '%s' is not known zEnabling channel '%s' failed)ospathbasenamechannelchannelsdirexistsr
   r   r   r   openreadZaskEnableChannelr   ZdoEnableChannelr   r   r   )r   r   r    ZchannelpathZ
channelkeyZchannelhtmlZchannel_info_htmlr   r   r   enableChannelP   s&    
zAptUrlController.enableChannelc             C   s   yt j | _W n@ tk
rN } z$dt|kr. | jjtd| dS d }~X nX | jjj	dkrtd}td}| jj|| dS dS )Nz/etc/apt/sources.listz"Invalid /etc/apt/sources.list fileFr   zSoftware index is brokena  This is a major failure of your software management system. Please check for broken packages with synaptic, check the file permissions and correctness of the file '/etc/apt/sources.list' and reload the software information with: 'sudo apt-get update' and 'sudo apt-get install -f'.T)
aptZCachecacheSystemErrorstrr
   r   r   	_depcachebroken_count)r   ZstrerrZ
err_headerZerr_bodyr   r   r   r   j   s    zAptUrlController.openCachec             C   s   t  }|jdddd dd |j \}}|jd k	rT|j}d|krF|d7 }d| tjd< ytj|d	 }W nl tk
r } z| j	j
td
 g S d }~X n> tjk
r } z | j	j
td|j t| g S d }~X nX |S )Nz-pz--http-proxy
http_proxyzuse http proxy)destdefaulthelp:z:3128z	http://%sr   zNeed a url to continue, exitingz Invalid url: '%s' given, exiting)r   Z
add_option
parse_argsr,   r   environr   parse
IndexErrorr
   r   r   ZInvalidUrlExceptionZurlr)   )r   parserZoptionsargsproxyapturl_lister   r   r   	parseArgs   s&    



zAptUrlController.parseArgsc             C   s@   | j   | j|j }|j s8|jjtjks8| jjj	dkr<dS dS )z7 verify that the install package actually is installed r   FT)
r   r'   packageis_installedZ_pkgZcurrent_stateapt_pkgZCURSTATE_INSTALLEDr*   r+   )r   r   pkgr   r   r   verifyInstall   s    zAptUrlController.verifyInstallc             C   s@  t }| j}| j }|stS | j s&tS x|D ]}|jdkrV| jjtd|j  q.|j	rn| j
|t krq.n6|jr| j|t krq.n|jd k	r|j  | j stS |j| jkryt| jj|j }W n tk
r   d}Y nX |r |jtd|j  q.n|jtd|j  q.| j|j jrH|jd krH|jtd|j  q.| j|j }tj|\}}}	|j|j|||	s~t}q.y| j|j j  W n> tk
r }
 z |jtd|j|
f  w.W Y d d }
~
X nX |jd k	r | j|j jj}tj ||jd	k r |jtd
|j|j|f  q.|j!| | j"|s.t}q.W |S )Nr&   apt+httpz Can not deal with protocol '%s' FzPackage '%s' is virtual.zCould not find package '%s'.z!Package '%s' is already installedzCan not install '%s' (%s) r   zFPackage '%s' requests minimal version '%s', but only '%s' is available)r&   r@   )#r   r
   r:   RESULT_BADARGSr   r   Zschemar   r   r   r   r    r%   Zrefreshr   r;   r'   bool_cacheKeyErrorr<   Zminvermessager   Z	parse_pkgZaskInstallPackager   Zmark_installr(   	candidateversionr=   Zversion_compareZ	doInstallr?   )r   Zretr
   r8   r   Zpackage_in_cacher>   sumZdescZhomepager9   ZverStrr   r   r   main   sz    










zAptUrlController.mainN)
__name__
__module____qualname__r   r   r%   r   r:   r?   rI   r   r   r   r   r	   2   s   r	   )r&   r=   Zaptsources.distror   r   r   r   r   Zaptsources.sourceslistr   Zoptparser   r   os.pathZallow_new_repositoriesr!   listranger   r   r   rA   objectr	   r   r   r   r   <module>   s   