3
ZwX              	   @   s  d dl Z d dlZd dlmZ d dlmZ e jdd d dlmZ e jdd d dlmZ d dl	Z	d d	l
T d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZejd
 dZdZdZed Zed Zed ZdadZejd G dd dejZ G dd dZ!G dd dZ"G dd dej#j$Z%G dd dej#j$Z&G dd dej#j$Z'G dd dej#j$Z(dd  Z)e*d!krd dl+Z+d dlZd dl,Z,e,j-ej.ej/d" d dl0Z0ye0j1e0j2d# W n   Y nX e+j3  ej4  d d$l5m6Z6 e6d%d& d'Z7e8e	j9d(krbxDe	j9d(d D ]2Z:e:d)krNe;d% ej<e= ne:d*kr,d%Z7q,W e7rxe)  e	j>d  e=d+ ej?ej@d,Ze( ZAejB  ejC  ejD  eAjE  dS )-    N)GObject)GLibGdkz3.0)r   Gtk)r   )*z1.9.52z!org.fedoraproject.Config.Printingz"/org/fedoraproject/Config/Printingz.NewPrinterDialogz.PrinterPropertiesDialogz
.JobViewerzsystem-config-printerc               @   sZ   e Zd Zejdf fejdejffdZdd Zdd Zdd Z	d	d
 Z
dd Zdd ZdS )FetchedPPDsN)readyerrorc             C   s"   t j j|  || _|| _d | _d S )N)r   __init__	_cupsconn	_language_ppds)selfcupsconnlanguage r   4/usr/share/system-config-printer/scp-dbus-service.pyr
   D   s    zFetchedPPDs.__init__c             C   s
   | j d k	S )N)r   )r   r   r   r   is_readyJ   s    zFetchedPPDs.is_readyc             C   s   | j S )N)r   )r   r   r   r   get_ppdsM   s    zFetchedPPDs.get_ppdsc             C   s&   t d d | _| jj| j| jd d S )NzFetchPPDs: running)reply_handlererror_handler)
debugprintr   r   ZgetPPDs2_cups_getppds_reply_cups_error)r   r   r   r   runP   s    
zFetchedPPDs.runc             C   s    t dt|  | jd| d S )NzFetchPPDs: error: %sr	   )r   repremit)r   connexcr   r   r   r   V   s    zFetchedPPDs._cups_errorc             C   s*   t d tjj|| jd| _| jd d S )NzFetchPPDs: success)r   r   )r   cupshelpersppdsZPPDsr   r   r   )r   r   resultr   r   r   r   Z   s    zFetchedPPDs._cups_getppds_reply)__name__
__module____qualname__r   ZSIGNAL_RUN_LASTZTYPE_PYOBJECTZ__gsignals__r
   r   r   r   r   r   r   r   r   r   r   =   s   
