3
Z                 @   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 j| |d tj }|jd |jd tj | _| jjd | jj	d | jj
dd |j| jddd tj }|jtjj tjjtd| _|j| j |j|ddd |j||  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j }|d }d }yFtjd ttj|d| _| jj }t|j	|f|d| _| jj }W n( t
k
r   dS  tjk
r   dS X | jj  d }d }yrtj|}d| j d< d	d
 }	i }
xB|jD ]8}|	|j}x|jD ]}|	|j||j< qW ||
|j< qW |
| j d< W n t
k
r   td}d| j d< y`t|dd|gdtjtjtjd| _| j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j| |d kr|d  rtj|\}}||f| j d< t|dks0t|dkrtd}t|dkrfytj  | _!W n   g }Y nX t|dkr|d | _"td|| j"f }| jj#  ntd||| d f }|d k	r| j$j%d| d |  |d k	S )NZcups_queue_listedFZ
cups_queue )parent)argsr   TZcups_printer_ppd_validc             S   s"   i }x| D ]}|j ||j< q
W |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   s    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opZ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   ZdefaultsgroupgZsubgroupresultpkgsZexesr   r   r   display:   s    














zCheckPPDSanity.displayc             C   s   | j 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| j d S )N)r   Z
disconnectr9   )r   r   r   r   disconnect_signals   s    z!CheckPPDSanity.disconnect_signalsc             C   s   | j S )N)r!   )r   r   r   r   collect_answer   s    zCheckPPDSanity.collect_answerc             C   s   | j j  d S )N)r#   Zcancel)r   r   r   r   cancel_operation   s    zCheckPPDSanity.cancel_operationc          
   C   sL   | j jdg }|j| j || j d< y| jjdd| j W n   Y nX d S )NZpackages_installedr   )r!   getappendr/   r.   ZInstallPackageName)r   Zbuttonr6   r   r   r   r8      s    
zCheckPPDSanity.install_clickedN)
__name__
__module____qualname__r   r7   r:   r;   r<   r=   r8   r   r   r   r   r   "   s   ]r   )Zgi.repositoryr   r"   r+   r-   r)   r&   Ztimedopsr   r   base	functoolsr   r
   r   r   r   r   r   <module>   s   