U
    9_                     @   sl   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 ddl
T d dlmZ G dd deZdS )	    )GtkN)TimedOperationTimedSubprocess   )*)reducec                   @   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 )CheckPPDSanityc                 C   s   t | |d t }|d |d t | _| jd | j	d | j
dd || jddd t }|tjj tjtd| _|| j ||ddd |||  d S )NzCheck PPD sanity   Tr   FZInstall)Question__init__r   ZVBoxZset_border_widthZset_spacingZLabellabelZset_line_wrapZset_use_markupZset_alignmentZ
pack_startZ
HButtonBoxZ
set_layoutZButtonBoxStyleZSTARTZButtonZnew_with_label_install_buttonaddZnew_page)selftroubleshooterZvboxZbox r   ?/usr/share/system-config-printer/troubleshoot/CheckPPDSanity.pyr   #   s    


zCheckPPDSanity.__init__c                 C   s  i | _ | jj }|d sdS | j }|d }d }zFtd ttj|d| _| j }t|j	|f|d| _| j }W n, t
k
r   Y dS  tjk
r   Y dS X | j  d }d }zjt|}d| j d< d	d
 }	i }
|jD ]4}|	|j}|jD ]}|	|j||j< q||
|j< q|
| j d< W n t
k
r   td}d| j d< z`t|dd|gdtjtjtjd| _| j }|| j d< td| }|dtdd |d  7 }W n" tk
r   td| }Y nX Y nX |rt| |d kr|d st|\}}||f| j d< t|dks*t|dkrtd}t|dkr`zt  | _!W n   g }Y nX t|dkr|d | _"td|| j"f }| j#  ntd||| d f }|d k	r| j$%d| d |  |d k	S )NZcups_queue_listedFZ
cups_queue )parent)argsr   TZcups_printer_ppd_validc                 S   s   i }| D ]}|j ||j< q|S N)Z	defchoicekeyword)Zoptions_listoZoptionr   r   r   optionsV   s    z'CheckPPDSanity.display.<locals>.optionsZcups_printer_ppd_defaultszInvalid PPD FileZcupstestppdz-rvv)r   r   Z	close_fdsstdinstdoutstderrZcupstestppd_outputz^The PPD file for printer '%s' does not conform to the specification.  Possible reason follows:
c                 S   s   | d | S )Nr   r   )xyr   r   r   <lambda>r       z(CheckPPDSanity.display.<locals>.<lambda>r   z6There is a problem with the PPD file for printer '%s'.Zcups_printer_remoteZmissing_pkgs_and_exeszMissing Printer DriverzGPrinter '%s' requires the %s package but it is not currently installed.zIPrinter '%s' requires the '%s' program but it is not currently installed.z"<span weight="bold" size="larger">z	</span>

)&answersr   Z
get_windowcupsZ	setServerr   Z
ConnectionoprunZgetPPDRuntimeErrorZIPPErrorr   ZhideZPPDZoptionGroupsr   Z	subgroupsnamer   r   
subprocessZDEVNULLPIPEr   OSErrorosunlinkcupshelpersZmissingPackagesAndExecutablesleninstallpackageZ
PackageKit
packagekitpackageZshowr   Z
set_markup)r   r#   r   r(   ZtmpfctitletextZppdr   defaultsgroupgZsubgroupresultpkgsZexesr   r   r   display:   s    
















zCheckPPDSanity.displayc                 C   s   | j d| j| _d S )NZclicked)r   Zconnectinstall_clickedbutton_sigid)r   Zhandler   r   r   connect_signals   s    zCheckPPDSanity.connect_signalsc                 C   s   | j | j d S r   )r   Z
disconnectr=   r   r   r   r   disconnect_signals   s    z!CheckPPDSanity.disconnect_signalsc                 C   s   | j S r   )r#   r?   r   r   r   collect_answer   s    zCheckPPDSanity.collect_answerc                 C   s   | j   d S r   )r%   Zcancelr?   r   r   r   cancel_operation   s    zCheckPPDSanity.cancel_operationc                 C   sL   | j dg }|| j || j d< z| jdd| j W n   Y nX d S )NZpackages_installedr   )r#   getappendr2   r1   ZInstallPackageName)r   Zbuttonr:   r   r   r   r<      s    
zCheckPPDSanity.install_clickedN)
__name__
__module____qualname__r   r;   r>   r@   rA   rB   r<   r   r   r   r   r   "   s   ]r   )Zgi.repositoryr   r$   r.   r0   r,   r)   Ztimedopsr   r   base	functoolsr   r
   r   r   r   r   r   <module>   s   