r   c               @   sL   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d Z
dS )GetBestDriversRequestc             C   s   || _ || _|| _|| _|| _|| _|| _g | _g | _d| _	t
d|   tj  td krt
d t| j| ja| jjtjd| j | jjtjd| j tj  nPtj rt
d | jt n4t
d | jjtjd| j | jjtjd| j d S )NFz+%sz*GetBestDrivers request: need to fetch PPDsr   r	   z,GetBestDrivers request: PPDs already fetchedz(GetBestDrivers request: waiting for PPDs)	device_iddevice_make_and_model
device_urir   r   r   r   _signalsinstalled_filesdownload_triedr   g_killtimeradd_holdg_ppdsr   appendconnect_ppds_ready_ppds_errorr   r   )r   r&   r'   r(   r   r   r   r   r   r   r   r
   `   s4    

zGetBestDriversRequest.__init__c             C   s   t d|   d S )Nz-%s)r   )r   r   r   r   __del__   s    zGetBestDriversRequest.__del__c             C   s   x| j D ]}tj| qW d S )N)r)   r.   
disconnect)r   sr   r   r   _disconnect_signals   s    z)GetBestDriversRequest._disconnect_signalsc             C   s   | j   | j| d S )N)r6   r   )r   fetchedppdsr   r   r   r   r2      s    z!GetBestDriversRequest._ppds_errorc       
         s  |j  sd S | j  |j }y~| jr4tj| j}nDi }tjj| j\}}||d< ||d< d|d< g |d< d||f | _|j	|d |d |d |d | j
| j |j j | j| d}|d } | }y|d	ko| j rjd
| _tj | _| jjjd | jjd| j| jjd| jg| _ fdd|D | _| jjd| jdsfztj  W d td}	| j|	 X d S W n   Y nX tj  | j fdd|D  W nH tk
r }	 z*ytj  W n   Y nX | j|	 W Y d d }	~	X nX d S )NZMFGZMDL ZDESZCMDzMFG:%s;MDL:%s;)devidfitr   exactTFzdialog-canceledzdriver-download-checkedc                s   g | ]}| | fqS r   r   ).0x)r:   r   r   
<listcomp>   s    z5GetBestDriversRequest._ppds_ready.<locals>.<listcomp>download_driver)r9   zFailed to launch dialogc                s   g | ]}| | fqS r   r   )r<   r=   )r:   r   r   r>      s    ) r   r6   r   r&   r   ZparseDeviceIDr    ZppdMakeModelSplitr'   ZgetPPDNamesFromDeviceIDr(   ZorderPPDNamesByPreferencekeysr*   r+   
newprinterNewPrinterGUIdialogNewPrinterWindow	set_modalr0   on_dialog_canceledon_driver_download_checkedhandlesreply_if_failinitr,   remove_holdRuntimeErrorr   r   	Exception)
r   r7   r    Zid_dictZmfgZmdlZppdnamelistZppdnameZstatuser   )r:   r   r1      sj    


z!GetBestDriversRequest._ppds_readyc             C   s.   x| j D ]}| jj| qW | jj  | `d S )N)rH   rC   r4   destroy)r   handler   r   r   _destroy_dialog   s    
z%GetBestDriversRequest._destroy_dialogc             C   sl   t |dkrLtd | jjtjd| j | jjtjd| j tj  d S t	j
  | j  | j| j d S )Nr   z;GetBestDrivers request: Re-fetch PPDs after driver downloadr   r	   )lenr   r)   r/   r.   r0   r1   r2   r   r,   rK   rQ   r   rI   )r   objr*   r   r   r   rG      s    z0GetBestDriversRequest.on_driver_download_checkedc             C   s    t j  | j  | j| j d S )N)r,   rK   rQ   r   rI   )r   rS   r   r   r   rF      s    z(GetBestDriversRequest.on_dialog_canceledN)r"   r#   r$   r
   r3   r6   r2   r1   rQ   rG   rF   r   r   r   r   r%   _   s   !Gr%   c               @   s&   e Zd Zdd Zdd ZdddZdS )	GroupPhysicalDevicesRequestc       
      C   s   || _ || _|| _td|   ytj  i }i | _x@| j j D ]2\}}tj	|f|}|| j|< |j
dr>|||< q>W t|dkrtj|}|j| jd n| j  W n4 tk
r }	 ztj  | j|	 W Y d d }	~	X nX d S )Nz+%szdnssd://r   )r   )devicesr   r   r   r,   r-   
deviceobjsitemsr   ZDevice
startswithrR   dnssdresolveZDNSSDHostNamesResolverZresolve_grouprM   rK   )
r   rU   r   r   Zneed_resolvingr(   Zdevice_dict	deviceobjZresolverrN   r   r   r   r
      s(    


z$GroupPhysicalDevicesRequest.__init__c             C   s   t d|   d S )Nz-%s)r   )r   r   r   r   r3     s    z#GroupPhysicalDevicesRequest.__del__Nc       
      C   s   yg | _ xf| jj D ]X\}}tj|}d}y | j j|}| j | j| W q tk
rj   | j j| Y qX qW g }x&| j D ]}|jdd |j D  q|W t	j
  | j| W n4 tk
