o
    ڀ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rgd 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 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| }||v |_|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   .   
   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   r    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 ]*}|jD ]$}|ddrq	|ddrq	|jdkr#q	|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 ]E\}}|jrJ| jj|j|jd}z)|jr3|D ]}|ds+|d|j r1| | 	  qn|D ]}| | 
  q5W q tyI   t w 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 zhc                 S   s   g | ]}|j r|qS r   )r   ).0sr   r   r   
<listcomp>   s    zCLanguageSelectorPkgCache.getLanguageInformation.<locals>.<listcomp>)r(   Z_langr6   r   r   r   r2   )r
   rescodelangr9   r   r   r   getLanguageInformation   s   
z/LanguageSelectorPkgCache.getLanguageInformationN)
r   r   r   r   r"   r0   r1   r4   r<   rD   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   rF   Zdatadirr9   r+   Z
OpProgressZlcprintjoinrD   r   r   r   r   <module>   s"    /H
 