
    Kc+                     V   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                    G d dej                  Zed	k    r9 G d
 d          Zd dlmZ  ed            e              ej                     dS dS )    N)GObject)Gtkz1.9.52
debugprint)domain	localedirc                       e Zd ZdZdej        j        ddfiZ	 	 	 ddZd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z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.
    finishedN c                    t           j                             |            t          d| z             || _        || _        || _        || _        || _        || _        || _	        g | _
        d | _        d | _        d | _        d | _        d| _        d| _        | j        d u p| j        dk    p| j        d         dk    | _        	 t%          j                    | _        n#  t          d           d | _        Y nxY wt+          d          }t-          j        |ddt,          j        j        t,          j        j        |	          | _        | j                            t+          d
                     | j                            d| j                   d S )Nz+%sF	localhostr   /zFailed to get session bus	SearchingT)parentmodaldestroy_with_parentmessage_type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dbus
SessionBus_bus_r   MessageDialogMessageTypeINFOButtonsTypeCANCEL_dialogformat_secondary_textconnect_dialog_response)	self	device_idr   
device_urihost
encryptionlanguagedevice_make_and_modelfmts	            ./usr/share/system-config-printer/ppdsloader.pyr   zPPDsLoader.__init__8   s    	  $'''EDL!!!#%&;#
%! "

	!%$$)! J$. 1 J+51 JqMS0 		**DII	3444DIIInn(04$7:7K25/2H/2	4 4 4 	**A.E,F,FGGGj$*?@@@@@s   ?C C2c                 |   | j                                          | j        rt          j        | j                  | _        | j        rb| j        r[| j        d         rN| j        d         rA| j        r:d| j        d         d| j        d         d| _        | 	                                 d S | 
                                 d S )NMFGMDLzMFG:z;MDL:;)r1   show_allr   cupshelpersparseDeviceID_devid_dictr'   r*   _gpk_device_id_query_packagekit_query_cupsr5   s    r=   runzPPDsLoader.runa   s       ? 	K*8$/JJD 		 O		 U#		  U#		  I			  		 
 7;6Fu6M6M6M6:6Fu6M6M6M#OD""%%%%%    c                 *    t          d| z             d S )Nz-%sr   rI   s    r=   __del__zPPDsLoader.__del__r   s    EDL!!!!!rK   c                     t          d| z             | j        r | j                                         d | _        d | _        | j        r"| j                                         d | _        d S d S )NzDESTROY: %s)r   r1   destroyr   r!   rI   s    r=   rO   zPPDsLoader.destroyu   st    MD()))< 	 L  ###DL: 	J!!!DJJJ	 	rK   c                     | j         S N)r    rI   s    r=   get_installed_fileszPPDsLoader.get_installed_files   s    $$rK   c                     | j         S rQ   )r"   rI   s    r=   get_ppdszPPDsLoader.get_ppds   s
    zrK   c                     | j         S rQ   )r$   rI   s    r=   get_ppdsmatch_resultzPPDsLoader.get_ppdsmatch_result   s    %%rK   c                 \    t          | dt          | j                             | j        S )Nz: stored error is )r   reprr#   rI   s    r=   	get_errorzPPDsLoader.get_error   s.    dDI6F6F6FGHHHyrK   c                 f    |                                  d | _        |                     d           d S Nr   )rO   r1   emit)r5   dialogr   s      r=   r4   zPPDsLoader._dialog_response   s1    		:rK   c                     t          d           | j        s5t          j        | j        | j        | j        | j                  }|| _        d S |                     | j        d            d S )NzAsking CUPS for PPDs)r8   r9   reply_handlererror_handler)r   r!   	asyncconn
Connectionr   r   _cups_connect_reply_cups_error)r5   cs     r=   rH   zPPDsLoader._query_cups   sv    *+++
 	7$4:151A484L484DF F FA DJJJ$$TZ66666rK   c                     |                     t          d                     |                    | j        | j                   d S )Nzfetching PPDs)r_   r`   )_begin_operationr+   getPPDs2_cups_replyrd   )r5   connUNUSEDs      r=   rc   zPPDsLoader._cups_connect_reply   sN    q11222T%5%)%5 	 	7 	7 	7 	7 	7rK   c                 @   t           j                            || j                  }|| _        d| _        | j        r
|                    | j        d         | j        d         | j        d         | j        d         | j	        | j
                  }|                    t          |                                          | j        | j        |          }||f| _        |d         }| j        r`||                             d	          sE| j        s>| j        d         r1| j        d         r$| j        rd
| _        |                                  d S |                                 d | _        | j         | j                                         d | _        |                     d           d S )N)r:   Fr?   r@   DESCMD)devidfitr   exactTr   )rC   ppdsPPDsr   r"   _need_requery_cupsr   getPPDNamesFromDeviceIDrE   r   r   orderPPDNamesByPreferencelistkeysr    r$   r*   
startswithr%   r'   _query_jockeyrO   r!   r1   r\   )r5   rj   resultrr   rp   ppdnamelistppdnames          r=   ri   zPPDsLoader._cups_reply   s   $$ft~$FF
"'? 	'')9%)@)-)9%)@)-)9%)@)-)9%)@)-)9)-)DF F  ))4+<+<+/+@151A/2 * 4 4 
 '*;%7D"!!nG	 L++W55(  '  '	
   (,$""%%%
<#L  ###DL		:rK   c                     |                                  d | _        d | _        || _        | j         | j                                          d | _        |                     d           d S r[   )rO   r!   r"   r#   r1   r\   )r5   rj   excs      r=   rd   zPPDsLoader._cups_error   s_    

	<#L  ###DL		:rK   c           
      j   t          d           	 | j                            dd          }t          j        |d          }| j        g}d}t          dt          d          dt          |          dt          |          d	           |                    t          j        d          ||| j	        | j
        d
           d S # t          $ rd}t          dt          |          z             | j        r3| j                                         |                                  Y d }~d S Y d }~d S d }~ww xY w)Nz$Asking PackageKit to install driverszorg.freedesktop.PackageKitz/org/freedesktop/PackageKitz!org.freedesktop.PackageKit.Modifyzhide-finishedzCalling InstallPrinterDrivers (r   z, )  r_   r`   timeoutz Failed to talk to PackageKit: %s)r   r*   
get_objectr(   	InterfacerF   rX   InstallPrinterDriversUInt32_packagekit_reply_packagekit_error	Exceptionr1   rB   rH   )r5   objproxy	resourcesinteractiones         r=   rG   zPPDsLoader._query_packagekit   s   :;;;	$)&&(D(EG GCNC)LMME,-I)KJq4#3#3#3#3T;5G5G5G5GI J J J''a)2K7;7M7;7M15	 ( 7 7 7 7 7
  	$ 	$ 	$:T1XXEFFF| $%%(((  #########$ $ $ $ $ $	$s   B1C 
D2AD--D2c                     t          d           d| _        | j        r/| j                                         |                                  d S d S )NzGot PackageKit replyT)r   rt   r1   rB   rH   rI   s    r=   r   zPPDsLoader._packagekit_reply   sY    *+++"&< 	 L!!$$$	  	 rK   c                     t          dt          |          z             | j        r/| j                                         |                                  d S d S )NzGot PackageKit error: %s)r   rX   r1   rB   rH   r5   r   s     r=   r   zPPDsLoader._packagekit_error   s\    .s;<<<< 	 L!!$$$	  	 rK   c                 6   t          d           	 | j                            dd          }t          j        |d          }|                    d| j        z  | j        | j        d          }d S # t          $ r }|                     |           Y d }~d S d }~ww xY w)Nz Asking Jockey to install driverszcom.ubuntu.DeviceDriverz/GUIzprinter_deviceid:%sr   r   )
r   r*   r   r(   r   search_driverr   _jockey_reply_jockey_errorr   )r5   r   jockeyrr   s        r=   rz   zPPDsLoader._query_jockey   s    6777	#)&&(A6JJC^S*CDDF$$&;do&M484F484F.2 % 4 4AAA  	# 	# 	#"""""""""	#s   AA. .
B8BBc                     t          dt          |          z             d| _        	 |d         | _        n#  g | _        Y nxY w|                                  d S )NzGot Jockey result: %sT   )r   rX   r&   r    rH   )r5   rj   r{   s      r=   r   zPPDsLoader._jockey_reply  sg    +dFmm;<<<$(!	'$*1ID!!	'$&D!!!s	   6 	Ac                 D   t          dt          |          z             | j        r|                                  d S | j         | j                                         d | _        | j         | j                                         d | _        |                     d           d S )NzGot Jockey error: %sr   )r   rX   rt   rH   r!   rO   r1   r\   r   s     r=   r   zPPDsLoader._jockey_error  s    *T3ZZ7888" 	#z%
""%%%!
|'$$'''#IIz"""""rK   )NNNNNNN)__name__
__module____qualname____doc__r   SignalFlagsRUN_LAST__gsignals__r   rJ   rM   rO   rR   rT   rV   rY   r4   rH   rc   ri   rd   rG   r   r   rz   r   r   r   rK   r=   r
   r
   $   sn          	W(14<
L AE7;(,'A 'A 'A 'AR     "" " "
 
 
% % %  & & &    
	7 	7 	77 7 7
( ( (T	 	 	$ $ $*          
# 
# 
#  # # # # #rK   r
   __main__c                        e Zd Zd Zd Zd ZdS )Fooc                 @   t          j                    }t           j                            d          }|                    |           |                    d| j                   |                    dt           j                   |                                 || _	        d S )NGoclickedzdelete-event)
