
xR;                 @   s  d  d l  m Z d  d l Z e j d d e  d  d l Z d  d l Z Gd d   d e  Z Gd d   d e  Z	 Gd	 d
   d
 e
  Z Gd d   d e j  Z e d k rd  d l m Z d Z e d e  Z e e e j j    Z e d  e d j d d   e j   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   s1   | |  _  | |  _ 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   s8   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               @   sv   e  Z d  Z d 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 <xL |  j j   D]; } | j | } | | k | _ | j rA | | j | _ qA Wd  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  r |  j r d Sd S)zK returns True if only parts of the language support packages are installed TF)notInstalledfullInstalled)r
   r   r   r   inconsistent)   s     z LanguageInformation.inconsistentc             C   sT   xM |  j  j   D]< } | j s" q | j r5 | j pE | j oE | j s d Sq Wd 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   sT   xM |  j  j   D]< } | j s" q | j r6 | j pE | j oE | j s d Sq Wd S)zN return True if none of the available language support packages are installed FT)r   r   r   r   r	   )r
   r   r   r   r   r   5   s    	 & z LanguageInformation.notInstalledc             C   s+   x$ |  j  j   D] } | j r d Sq Wd S)zM returns true if anything in the state of the language packs/support changes TF)r   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__)
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   sM   t  j j |  |  |  j j d k r. t    | |  _ t j |   |  _	 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   s   x |  j  j D]x } xo | j D]d } | j d  j d  r> q | j d  j d  rY q | j d k rk q | j r | j r d Sq Wq Wd 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  j   d S)z clear the selections N)r#   Zinit)r
   r   r   r   cleara   s    zLanguageSelectorPkgCache.clearc             C   sh   g  } g  } xO |  j    D]A } | j s1 | j rA | j | j  | j r | j | j  q W| | 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   x | j  j   D] \ } } | j r |  j j | j d | j } ys | j r xc | D]9 } | j d  s | j d | j  rV |  | j	   qV Wn x | D] } |  | j
   q WWq t k
 r t    Yq Xq Wd S)z$ commit changed status of list itemsr   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   sw   g  } xj |  j  j j   D]V \ } } | d k r4 q t |  | |  } d d   | j j   D r | j |  q W| S)z5 returns a list with language packs/support packages Zzhc             S   s   g  |  ] } | j  r |  q Sr   )r   ).0sr   r   r   
<listcomp>   s   	 zCLanguageSelectorPkgCache.getLanguageInformation.<locals>.<listcomp>)r$   Z_langr2   r   r   r   r.   )r
   rescodeZlangr5   r   r   r   getLanguageInformation   s    z/LanguageSelectorPkgCache.getLanguageInformationN)
r   r   r   r   r   r,   r-   r0   r8   r>   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   )r9   xr   r   r   r;      s   	 r;   )Z
__future__r   warningsfilterwarningsFutureWarningr!   r%   objectr   r   	Exceptionr   r"   r    r   r@   Zdatadirr5   r'   Z
OpProgressZlcprintjoinr>   r   r   r   r   <module>   s   /H
