3
Z+                 @   s   d dl Z d dlmZ d dlmZ d dlZd dlZejd d dlZd dlm	Z	 d dl
Z
d dlZeje
je
jd G dd dejZed	krG d
d dZd dlmZ ed e  ej  dS )    N)GObject)Gtkz1.9.52)
debugprint)Zdomain	localedirc               @   s   e Zd ZdZdejjdf fiZd*ddZdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd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 )+
PPDsLoadera  
    1. If PackageKit support is available, and this is a local server,
    try to use PackageKit to install relevant drivers.  We do this
    because we can only make the right choice about the "best" driver
    when the full complement of drivers is there to choose from.

    2. Fetch the list of available drivers from CUPS.

    3. If Jockey is available, and there is no appropriate driver
    available, try to use Jockey to install one.

    4. If Jockey was able to install one, fetch the list of available
    drivers again.
    finishedNc       	      C   s  t j j|  td|   || _|| _|| _|| _|| _|| _|| _	g | _
d | _d | _d | _d | _d| _d| _| jd kp| jdkp| jd dk| _ytj | _W n   td d | _Y nX td}tj|ddtjjtjj|d	| _| jjtd
 | jjd| j d S )Nz+%sFZ	localhostr   /zFailed to get session busZ	SearchingT)parentZmodalZdestroy_with_parentZmessage_typeZbuttonstextzSearching for driversresponse) r   __init__r   
_device_id_device_uri_device_make_and_model_parent_host_encryption	_language_installed_files_conn_ppds_exc_ppdsmatch_result_jockey_queried_jockey_has_answered_local_cupsdbusZ
SessionBus_bus_r   ZMessageDialogZMessageTypeINFOZButtonsTypeZCANCEL_dialogZformat_secondary_textconnect_dialog_response)	self	device_idr	   Z
device_urihost
encryptionlanguageZdevice_make_and_modelZfmt r(   ./usr/share/system-config-printer/ppdsloader.pyr   8   s@    


zPPDsLoader.__init__c             C   st   | j j  | jrtj| j| _| jrh| jrh| jd rh| jd rh| jrhd| jd | jd f | _| j	  n| j
  d S )NMFGMDLzMFG:%s;MDL:%s;)r    show_allr   cupshelpersZparseDeviceID_devid_dictr   r   _gpk_device_id_query_packagekit_query_cups)r#   r(   r(   r)   runa   s    




zPPDsLoader.runc             C   s   t d|   d S )Nz-%s)r   )r#   r(   r(   r)   __del__r   s    zPPDsLoader.__del__c             C   sB   t d|   | jr"| jj  d | _d | _| jr>| jj  d | _d S )NzDESTROY: %s)r   r    destroyr   r   )r#   r(   r(   r)   r4   u   s    

zPPDsLoader.destroyc             C   s   | j S )N)r   )r#   r(   r(   r)   get_installed_files   s    zPPDsLoader.get_installed_filesc             C   s   | j S )N)r   )r#   r(   r(   r)   get_ppds   s    zPPDsLoader.get_ppdsc             C   s   | j S )N)r   )r#   r(   r(   r)   get_ppdsmatch_result   s    zPPDsLoader.get_ppdsmatch_resultc             C   s   t d| t| jf  | jS )Nz%s: stored error is %s)r   reprr   )r#   r(   r(   r)   	get_error   s    zPPDsLoader.get_errorc             C   s   |j   d | _| jd d S )Nr   )r4   r    emit)r#   Zdialogr   r(   r(   r)   r"      s    zPPDsLoader._dialog_responsec             C   sB   t d | js0tj| j| j| j| jd}|| _n| j| jd  d S )NzAsking CUPS for PPDs)r%   r&   reply_handlererror_handler)r   r   	asyncconnZ
Connectionr   r   _cups_connect_reply_cups_error)r#   cr(   r(   r)   r1      s    
zPPDsLoader._query_cupsc             C   s$   |j td |j| j| jd d S )Nzfetching PPDs)r;   r<   )Z_begin_operationr   ZgetPPDs2_cups_replyr?   )r#   connZUNUSEDr(   r(   r)   r>      s    zPPDsLoader._cups_connect_replyc             C   s  t jj|| jd}|| _d| _| jr|j| jd | jd | jd | jd | j	| j
}|jt|j | j| j|d}||f| _|d }| jr|| jd	 r| j r| jd r| jd r| jrd
| _| j  d S |j  d | _| jd k	r| jj  d | _| jd d S )N)r'   Fr*   r+   ZDESZCMD)Zdevidfitr   exactTr   )r-   ppdsZPPDsr   r   _need_requery_cupsr   ZgetPPDNamesFromDeviceIDr.   r   r   ZorderPPDNamesByPreferencelistkeysr   r   r   
startswithr   r   _query_jockeyr4   r   r    r:   )r#   rB   resultrE   rC   ZppdnamelistZppdnamer(   r(   r)   rA      sB    