r }	 zt	j
  | j|	 W Y d d }	~	X nX d S )NFc             S   s   g | ]
}|j qS r   )Zuri)r<   r=   r   r   r   r>     s    z6GroupPhysicalDevicesRequest._group.<locals>.<listcomp>)ZphysdevsrV   rW   PhysicalDeviceindexZ
add_device
ValueErrorr/   Zget_devicesr,   rK   r   rM   r   )
r   Zresolved_devicesr(   r[   ZnewphysicaldeviceZmatchediZuris_by_physZphysdevrN   r   r   r   rZ     s$    
z"GroupPhysicalDevicesRequest._group)N)r"   r#   r$   r
   r3   rZ   r   r   r   r   rT      s   rT   c               @   s  e Zd Zdd Zdd Zejjeddddd	 Z	ejjed
dddd Z
ejjeddddd Zdd Zdd Zd,ddZejjedddd Zejjedddd Zejjedddd Zejjeddd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ ZdS )-ConfigPrintingNewPrinterDialogc             C   s   t jjt|d}t jjj| || tj | _| jj	j
d | jjd| j| jjd| j| jjd| j| jjd| jg| _tj | _|| _td|   d S )N)busFzdialog-canceledzprinter-addedzprinter-modifiedzdriver-download-checkedz+%s)dbusserviceBusName
CONFIG_BUSObjectr
   rA   rB   rC   rD   rE   r0   rF   on_printer_addedon_printer_modifiedrG   rH   ppdcacheZPPDCache	_ppdcacher   r   )r   ra   pathr   bus_namer   r   r   r
   !  s    

z'ConfigPrintingNewPrinterDialog.__init__c             C   s   | j j  td|   d S )Nz-%s)rC   rO   r   )r   r   r   r   r3   2  s    
z&ConfigPrintingNewPrinterDialog.__del__Zussr8   )dbus_interfacein_signatureout_signaturec             C   s    t j  | jjd|||d d S )NZprinter_with_uri)r(   r9   xid)r,   r-   rC   rJ   )r   rp   r(   r&   r   r   r   NewPrinterFromDevice6  s    
z3ConfigPrintingNewPrinterDialog.NewPrinterFromDeviceusc             C   s   t j  | jjd||d d S )Nr?   )r9   rp   )r,   r-   rC   rJ   )r   rp   r&   r   r   r   DownloadDriverForDeviceID=  s    z8ConfigPrintingNewPrinterDialog.DownloadDriverForDeviceIDc             C   s.   t j  || _|| _|| _| jj|| j d S )N)r,   r-   rp   namer&   rj   Z	fetch_ppd_change_ppd_got_ppd)r   rp   rt   r&   r   r   r   	ChangePPDC  s
    z(ConfigPrintingNewPrinterDialog.ChangePPDc             C   s   || _ | jj| j| jd d S )N)r   r   )ppdr   ZgetPrinters_change_ppd_with_dev_do_change_ppd)r   rt   rw   r   r   r   r   ru   L  s    
z2ConfigPrintingNewPrinterDialog._change_ppd_got_ppdc             C   s&   |j | ji j dd | _| j| d S )Nz
device-uri)getrt   r(   ry   )r   r   r!   r   r   r   rx   R  s    z3ConfigPrintingNewPrinterDialog._change_ppd_with_devNc             C   s&   | j jd| j| j| j| j| jd d S )Nrw   )r(   rt   rw   r9   rp   )rC   rJ   r(   rt   rw   r&   rp   )r   r   r   r   r   r   ry   V  s    z-ConfigPrintingNewPrinterDialog._do_change_ppd)rm   	signaturec             C   s   d S )Nr   )r   r   r   r   DialogCanceledZ  s    z-ConfigPrintingNewPrinterDialog.DialogCanceledr5   c             C   s   d S )Nr   )r   rt   r   r   r   PrinterAdded_  s    z+ConfigPrintingNewPrinterDialog.PrinterAddedZsbc             C   s   d S )Nr   )r   rt   ppd_has_changedr   r   r   PrinterModifiedd  s    z.ConfigPrintingNewPrinterDialog.PrinterModifiedza(s)c             C   s   d S )Nr   )r   r*   r   r   r   DriverDownloadCheckedi  s    z4ConfigPrintingNewPrinterDialog.DriverDownloadCheckedc             C   s0   t d|   tj  | j  | j  | j  d S )Nz%s: dialog canceled)r   r,   rK   r|   remove_handlesremove_from_connection)r   rS   r   r   r   rF   n  s
    z1ConfigPrintingNewPrinterDialog.on_dialog_canceledc             C   s2   t d|   tj  | j| | j  | j  d S )Nz%s: printer added)r   r,   rK   r}   r   r   )r   rS   rt   r   r   r   rg   u  s
    
