U
    ڀR];                     @   s   d dl mZ d dlZedde d dlZd dlZG dd deZG dd deZ	G d	d
 d
e
ZG dd dejZedkrd dlmZ dZedeZeeej Zed eddd e D  dS )    )print_functionNignorezapt API not stable yetc                   @   s   e Zd Zdd Zdd ZdS )LanguagePackageStatusc                 C   s"   || _ || _d| _d| _d| _d S )NF)languageCodepkgname_template	available	installeddoChange)selfr   Zpkg_template r   </usr/lib/python3/dist-packages/LanguageSelector/LangCache.py__init__
   s
    zLanguagePackageStatus.__init__c                 C   s(   d| j | jt| jt| jt| jf S )NzZLanguagePackageStatus(langcode: %s, pkgname %s, available: %s, installed: %s, doChange: %s)r   r   strr   r   r	   r
   r   r   r   __str__   s       zLanguagePackageStatus.__str__N)__name__
__module____qualname__r   r   r   r   r   r   r   	   s   r   c                   @   sN   e Zd ZdddZedd Zedd Zedd	 Zed
d Zdd Z	dS )LanguageInformationNc                 C   s\   || _ || _i | _t|d| jd< | j D ]*}|j| }||k|_|jr,|| j|_q,d S )Nzlanguage-pack-%sZlanguagePack)	r   languagelanguagePkgListr   valuesr   r   Zis_installedr   )r
   cacher   r   Zlangpkg_statuspkgnamer   r   r   r      s    

zLanguageInformation.__init__c                 C   s   | j s| jsdS dS )zK returns True if only parts of the language support packages are installed TF)notInstalledfullInstalledr   r   r   r   inconsistent)   s     z LanguageInformation.inconsistentc                 C   s:   | j  D ]*}|jsq
|jr"|jr
|js.|js
 dS q
dS )zM return True if all of the available language support packages are installed FTr   r   r   r   r	   r
   pkgr   r   r   r   .   s      z!LanguageInformation.fullInstalledc                 C   s:   | j  D ]*}|jsq
|js"|jr
|jr.|js
 dS q
dS )zN return True if none of the available language support packages are installed FTr   r   r   r   r   r   5   s      z LanguageInformation.notInstalledc                 C   s    | j  D ]}|jr
 dS q
dS )zM returns true if anything in the state of the language packs/support changes TF)r   r   r	   r   r   r   r   changes<   s     zLanguageInformation.changesc                 C   s   d| j | jf S )Nz%s (%s))r   r   r   r   r   r   r   B   s    zLanguageInformation.__str__)NN)
r   r   r   r   propertyr   r   r   r    r   r   r   r   r   r      s   




r   c                   @   s   e Zd ZdS )ExceptionPkgCacheBrokenN)r   r   r   r   r   r   r   r"   F   s   r"   c                   @   s@   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dS )LanguageSelectorPkgCachec                 C   s6   t j| | | jjdkr t || _t| | _	d S )Nr   )
aptCacher   	_depcacheZbroken_countr"   _localeinfolanguage_support_pkgsZLanguageSupportlang_support)r
   Z
localeinfoprogressr   r   r   r   K   s
    z!LanguageSelectorPkgCache.__init__c                 C   sb   | j jD ]T}|jD ]H}|ddr(q|ddr:q|jdkrFq|jr|jr  dS qqdS )z, verify that a network package lists exists  zcdrom:zhttp://security.ubuntu.comzDebian Package IndexTF)Z_listlistZindex_filesZarchive_uri
startswithZlabelexistsZhas_packages)r
   Z	metaindexZ	indexfiler   r   r   havePackageListsR   s    

z)LanguageSelectorPkgCache.havePackageListsc                 C   s   | j   dS )z clear the selections N)r&   Zinitr   r   r   r   cleara   s    zLanguageSelectorPkgCache.clearc                 C   sH   g }g }|   D ].}|js |jr,||j |jr||j q||fS )N)Zget_changesZmarked_installZmarked_upgradeappendnameZmarked_delete)r
   Zto_instZto_rmr   r   r   r   getChangesListe   s    z'LanguageSelectorPkgCache.getChangesListc              	   C   s   |j  D ]\}}|jr
| jj|j|jd}zR|jrf|D ]*}|dsV|d|j r8| | 	  q8n|D ]}| | 
  qjW q
 tk
r   t Y q
X q
dS )z$ commit changed status of list items)r   zlanguage-pack--N)r   itemsr	   r)   Z	by_localer   r   r-   endswithZmark_deleteZmark_installSystemErrorr"   )r
   likeyitemZpkgsr   r   r   r   tryChangeDetailso   s    
z)LanguageSelectorPkgCache.tryChangeDetailsc                 C   sR   g }| j j D ]<\}}|dkr"qt| ||}dd |j D r|| q|S )z5 returns a list with language packs/support packages Zzhc                 S   s   g | ]}|j r|qS r   )r   ).0sr   r   r   
<listcomp>   s      zCLanguageSelectorPkgCache.getLanguageInformation.<locals>.<listcomp>)r'   Z_langr5   r   r   r   r1   )r
   rescodeZlangr8   r   r   r   getLanguageInformation   s    z/LanguageSelectorPkgCache.getLanguageInformationN)
r   r   r   r   r!   r/   r0   r3   r;   rA   r   r   r   r   r#   I   s   

r#   __main__)
LocaleInfoz/usr/share/language-selectorZlanguagelistzavailable language informationz, c                 C   s   g | ]}d | qS )z%sr   )r<   xr   r   r   r>      s     r>   )Z
__future__r   warningsfilterwarningsFutureWarningr$   r(   objectr   r   	Exceptionr"   r%   r#   r   rC   Zdatadirr8   r*   Z
OpProgressZlcprintjoinrA   r   r   r   r   <module>   s   /H