r   WindowButtonnew_with_labeladdr3   go	main_quitrB   _window)r5   wbs      r=   r   zFoo.__init__   su    
A
))400AEE1IIIIIy$'***II~s}555JJMMMDLLLrK   c                     t          d| j                  }|                    d| j                   |                                 d S )NzMFG:MFG;MDL:MDL;)r6   r   r   )r
   r   r3   ppds_loadedrJ   )r5   buttonloaders      r=   r   zFoo.go)  sF    +=(,6 6 6FNNJ(8999JJMMMMMrK   c                 0   | j                                          t          j                     |                                }t          |           |                                }|t          t          |                     |                                 d S rQ   )r   rO   r   r   rY   printrT   len)r5   
ppdsloaderr   rr   s       r=   r   zFoo.ppds_loaded/  s    L  ###M&&))C#JJJ&&))Dc4jj!!!!!!!!rK   N)r   r   r   r   r   r   r   rK   r=   r   r     sA        	 	 		 	 			" 		" 		" 		" 		"rK   r   )set_debuggingT)r(   gi.repositoryr   r   rC   cupsrequirera   debugr   configgettextinstallPACKAGEr   r
   r   r   r   mainr   rK   r=   <module>r      sY  ,  ! ! ! ! ! !            h                v~1A B B B Bx# x# x# x# x# x# x# x#t z" " " " " " " "6 $#####M4CFFFCHKKKKK? rK   