z/ConfigPrintingNewPrinterDialog.on_printer_addedc             C   s4   t d|   tj  | j|| | j  | j  d S )Nz%s: printer modified)r   r,   rK   ZPrinterModifedr   r   )r   rS   rt   r~   r   r   r   rh   |  s
    z2ConfigPrintingNewPrinterDialog.on_printer_modifiedc             C   s2   t d|   tj  | j| | j  | j  d S )Nz%s: driver download checked)r   r,   rK   r   r   r   )r   rS   r*   r   r   r   rG     s
    
z9ConfigPrintingNewPrinterDialog.on_driver_download_checkedc             C   s    x| j D ]}| jj| qW d S )N)rH   rC   r4   )r   rP   r   r   r   r     s    z-ConfigPrintingNewPrinterDialog.remove_handles)N)r"   r#   r$   r
   r3   rb   rc   methodCONFIG_NEWPRINTERDIALOG_IFACErq   rs   rv   ru   rx   ry   signalr|   r}   r   r   rF   rg   rh   rG   r   r   r   r   r   r`      s0   
r`   c               @   sN   e Zd Zdd Zejjeddddd Zejj	edddd	 Z
d
d ZdS )%ConfigPrintingPrinterPropertiesDialogc             C   sx   t jjt|d}t jjj| ||d tj | _| jjj	d | jj
d| j}|| _| jj| | jjj	d tj  d S )N)ra   )rl   object_pathFzdialog-closed)rb   rc   rd   re   rf   r
   printerpropertiesPrinterPropertiesDialogrC   rE   r0   on_dialog_closedclosed_handleZshowr,   r-   )r   ra   rk   rp   rt   rl   rP   r   r   r   r
     s    
z.ConfigPrintingPrinterPropertiesDialog.__init__r8   )rm   rn   ro   c             C   s   t d | jj S )NzPrinting test page)r   rC   ZprintTestPage)r   r   r   r   PrintTestPage  s    z3ConfigPrintingPrinterPropertiesDialog.PrintTestPage)rm   r{   c             C   s   d S )Nr   )r   r   r   r   Finished  s    z.ConfigPrintingPrinterPropertiesDialog.Finishedc             C   s2   |j   tj  | j  | jj| j | j  d S )N)rO   r,   rK   r   rC   r4   r   r   )r   rC   r   r   r   r     s
    z6ConfigPrintingPrinterPropertiesDialog.on_dialog_closedN)r"   r#   r$   r
   rb   rc   r   $CONFIG_PRINTERPROPERTIESDIALOG_IFACEr   r   r   r   r   r   r   r   r     s   r   c               @   sV   e Zd Zdd Zdd Zejjeddddd Z	ejj
edd	d
d Zdd ZdS )ConfigPrintingJobAppletc             C   s   t jjt|d}t jjj| ||d tj  tj	t j
 ddd| _| jjd tj  | jjd| j}|| _d| _tj  td|   d S )N)ra   )rl   r   T)ra   ZappletZmy_jobsFZfinishedz+%s)rb   rc   rd   re   rf   r
   r   threads_enter	jobviewerZ	JobViewerZ	SystemBus	jobappletZset_process_pendingthreads_leaver0   on_jobapplet_finishedfinished_handlehas_finishedr,   r-   r   )r   ra   rk   rl   rP   r   r   r   r
     s    
z ConfigPrintingJobApplet.__init__c             C   s   t d|   d S )Nz-%s)r   )r   r   r   r   r3     s    zConfigPrintingJobApplet.__del__r8   )rm   rn   ro   c             C   s   | j s| jj  d S )N)r   r   Zcleanup)r   r   r   r   Quit  s    zConfigPrintingJobApplet.Quit)rm   r{   c             C   s   d S )Nr   )r   r   r   r   r     s    z ConfigPrintingJobApplet.Finishedc             C   s0   | j   tj  d| _| jj| j | j  d S )NT)r   r,   rK   r   r   r4   r   r   )r   r   r   r   r   r     s
    z-ConfigPrintingJobApplet.on_jobapplet_finishedN)r"   r#   r$   r
   r3   rb   rc   r   CONFIG_JOBVIEWER_IFACEr   r   r   r   r   r   r   r   r     s   r   c               @   s   e Zd Zdd Zdd Zejjeddddd	 Z	ejjed