zPPDsLoader._cups_replyc             C   sB   |j   d | _d | _|| _| jd k	r4| jj   d | _| jd d S )Nr   )r4   r   r   r   r    r:   )r#   rB   excr(   r(   r)   r?      s    

zPPDsLoader._cups_errorc             C   s   t d yh| jjdd}tj|d}| jg}d}t dtdt|t|f  |jtjd||| j	| j
dd	 W nJ tk
r } z.t d
t|  | jr| jj  | j  W Y d d }~X nX d S )Nz$Asking PackageKit to install driverszorg.freedesktop.PackageKitz/org/freedesktop/PackageKitz!org.freedesktop.PackageKit.Modifyzhide-finishedz*Calling InstallPrinterDrivers (%s, %s, %s)r   i  )r;   r<   timeoutz Failed to talk to PackageKit: %s)r   r   
get_objectr   	Interfacer/   r8   ZInstallPrinterDriversZUInt32_packagekit_reply_packagekit_error	Exceptionr    r,   r1   )r#   objproxyZ	resourcesZinteractioner(   r(   r)   r0      s&    
zPPDsLoader._query_packagekitc             C   s*   t d d| _| jr&| jj  | j  d S )NzGot PackageKit replyT)r   rF   r    r,   r1   )r#   r(   r(   r)   rP      s
    
zPPDsLoader._packagekit_replyc             C   s,   t dt|  | jr(| jj  | j  d S )NzGot PackageKit error: %s)r   r8   r    r,   r1   )r#   rL   r(   r(   r)   rQ      s    
zPPDsLoader._packagekit_errorc             C   st   t d y:| jjdd}tj|d}|jd| j | j| jdd}W n, t	k
rn } z| j| W Y d d }~X nX d S )Nz Asking Jockey to install driverszcom.ubuntu.DeviceDriverz/GUIzprinter_deviceid:%si  )r;   r<   rM   )
r   r   rN   r   rO   Zsearch_driverr   _jockey_reply_jockey_errorrR   )r#   rS   ZjockeyrrU   r(   r(   r)   rJ      s    zPPDsLoader._query_jockeyc          	   C   sD   t dt|  d| _y|d | _W n   g | _Y nX | j  d S )NzGot Jockey result: %sT   )r   r8   r   r   r1   )r#   rB   rK   r(   r(   r)   rV     s    zPPDsLoader._jockey_replyc             C   sb   t dt|  | jr | j  n>| jd k	r:| jj  d | _| jd k	rT| jj  d | _| jd d S )NzGot Jockey error: %sr   )r   r8   rF   r1   r   r4   r    r:   )r#   rL   r(   r(   r)   rW     s    




zPPDsLoader._jockey_error)NNNNNNN)__name__
__module____qualname____doc__r   ZSignalFlagsZRUN_LASTZ__gsignals__r   r2   r3   r4   r5   r6   r7   r9   r"   r1   r>   rA   r?   r0   rP   rQ   rJ   rV   rW   r(   r(   r(   r)   r   $   s.     
'*	r   __main__c               @   s$   e Zd Zdd Zdd Zdd ZdS )Fooc             C   sL   t j }t jjd}|j| |jd| j |jdt j |j  || _	d S )NZGoZclickedzdelete-event)
r   ZWindowZButtonZnew_with_labeladdr!   go	main_quitr,   _window)r#   wbr(   r(   r)   r      s    
zFoo.__init__c             C   s(   t d| jd}|jd| j |j  d S )NzMFG:MFG;MDL:MDL;)r$   r	   r   )r   rc   r!   ppds_loadedr2   )r#   Zbuttonloaderr(   r(   r)   ra   )  s    
zFoo.goc             C   sJ   | j j  tj  |j }t| |j }|d k	r>tt| |j  d S )N)rc   r4   r   rb   r9   printr6   len)r#   Z
ppdsloaderrL   rE   r(   r(   r)   rf   /  s    
zFoo.ppds_loadedN)rZ   r[   r\   r   ra   rf   r(   r(   r(   r)   r_     s   	r_   )set_debuggingT)r   Zgi.repositoryr   r   r-   ZcupsZrequirer=   debugr   configgettextinstallZPACKAGEr   r   rZ   r_   rj   mainr(   r(   r(   r)   <module>   s$   
 {