dddd Z
ejjeddddd Zejjedddddd Zejjeddddd Zejjedddddd ZdS ) ConfigPrintingc             C   sf   t j | _t jjt| jd}t jjj| |t t	j
 | _d| _d | _d | _d | _tjtjd | _d S )N)ra   r   )rb   
SessionBusra   rc   rd   re   rf   r
   CONFIG_PATH	asyncconnZ
Connectionr   _pathn
_jobapplet_jobappletpathr   localeZ	getlocaleLC_MESSAGESr   )r   rl   r   r   r   r
     s    

zConfigPrinting.__init__c             C   s   | j j  d S )N)r   rO   )r   r   r   r   rO     s    zConfigPrinting.destroyr8   r5   )rm   rn   ro   c             C   s8   |  j d7  _ dt| j f }t| j|| j tj  |S )N   z%s/NewPrinterDialog/%s)r   r   r`   ra   r   r,   alive)r   rk   r   r   r   NewPrinterDialog  s    zConfigPrinting.NewPrinterDialogrr   c             C   s8   |  j d7  _ dt| j f }t| j||| tj  |S )Nr   z%s/PrinterPropertiesDialog/%s)r   r   r   ra   r,   r   )r   rp   rt   rk   r   r   r   r     s
    z&ConfigPrinting.PrinterPropertiesDialogc             C   sH   | j d ks| j jrB|  jd7  _dt| jf }t| j|| _ || _| jS )Nr   z%s/JobApplet/%s)r   r   r   r   r   ra   r   )r   rk   r   r   r   	JobApplet  s    zConfigPrinting.JobAppletZsssza(ss)r   r   )rm   rn   ro   Zasync_callbacksc             C   s    t |||| j| jd || d S )Nr   )r%   r   r   )r   r&   r'   r(   r   r   r   r   r   GetBestDrivers  s    zConfigPrinting.GetBestDriversasc             C   s   t j|}tj|S )N)cupsZPPDr   ZmissingExecutables)r   Zppd_filenamerw   r   r   r   MissingExecutables  s    
z!ConfigPrinting.MissingExecutablesz	a{sa{ss}}Zaasc             C   s   t ||| d S )N)rT   )r   rU   r   r   r   r   r   GroupPhysicalDevices  s    z#ConfigPrinting.GroupPhysicalDevicesN)r   r   )r   r   )r"   r#   r$   r
   rO   rb   rc   r   CONFIG_IFACEr   r   r   r   r   r   r   r   r   r   r     s    	
r   c        	         s  t tjdkrDtjd } d}t tjdkrPtjd dkrPtjd }ntd d S ddlm} tj }|jt	t
}tj|t}|j }t| |jt	|}tj|t}tj  d fd	d
	}d fdd	}|jd|dd |jd|dd |jd| |  j  d S )N   r8         z--devidzDevice URI requiredr   )r   c                s   t d|    j  d S )Nz%s: Dialog canceled)printquit)rk   )loopr   r   on_canceled'  s    z!_client_demo.<locals>.on_canceledc                s   t d|| f   j  d S )Nz%s: Printer '%s' added)r   r   )rt   rk   )r   r   r   on_added+  s    z_client_demo.<locals>.on_addedr|   rk   )Zpath_keywordr}   )N)N)rR   sysargvr   gi.repositoryr   rb   r   Z
get_objectre   r   Z	Interfacer   r   r   r   r   ZMainLoopZconnect_to_signalrq   r   )	r(   r&   r   ra   rS   Zifacerk   r   r   r   )r   r   _client_demo  s2    
r   __main__)Zdomain	localedirr8   )DBusGMainLoopT)Zset_as_defaultFr   z--debugz--clientzService running...)Zkillfunc)FZgiZdbus.servicerb   r   r   r   Zrequire_versionr   r   r   debugr   configr   r   rY   r   Z	killtimerrA   r\   ri   r   Zrequirere   r   r   r   r   r   r.   r,   Zset_prgnamer   r%   rT   rc   rf   r`   r   r   r   r   r"   Z	ppdippstrgettextinstallZPACKAGEr   r   	setlocaleLC_ALLrJ   Zthreads_initZ	dbus.glibr   Zclient_demorR   r   ZoptZset_debuggingZset_debugprint_fnr   exitZ	KillTimerZ	main_quitcpr   mainr   rO   r   r   r   r   <module>   s   

" 5n#B&





