3
ZX             (   @   s  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yejdd d dl	m
Z
 W n   dZ
Y nX ejdd d dl	mZ y@ejd	d
 d dl	mZ ejdd
 d dl	mZ ejej W n@ ek
r Z z"ede ed ejd W Y ddZ[X nX dd Zeejdkr@ejd dkr@e  ejd  d dlZejd ejej d dlZyejejd W n0 ejk
r   dejd< ejejd Y nX d dlZej e j!e j"d d dl#Z#d dl	m$Z$ d dl	m%Z% d dl&m'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l0Z0d dl1Z1d dl2Z2d dl2T d dl3Z3d dl4m5Z5 d dl6T d dl7T d dl8Z8d dl9Z9d dl9m:Z:m;Z; d dl<Z<d dl=Z=e=j  e j>Z?ej@jAe?dZBej@jCe? dZDdZEe%jFd  d!d" ZGG d#d$ d$ZHG d%d& d&eHZIG d'd( d(eHZJG d)d* d*e'ZKd+d, ZLeMd-krd dlNZNy&eNjOejdd dd.d/d0g\ZPZQW n( eNjRk
r   e  ejd Y nX dZSxPePD ]H\ZTZUeTd1kreVd2 e#jWeX neTd3kreUZSeTd4kreYeUZEqW eLeS dS )5    NPolkitz1.0)r   F	GdkPixbufz2.0)r   Gdkz3.0)r   Gtk)r   zsystem-config-printer:z?This is a graphical application and requires DISPLAY to be set.   c               C   s   t d d S )Na*  
This is system-config-printer, a CUPS server configuration program.

Options:

  --debug                 Enable debugging output.
  --show-jobs <printer>   Show the print queue for <printer>
  --embedded              Enable to start in Embedded mode.
   --help                  Show this message.
)print r   r   9/usr/share/system-config-printer/system-config-printer.py	show_help2   s    r
   z--helpz1.9.46 CLC_ALL)domain	localedir)GObject)GLib)GtkGUI)*)ServerSettings)busyreadyzicons/zsystem-config-printerc              C   s   t j } | d dkrdS | S )Nr   /	localhost)cups	getServer)hostr   r   r	   CUPS_server_hostnamen   s    r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )ServiceStartc             C   s(   t j }|j| j| j}t j||}|S )N)dbusZ	SystemBusZ
get_objectNAMEPATHZ	Interface)selfZifaceZbusobjproxyr   r   r	   
_get_ifacev   s    zServiceStart._get_ifacec          	   C   s(   y| j tj}|j }W n
   dS dS )NFT)r$   r   ZINTROSPECTABLE_IFACEZ
Introspect)r!   r#   Z
introspectr   r   r	   	can_start|   s    zServiceStart.can_startc             C   s   | j | j}| j||| d S )N)r$   IFACE_start)r!   reply_handlererror_handlerr#   r   r   r	   start   s    zServiceStart.startN)__name__
__module____qualname__r$   r%   r*   r   r   r   r	   r   t   s   r   c               @   s    e Zd ZdZdZdZdd ZdS )SysVServiceStartz!org.fedoraproject.Config.ServiceszQ/org/fedoraproject/Config/Services/ServiceHerders/SysVServiceHerder/Services/cupsz-org.fedoraproject.Config.Services.SysVServicec             C   s   |j ||d d S )N)r(   r)   )r*   )r!   r#   r(   r)   r   r   r	   r'      s    zSysVServiceStart._startN)r+   r,   r-   r   r    r&   r'   r   r   r   r	   r.      s   r.   c               @   s$   e Zd ZdZdZdZdZdd ZdS )SystemDServiceStartzorg.freedesktop.systemd1z/org/freedesktop/systemd1z org.freedesktop.systemd1.Managerzorg.cups.cupsd.servicec             C   s   |j | jd||d d S )NZfail)r(   r)   )Z	StartUnitCUPS_SERVICE)r!   r#   r(   r)   r   r   r	   r'      s    
zSystemDServiceStart._startN)r+   r,   r-   r   r    r&   r0   r'   r   r   r   r	   r/      s
   r/   c            	       s  e Zd ZejedejedejedejediZ	dZ
dZdZ f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dd)d*Zd+d, Zd-d. Zd/d0 Z d1d2 Z!d3d4 Z"dd6d7Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'd@dA Z(ddBdCZ)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfdg Z;dhdi Z<djdk Z=dldm Z>dndo Z?dpdq Z@drds ZAddtduZBdvdw ZCdxdy ZDdzd{ ZEdd|d}ZFd~d ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdddZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZX  ZYS )GUIZIdleZ
ProcessingZBusyZStoppedr   r      c          '      s	  t t| j  y tjtj| _tjtj| _W nF   t	  dt
jd< tjtjd tjtj| _tjtj| _Y nX i | _tj | _tj | _tj | _d | _d | _t| jf| _d | _t | _d| _| jddddd	d
ddddddddgdgddddgdddgdddgddgd tjd! t rz| j!j"  | j!j# d" }t$j%j&t }t$j'j(| j!| |j)| | j!j*| |j+  || _!| j,j-d#| j. t$j/j0d$ d%}d | _1t2ryt2j3j4|d d | _1W n t5j6k
r   Y nX t$j7 | _8| j1d k	r| j1j-d&| j9 | j8j-d'| j9 | j:j;| j8ddd( t$j<d)d*}|j=d+t$j>t?d,d t?d-| j@fd.t$jAt?d/d t?d0| jBfd1t$jCt?d2d d | jDfd3t$jEt?d4d d | jFfd5t$jGd d d | jHfg |j=d6d t?d7d d | jIfd8t$jJt?d9d:d | jKfd;t$jLd d d | jMfd<t$jNt?d=d d | jOfd>t$jPd d d | jQfd?t$jEt?d@d d | jRfdAt$jSt?dBd d | jTfg |jUdCd t?dDd d | jVfdEd t?dFd d | jWfg |jXdGd t?dHfdId t?dJfdKd t?dLfdMd t?dNfgdO| jY x|jZ D ]}|j[d qW x"dqD ]}|j\|}|j[dP qW t$j] | _^| j^j_|dr | j^j`dQ | j^ja  | j!jb| j^jc  t$jd | _e| jejft?dR | jejgdS | jejhdP t$ji }| j^j\dT}|jj }| j^j\dU}|jj }	|jk  |	jk  |jl|d"dOd"dO |jl|	d"dOdOdV | jejm| | jej-dW| jD | jnj)| je | jnj)t$jo  t$jp | _q| jqjft?dX | jqjgdY | jqj-dW| jr | jnj)| jq | jnj+  t$ji }
xndsD ]f}|dZkrt$jsjtt?d[}|j[dP || _un"|st$jv }n|j\|}|jj }|jk  |
jw| qbW | jxjy|
 t$ji }x2dtD ]*}|j\|}|jj }|jk  |jw| qW | jujy| t$ji | _zxDduD ]<}|sDt$jv }n|j\|}|jj }|jk  | jzjw| q0W | j{jy| jz g | _|t}j~  | _}|j-d\| j |j-d]| j |j-d^| j | jjtj | jjtj | jjgd$ ytj| j!| _W n tk
r   d | _Y nX | jjd_| _| j  d| _dG| _t$ji }x*dvD ]"}|j\|}|jj }|jw| qDW |j+  | jj| t
jjd`rt | _nt | _t$jtjtjtt| _| jj| j | jjda | jjdb | jjdO | jjdV | jjdc | jjdP | jj-dd| j | jj-de| j | jj-df| j | jj-dg| j | jj-dh| j | j| j | jjtjjt$jj&did"d"gtjj | jj-dj| j | jj-dW| j | jj-dW| j@ | jj-dW| jD tj | _| jj-dk| j | j  y| j  W nH tjk
	rB } z(|j\}d | _| j  t|| j! W Y d d }~X nX | j  t| jdlk	rl| j!jdmdn n>t| jdVk	r| j!jdodn nt| jdOk	r| j!jdodp | j!jk  d S )wNr   r   r   FPrintersWindowhboxMenuBarZview_area_vboxZview_area_scrolledwindowdests_notebookdests_iconviewbtnAddFirstPrinterbtnStartServicebtnConnectNoServicestatusbarMaintoolbarserver_menubar_itemprinter_menubar_itemview_discovered_printersAboutDialogConnectDialogchkEncryptedcmbServername
btnConnectConnectingDialoglblConnectingpbarConnectingNewPrinterNameentDuplicateNamebtnDuplicateOkInstallDialog
lblInstall)r3   r?   r@   rD   rG   rJ   )r   r   zdelete-eventprinterz,org.opensuse.cupspkhelper.mechanism.all-editznotify::allowedznotify::permission   ZPrinterManagerActionGroup)nameconnect-to-serverz_Connect...zChoose a different CUPS serverserver-settingsz_Settings...zAdjust server settingsnew-printer_Printer	new-classZ_Classquitrename-printerZ_Renameduplicate-printerZ
_Duplicatez<Ctrl>ddelete-printerset-default-printerzSet As De_faultedit-printercreate-classz_Create classview-print-queuezView Print _Queueenable-printerZE_nabledshare-printerZ_Sharedfilter-nameNamefilter-descriptionZDescriptionfilter-locationZLocationfilter-manufacturerzManufacturer / Modelr   Ta  
<ui>
 <accelerator action="connect-to-server"/>
 <accelerator action="server-settings"/>
 <accelerator action="new-printer"/>
 <accelerator action="new-class"/>
 <accelerator action="quit"/>

 <accelerator action="rename-printer"/>
 <accelerator action="duplicate-printer"/>
 <accelerator action="delete-printer"/>
 <accelerator action="set-default-printer"/>
 <accelerator action="edit-printer"/>
 <accelerator action="create-class"/>
 <accelerator action="view-print-queue"/>
 <accelerator action="enable-printer"/>
 <accelerator action="share-printer"/>
 <accelerator action="filter-name"/>
 <accelerator action="filter-description"/>
 <accelerator action="filter-location"/>
 <accelerator action="filter-manufacturer"/>
</ui>
ZAddzlist-addz/new-printerz
/new-classr2   clickedZRefreshzview-refreshnewZ_Newzprinter-addedzprinter-modifiedzdialog-canceled
Connectionz/usr/lib/systemd         zkey-press-eventzitem-activatedzselection-changedzbutton-press-eventz
popup-menuqueuezdrag-data-getzdialog-closed   i  iY  i     )rO   rT   r[   r^   r`   ra   rb   )rO   rP   Nrd   NrT   )rQ   rS   )rY   rV   rU   rW   Nr\   r]   rZ   rX   Nr[   )r^   r`   ra   rb   )superr   __init__localeZ	getlocaleLC_MESSAGESZlanguageLC_CTYPEencodingnonfatalExceptionosenviron	setlocaler   printersr   r   connect_servergetEncryptionconnect_encryptgetUserconnect_usermonitorpopulateList_timersetserversserver_is_publishingchangedupdating_widgetsZ
getWidgetsconfigPACKAGEPlugWindowIdr3   hideZget_childrenr   ZPlugrd   	Containerremoveaddset_transient_forshow_allrD   connecton_connectingdialog_deleteZWindowZset_default_icon_nameedit_permissionr   Z
PermissionZnew_syncr   GErrorZ
LockButtonunlock_buttonpolkit_permission_changedr4   Z
pack_startZActionGroupZadd_actionsZSTOCK_CONNECT_on_connect_activateZSTOCK_PREFERENCESon_server_settings_activateZSTOCK_PRINTon_new_printer_activateZSTOCK_DND_MULTIPLEon_new_class_activateZ
STOCK_QUITon_quit_activateon_rename_activateZ
STOCK_COPYon_duplicate_activateZSTOCK_DELETEon_delete_activateZ
STOCK_HOMEon_set_as_default_activateZSTOCK_PROPERTIESon_edit_activateon_create_class_activateZ
STOCK_FINDon_view_print_queue_activateZadd_toggle_actionson_enabled_activateon_shared_activateZadd_radio_actionson_filter_criterion_changedZlist_actionsset_sensitive
get_actionZ	UIManager
ui_managerZinsert_action_groupZadd_ui_from_stringZensure_updateZadd_accel_groupZget_accel_groupZMenuToolButtonbtnNewZ	set_labelZset_icon_nameZset_is_importantZMenuZcreate_menu_itemshowZattachZset_menur;   SeparatorToolItemZ
ToolButtonrefreshbuttonon_btnRefresh_clickedZMenuItemZnew_with_mnemonicmenuItemNewZSeparatorMenuItemappendr<   Zset_submenuprinter_context_menur=   
jobviewers
newprinterZNewPrinterGUInewPrinterGUIon_new_printer_addedon_printer_modifiedon_new_printer_not_addedr?   Zset_program_nameZset_versionVERSIONauthconnre   RuntimeErrorr:   Zget_context_idstatus_context_idsetup_toolbar_for_search_entrycurrent_filter_textcurrent_filter_modesearch_entryZset_drop_down_menupathexistsr/   servicestartr.   	ListStorer   ZTYPE_PYOBJECTr   Pixbufstrmainlistr6   	set_modelZset_column_spacingZset_row_spacingZset_pixbuf_columnZset_text_columnZset_tooltip_columnZset_has_tooltipdests_iconview_key_press_eventdests_iconview_item_activated dests_iconview_selection_changed!dests_iconview_button_press_eventdests_iconview_popup_menuZenable_model_drag_sourcer   ZModifierTypeZBUTTON1_MASKZTargetEntryZ
DragActionZCOPYdests_iconview_drag_data_getr8   on_start_service_clickedr9   r7   printerpropertiesZPrinterPropertiesDialogpropertiesDlgon_properties_dialog_closedZconnect_signalspopulateList	HTTPErrorargsshow_HTTP_ErrorsetConnectedlenZset_default_size)r!   Zvbox
PlugWindowZedit_actionZprinter_manager_action_groupactionactZnewmenuZnewprinteritemZnewclassitemZserver_context_menuaction_nameitemZnew_menuZnpZmenues)	__class__r   r	   rn      s2   




















     





    





         

  



zGUI.__init__c             C   s   | j j }|j }xf|d k	rx|j|d}||krl|j|}| j j|ddd | j j|d dd | j j| P |j|}qW |d krt	d S )Nr2   Tg      ?F)r   cellstart_editing)
r6   	get_modelget_iter_first	get_valueget_pathscroll_to_path
set_cursorZitem_activated	iter_nextr   )r!   ri   modeliterrN   r   r   r   r	   display_properties_dialog_for  s    



z!GUI.display_properties_dialog_forc             C   sx   t j }|jd | jj|d | jj|dd t | _| jjd| j	 t j
 }|j| j | jj|d | jj  d S )NFr   expandTsearchrl   rl   )r   r   Zset_drawr;   insertZchild_set_propertyToolbarSearchEntryr   r   on_search_entry_searchZToolItemr   r   )r!   Z	separatorZ	tool_itemr   r   r	   r   ,  s    
z"GUI.setup_toolbar_for_search_entryc             C   s   || _ | j  d S )N)r   r   )r!   UNUSEDtextr   r   r	   r   ;  s    zGUI.on_search_entry_searchc             C   s   |j  | _| j  d S )N)Zget_namer   r   )r!   r   Zselected_actionr   r   r	   r   ?  s    
zGUI.on_filter_criterion_changedc       	      C   s   |j  }|j|}|j|d}|j|d}| j  y| jj|| j| j| jd W n t	j
k
r } zD|j\}}| j  t||| j |t	jkrd | _	| j  | j  d S d }~X n& tk
r   | j  | jj  d S X d S )Nr2   r   )r   
encryptionparent)r   get_iterr   desensitise_main_window_widgetsr   r   rx   rz   r3   r   IPPErrorr   sensitise_main_window_widgetsshow_IPP_ErrorIPP_SERVICE_UNAVAILABLEr   r   r   r}   update)	r!   iconviewr   r   r   rN   objectr   mr   r   r	   r   C  s,    



z!GUI.dests_iconview_item_activatedc             C   s   | j   d S )N)r   )r!   r"   r   r   r	   r   _  s    zGUI.on_properties_dialog_closedc             C   s^  d| _ | jj }|r|j }nd}|s*d S |j }d}d}d}d}d}	|j }
xX|D ]P}|
j|}|
j|d}|
j|d}|jrd}|j	rd}nd}|j
rd}qTd}	qTW t|}| jjdj|dk | jjdj|dk | jjdj|dko|  tj j }|dks$|d kr*| j|kr*d}nd}| jjd	j| | jjd
}|j|dko^|  x:|j D ].}t|tjrl|j|dko|o| qlW |j|p|  | jjd}|j|dko|  x:|j D ].}t|tjr|j|dko|o|	 qW |j|p|	  | jjdj|dko:|  | jjdj|dk d| _ d S )NTFr   r2   z/edit-printerr   z/duplicate-printerz/rename-printerz/set-default-printerz/enable-printerz/share-printerz/delete-printerz/create-class)r   r   get_permissionget_allowedget_selected_itemsr   r   r   
discoveredenabledZ	is_sharedr   r   r   r   userdefaultUserDefaultPrintergetdefault_printerZget_proxies
isinstancer   ZCheckMenuItemZset_inconsistent
set_active)r!   r   
permissioncan_editpathsZany_disabledZany_enabledZany_discoveredZ
any_sharedZany_unsharedr   r   r   r   rN   nuserdefZset_default_sensitivityr   widgetr   r   r	   r   b  sl    




  z$GUI.dests_iconview_selection_changedc             C   s   | j jd d d d d dd d S )Nr   )r   popup_for_device)r!   r   r   r   r	   r     s    zGUI.dests_iconview_popup_menuc             C   s   |j dkr|jt|jt|j}|j }|d kr<|j  nN||kr|j  |j| |j }x|D ]}t	|t
jkrdP qdW |j||d | jjd d d d d |j |j dS )Nr   F)buttonZget_path_at_posintxyr   unselect_allselect_path	get_cellstyper   CellRendererTextr   r   r  time)r!   r   eventZ
click_pathr  cellsr   r   r   r	   r     s"    



z%GUI.dests_iconview_button_press_eventc             C   s   t j }|jtjks,|jtjks,|jtjkrP|j |@ dkrP| jj	dj
  dS |jtjkr|j |@ dkr| jj	dj
  dS dS )Nr   z/delete-printerTz/rename-printerF)r   Z accelerator_get_default_mod_maskZkeyvalr   ZKEY_BackSpaceZ
KEY_DeleteZKEY_KP_DeleteZ	get_stater   r   ZactivateZKEY_F2)r!   r   r  Z	modifiersr   r   r	   r     s    z"GUI.dests_iconview_key_press_eventc       
      C   sj   |dkr`|j  }|j }d}x&|D ]}	||j|j|	dd 7 }q"W t|dkrf|jdd| nt  d S )Nr   r   r2   
ri      )r   r   r   r   r   r   rs   )
r!   r   contextZselection_datainfoZ	timestampr   r  Zselected_printer_namesr   r   r   r	   r     s    
z GUI.dests_iconview_drag_data_getc             C   sh   y*t | j| j| jd| _| jjd| j W n8 tjtj	fk
rF   d S  t
k
rb   | jj  Y nX d S )N)r   r   r   zproblems-clicked)r   rx   rz   r3   ZserverSettingsr   on_problems_button_clickedr   r   r   r   r}   r   )r!   menuitemr   r   r	   r     s    zGUI.on_server_settings_activatec             C   sj  t | j}t }| jjtd|  |r6td| }ntd}| jj| j| x| j	| j
fD ]}|j| q\W x"dD ]}| jj|}|j| qtW |r*| jr| jj  tjd| j| jd| _| jjd	| j | jjd
| j | jjd| j | jjd| j | jjd| j tj| jj | jj| j |rZ| jj rL| jj | j! n| jj d  n| jj d  d S )NzPrinters - %szConnected to %szNot connected/server-settings/new-printer
/new-classF)Zmonitor_jobsr   r   zprinter-addedzprinter-eventzprinter-removedzcups-connection-errorzcups-connection-recovered)r  r   r!  )"boolr   r   r3   Z	set_titler   r:   pushr   r   r   r   r   r   r}   cleanupZMonitorrx   rz   r   printer_addedprinter_eventprinter_removedcups_connection_errorcups_connection_recoveredr   idle_addZrefreshr   Zset_monitorZ_using_polkitr   Zset_permissionr   )r!   Z	connectedr   Z
status_msgr  r   r   r   r   r	   r     sF    
 
zGUI.setConnectedc             C   s   | j j }|r|j }nd}| jj| | jj| x"dD ]}| jj|}|j| q:W |rj| j| j	 n$x"dD ]}| jj|}|jd qpW d S )NT/new-printer
/new-class/rename-printer/duplicate-printer/delete-printer/edit-printer/create-class/enable-printer/share-printerF)r+  r,  )r-  r.  r/  r0  r1  r2  r3  )
r   r   r   r   r   r7   r   r   r   r6   )r!   r  r   r  r  r   r   r   r   r	   r      s*    

     zGUI.polkit_permission_changedc             C   s"   | j jd  t| j }|j  |S )N)r   discardlistsort)r!   Zknown_serversr   r   r	   
getServers;  s    
zGUI.getServersTc       1   6      s  t   jj }jj }x,|D ]$}|j|}|j|d} j| q W jr
d}jj| jj	t
d ytjj_jj _W nV tjk
r } z8|j\}}	t||	j i _d _|tjkrd}W Y d d }~X nX jj  jjd |rd _ni _d _x(jj D ]\}}
jj|
j  q"W tj j }g }g }g }g }jjd}|jd d j}tj dkri }t!j"j t!j#}j$dkrx.|j% D ]"}|j&|d k	r|| ||< qW n҈j$d	kr x|j D ](\}}
|j&|
j'd k	r|| ||< qW nj$d
krdx|j D ](\}}
|j&|
j(d k	r6|| ||< q6W nJj$dkrx<|j D ](\}}
|j&|
j)d k	rz|| ||< qzW nt*  |}j+j, si }x&|j D ]\}}
|
j-s|
||< qW |}x`t.|j D ]P\}}
|
j/r,|
j0r |j1| n
|j1| n|
j0r@|j1| n
|j1| qW |j2  |j2  |j2  |j2  j3j4  t
ddft
ddft
ddft
ddft
ddft
ddft
ddft
ddfd}t5j6j7 }xL||||fD ]:}|sqx&|D ]}d}|| }|j-r0|j0r*d}nd}n|j0r>d}nt8j9j:|j;\}}|d=krr|j<drld}nd}nf|dkrd}nV|d krd!}nF|d>krd%}n6|j;j<d&rd%}n"|j;j<d'rd%}n|d(krd}|| \}}t5j=t5j>j?\}}}y|j@||d} W n tAjBk
r   d } xFtCd)gD ]:}!ytDjEjFd*|!|f } P W n tAjBk
rb   Y nX q,W | d kry|j@d|d} W n.   tDjEjGtDjHjIdd+||} | jJd Y nX Y nX d }"d }#|jkrd,}"n||krd-}"|#sr|jK}$|$jd.g }%d }&xX|%D ]P}'|'d/krP |'d0kr(d1}#qtLjM|jN|'}(|&d krF|(}&n|(|&kr|(}&qW |&rr|&jO })|&jP|) }#|# r|jQ rd1}#|jRr| jS }*|*jJd | jT|*dd| jU | jV ddd2d2tDjWjXd3 |*} |"r\t5j=t5j>j?\}}}yL|j@|"|d d}+| jS }*|+jT|*dd|+jU |+jV ddd2d2tDjWjXd4 |*} W n$ tAjBk
rZ   tYd5|"  Y nX |#rt5j=t5j>j?\}}}yl|j@|#|d d},| jS }*|,jT|*|*jU d |*jV d |,jU |,jV |*jU d |*jV d d2d2tDjWjXd4 |*} W n$ tAjBk
r   tYd5|#  Y nX j3j1|| ||gd6 qW qW jj } fd7d8}-|jZ|-d  j[}.jr|j  rj3j\  rj]}.ndj^}.j_d9kpj_d d:k}/d }0|/rj`ja }/|/st
d;}0nt
d<}0jbjc|/ jbjd|0 jejf|. d S )?Nr2   Fzobtaining queue detailsTz/delete-printer)Zlabelr   zfilter-namezfilter-descriptionzfilter-locationzfilter-manufacturerzNetwork printer (discovered)zi-network-printerzNetwork class (discovered)ZPrinterrL   ZFaxZClasszNetwork printerzNetwork print share)zdiscovered-printerzdiscovered-classzlocal-printerz	local-faxzlocal-classzipp-printerzsmb-printerznetwork-printerzlocal-printerzdiscovered-classzdiscovered-printerzlocal-classippippsz//localhostzipp-printerZsmbzsmb-printerZhpfaxz	local-faxsocketlpddnssdznetwork-printerzhp:/net/zhpfax:/net/Zimplicitclasszicons/z%s%s.pngr  zemblem-defaultzemblem-favoritezprinter-state-reasonsZnoneZpausedzmedia-playback-pauseg      ?      zNo %s icon available)rowc                s$   | j |d}| kr jj| d S )Nr2   )r   r6   r  )r   r   r   r   rN   )selected_printersr!   r   r	   maybe_selectL  s    z&GUI.populateList.<locals>.maybe_selectr   r   zService framework not availablez%Cannot start service on remote server)r8  r9  )r:  r;  r<  )gr   r6   r   r   r   r   r   r   Z_set_prompt_allowed_begin_operationr   cupshelpersZgetPrintersrw   Z
getDefaultr  r   r   r   r3   r   _end_operationitemsr   r   r   r  r  r   r   Zset_propertiesr   r   recompileIr   keysr   r  locationZmake_and_modelrs   r>   
get_activer   r5  remoteis_classr   r6  r   clearr   Z	IconThemeZget_defaulturllibparseZ	splittypeZ
device_uri
startswithZicon_size_lookupZIconSizeZDIALOGZ	load_iconr   r   iconpathr   r   Znew_from_filerd   Z
ColorspaceZRGBZfillother_attributesstatereasonZStateReasonrN   Z	get_levelZ
LEVEL_ICONr   	rejectingcopyZ	compositeZ	get_widthZ
get_heightZ
InterpTypeZBILINEAR
debugprintforeachDESTS_PAGE_DESTSr   DESTS_PAGE_NO_PRINTERSDESTS_PAGE_NO_SERVICErx   r   r%   r8   r   Zset_tooltip_textr5   Zset_current_page)1r!   prompt_allowedr  r   r   r   rN   Zkill_connectionr   r   rL   r
  Zlocal_printersZlocal_classesZremote_printersZremote_classesZdelete_actionZprinters_setZprinters_subsetpatternZPRINTER_TYPEZthemerw   r  r   schemerestZtipZiconresultwhZpixbufpZ
def_emblemZemblemZattrsZreasonsZworst_reasonreasonrlevelrV  Zdefault_emblemZother_emblemrA  Zpager%   Ztooltip_textr   )r@  r!   r	   r   A  s   






  


 




















"



zGUI.populateListc             C   s    | j jt|j pddk d S )Nr   r   )rC   r   r   Zget_active_text)r!   r  r   r   r	   on_connect_servername_changedk  s    z!GUI.on_connect_servername_changedc             C   s  | j  }| jjr| jjj p"tj }tjt}| jj	| | jj
d x|D ]}| jj| qLW | jj  | jj j| | jjtj tjk | jj jd | jj  | jj| j | jj }| jj  |tjjkrd S | jj rtjtj ntjtj tj | _| jj j  }| j!j"t#d|  | j$j| j | j$j  t%j&d| j' || _(tj)| j( tj*d tj+ | _,t-j.| j/| jf| _0d S )Nr   Tz<i>Opening connection to %s</i>(   r   )1r7  r   rL   r   r   r   r   r   rB   r   Zset_entry_text_columnZappend_textr   Z	get_childset_textrA   r  ry   ZHTTP_ENCRYPT_ALWAYSZset_activates_defaultZ
grab_focusr@   r   r3   runr   ResponseTypeOKrK  ZsetEncryptionZHTTP_ENCRYPT_IF_REQUESTEDrz   get_textrE   
set_markupr   rD   r   timeout_addupdate_connecting_pbarrx   	setServersetUserr{   r|   _threadstart_new_threadr   connect_thread)r!   r  r   Zcurrent_serverZstoreserverresponseZ
servernamer   r   r	   r   n  sH    











zGUI.on_connect_activatec          
   C   s<   d}t j  z | jjds d}n
| jj  W d t j  X |S )NTZvisibleF)r   threads_enterrD   Zget_propertyrF   Zpulsethreads_leave)r!   retr   r   r	   rp    s    
zGUI.update_connecting_pbarc             C   s   | j | dS )NT)on_cancel_connect_clicked)r!   r  r  r   r   r	   r     s    
zGUI.on_connectingdialog_deletec             C   s   d| _ | jj  dS )z
        Stop connection to new server
        (Doesn't really stop but sets flag for the connecting thread to
        ignore the connection)
        N)ru  rD   r   )r!   r  r   r   r	   r{    s    zGUI.on_cancel_connect_clickedNc          *   C   s4  t j| j | jd dkrbyt j| j| jd}~W n. tk
rP   t jd Y n   t  Y nX yt	j|| j| jd}W n
 tk
r } zZ| j
tj krdS tj  z0| jj  d| _ | j  | j  td|| W dtj  X dS d}~X n t jk
rv } zf|j\}}| j
tj kr$dS tj  z0| jj  d| _ | j  | j  t||| W dtj  X dS d}~X n   t  Y nX | j
tj krdS tj  y$| jj  || _ | j  | j  W n^ t jk
r } z.|j\}d| _ | j  | j  t|| W Y dd}~X n   t  Y nX tj  dS )zV
        Open a connection to a new server. Is executed in a separate thread!
        r   r   )r   r   r   N)r   rr  r|   rx   re   rz   r   rq  rs   r   ru  rs  	get_identr   rx  rD   r   r   r   r   ry  r   r   r   r   )r!   r   Z
connectionr   r   r   r   r	   r     st    
 


 

 
zGUI.connectc             C   sN   d}xD|dkrHyt jd | jj  P W q tk
rD   |d7 }Y qX qW dS )z0Reconnect to CUPS after the server has reloaded.r      N)r  Zsleepr   Z_connectr   )r!   Zattemptr   r   r	   	reconnect  s    


zGUI.reconnectc             C   s   | j j  dS )zClose Connect dialogN)ZConnectWindowr   )r!   r  r   r   r	   on_btnCancelConnect_clicked  s    zGUI.on_btnCancelConnect_clickedc             C   sF   | j d kr:ytj| j| _ W n tk
r0   Y nX | j  | j  d S )N)r   r   re   r3   r   r   r   )r!   r  r   r   r	   r     s    
zGUI.on_btnRefresh_clickedc             C   s^   t j }|| jkr&|j  | j  d S t j| j| j|td| jtdtdtdtd	 d S )NzSet Default Printerz;Do you want to set this as the system-wide default printer?z'Set as the _system-wide default printerz"_Clear my personal default settingz#Set as my _personal default printer)	r   r  r  rN  r   ZUserDefaultPromptset_default_printerr   r3   )r!   rN   r
  r   r   r	   "set_system_or_user_default_printer)  s    
z&GUI.set_system_or_user_default_printerc             C   s&  | j | }d}| jjtd y|j }W n tjk
rj } z"|j\}t|| j | jj	  d S d }~X nD tj
k
r } z&|j\}}t||| j | jj	  d S d }~X nX | jj	  |r| j  y| j  W nP tjk
r  } z0|j\}d | _| j  | j  t|| j W Y d d }~X nX d S )NFzsetting default printer)rw   r   rB  r   setAsDefaultr   r   r   r3   rD  r   r   r~  r   r   )r!   rN   rL   reloadr   r   msgr   r   r	   r  >  s4    




zGUI.set_default_printerc             C   sr   | j rtj| j  d | _ | jr(| jj  x t| jdkrH| jd j  q*W | jj	  | j
j	  tj  | `| `d S )Nr   )r~   r   source_remover}   r$  r   r   Zon_delete_eventr   destroyr   r   	main_quitr   rw   )r!   r  r  r   r   r	   r   a  s    


zGUI.on_quit_activatec             C   s>   | j | jdd}t|dkr:ttdtd| jd dS dS )	Nr   )limitr   zCannot RenamezThere are queued jobs.)r   FT)rw   Z
jobsQueuedr   show_error_dialogr   r3   )r!   rN   Zjobsr   r   r	   is_rename_possibles  s    
zGUI.is_rename_possiblec             C   st   | j | jdd}t|dkrptj| jddtjjtjj	t
dd}|jt
d |j }|j  |tjjkrpdS dS )	z
        Renaming deletes job history. So if we have some completed jobs,
        inform the user and let him confirm the renaming.
        r   )r  r   TzRenaming will lose history)r   modaldestroy_with_parentmessage_typebuttonsr   z;Completed jobs will no longer be available for re-printing.F)rw   ZjobsPreservedr   r   MessageDialogr3   MessageTypeWARNINGButtonsTypeZ	OK_CANCELr   Zformat_secondary_textrj  r  rk  CANCEL)r!   rN   Zpreserved_jobsdialogr`  r   r   r	   rename_confirmed_by_user}  s    zGUI.rename_confirmed_by_userc             G   s  | j j }|d krd S |\}}}|d kr,d S t|tjkrt| j j }x|D ]}t|tjkrJP qJW t|tjkrtd S | j j }|j|}|j|d}	| j	|	sd S | j
|	sd S |jdd g }
|
j|jd| j |
j|jd| j |
| _g | _| j j||d d S )Nr2   editableTzediting-startedzediting-canceled)r6   Z
get_cursorr  r   r  r  r   r   r   r  r  set_propertyr   r   printer_name_edit_startprinter_name_edit_cancelrename_sigidsrename_entry_sigidsr   )r!   r   tupleresr   r   r  r   r   rN   Zidsr   r   r	   r     s:    











zGUI.on_rename_activatec             C   s   t dt|t|f  t|tjr|jd| j}| jj||f | j	j
 }|j|}|j|d}|jd| j||}| jj||f d S )Nz)editing-started with cell=%s, editable=%sr   r2   zediting-done)rW  reprr  r   ZEntryr   printer_name_editingr  r   r6   r   r   r   printer_name_editing_done)r!   r   r  r   idr   r   rN   r   r   r	   r    s    

zGUI.printer_name_edit_startc             C   sV   |j   }}|jdd}|jdd}|jdd}||krRtd|d   |j| d S )Nr   r   # zremoved disallowed character %sr   rl   )rm  replacerW  ri  )r!   entrynewnameZorignamer   r   r	   r    s    zGUI.printer_name_editingc             C   s   t t| |j }t d||f  z| j|| W d |jd |jdd x| jD ]}|j| qTW x| jD ]\}}|j| qnW X d S )Nzedited: %s -> %sFr  )	rW  r  rm  rename_printerstop_editingr  r  
disconnectr  )r!   r  r   rN   r  r  r"   r   r   r	   r    s    
zGUI.printer_name_editing_donec             C   sb   t dt|  |jd |jdd x| jD ]}|j| q.W x| jD ]\}}|j| qHW d S )Nzediting-canceled (%s)Tr  F)rW  r  r  r  r  r  r  )r!   r   r  r"   r   r   r	   r    s    
zGUI.printer_name_edit_cancelc          W      s   |j   j  krd S yjj|jjjd W nT tk
rF   Y nB tjk
r } z$|j	\}}t
||j j  d S d }~X nX j|sd S jjtd jjj}|s6y8jjjd j|sjjjd jj  d S W nF tjk
r4 } z&|j	\}}t
||j jj  d S d }~X nX j rjj  | rjjry|jj_jjjd W nv tjk
r } z|j	\}t|j W Y d d }~X n> tjk
r } z|j	\}}t
||j W Y d d }~X nX jj  j  d S jjs(jj  j  d S |syjjjd W nv tjk
rz } z|j	\}t|j W Y d d }~X n> tjk
r } z|j	\}}t
||j W Y d d }~X nX j|kr^d}yjjj }W nv tjk
r } z|j	\}t|j W Y d d }~X n> tjk
rN } z|j	\}}t
||j W Y d d }~X nX |r^j  yjj| W nv tjk
r } z|j	\}t|j W Y d d }~X n> tjk
r } z|j	\}}t
||j W Y d d }~X nX jj   fdd}	j  jj }
|
j|	d  d S )N)r   r   r   zrenaming printerFTc                s$   | j |d}| kr jj| d S )Nr2   )r   r6   r  )r   r   r   r   rN   )new_namer!   r   r	   select_new_printerP  s    z.GUI.rename_printer.<locals>.select_new_printer) lowerr   loadrx   rz   r3   r   r   r   r   r   r   r  rB  r   rL   rU  ZsetAcceptingrD  duplicate_printerr}   r   rN   r   r   r  r  r~  deletePrinterr6   r   rX  )r!   Zold_namer  r   r   rU  r  r   r  r  r   r   )r  r!   r	   r    s    









 



 
 
 

zGUI.rename_printerc             C   s0   || j j_g | j j_| j j| j jd| jd}|S )NT)Zsaveallr   )r   rL   rN   class_memberssave_printerr3   )r!   r  rz  r   r   r	   r  Z  s    


zGUI.duplicate_printerc       
      G   s  | j }|j }| j j }|j|d }|j|d}| jj| | jj| j	 | jj
 }| jj  |tjjkrpd S y| jj|| j| j| j	d W nT tk
r   Y nB tjk
r } z$|j\}}	t||	| j	 | j  d S d }~X nX | j| jj  | jj  d S )Nr   r2   )r   r   r   )r6   r   r   r   r   rH   ri  rG   r   r3   rj  r   r   rk  r  r   r  rx   rz   r   r   r   r   r   r   r  rm  r}   r   )
r!   r   r   r  r   r   rN   r`  r   r   r   r   r	   r   d  s2    



zGUI.on_duplicate_activatec             C   s\   |j  }|}|jdd}|jdd}|jdd}||krB|j| | jjtj| j| d S )Nr   r   r  r  )rm  r  ri  rI   r   r   ZcheckNPNamerw   )r!   r  r   Znew_textr   r   r	   on_entDuplicateName_changed  s    
zGUI.on_entDuplicateName_changedc             G   s   | j   d S )N)delete_selected_printer_queues)r!   r   r   r   r	   r     s    zGUI.on_delete_activatec             C   s  | j j }| j j }g }t|}|dkrz|j|d }|j|d}|j|d}|jrbtd| }ntd| }|j| n6td}x,|D ]$}	|j|	}|j|d}|j| qW t	j
| jddt	jjt	jj|d}
|
jtd	t	jjtd
t	jj |
jt	jj |
j }|
j  |t	jjkr d S y>x8|D ]0}| jjtd|  | jj| | jj  q(W W nH tjk
r } z(|j\}}| jj  t||| j W Y d d }~X nX | jj  d S )Nr   r   r2   zReally delete class '%s'?zReally delete printer '%s'?z$Really delete selected destinations?T)r   r  r  r  r  r   Z_CancelZ_Deletezdeleting printer %s) r6   r   r   r   r   r   rM  r   r   r   r  r3   r  r  r  NONEadd_buttonsrk  ZREJECTZACCEPTZset_default_responserj  r  r   rB  r  rD  r   r   r   r}   r   )r!   r  r   Z	to_deleter	  itrr"   rN   Zmessage_formatr   r  r`  r   r  r   r   r	   r    sN    






 z"GUI.delete_selected_printer_queuesc             C   s   | j r
d S |j }| j}|j }|j }g }x,|D ]$}|j|}|j|d}	|j|	 q2W x|D ]~}	| jj	t
d|	j  y|	j| W nJ tjk
r }
 z,|
j\}
}tj|
|| j | jj  P W Y d d }
~
X nX | jj  q`W | jj  d S )Nr   zmodifying printer %s)r   rK  r6   r   r   r   r   r   r   rB  r   rN   Z
setEnabledr   r   errordialogsr   r3   rD  r}   r   )r!   Ztoggle_actionenabler   r  r   rw   r   r  rL   r   r   r   r   r	   r     s,    




zGUI.on_enabled_activatec             C   sL  | j r
d S |j }| j}|j }|j }g }x,|D ]$}|j|}|j|d}	|j|	 q2W d}
x|D ]}	| jj	t
d|	j  y|	j| d}
W nH tjk
r } z*|j\}}t||| j | jj  P W Y d d }~X nX | jj  qdW |
o|r@| jd kr8y|	j  |	jd }|| _W n tjtfk
r6   Y nX | j  | j  d S )Nr   Fzmodifying printer %sTzserver-is-sharing-printers)r   rK  r6   r   r   r   r   r   r   rB  r   rN   Z	setSharedr   r   r   r3   rD  r   ZgetAttributesrS  KeyErroradvise_publishdefer_refresh)r!   r  Zsharer   r  r   rw   r   r  rL   Zsuccessr   r   rc  r   r   r	   r     sD    









zGUI.on_shared_activatec             C   s"   | j sttdtd| jd d S )NzPublish Shared PrinterszShared printers are not available to other people unless the 'Publish shared printers' option is enabled in the server settings.)r   )r   Zshow_info_dialogr   r3   )r!   r   r   r	   r    s    zGUI.advise_publishc             G   sX   | j }|j }|j }y|j|d }W n tk
r<   d S X |j|d}| j| d S )Nr   r2   )r6   r   r   r   
IndexErrorr   r  )r!   r   r   r  r   r   rN   r   r   r	   r     s    zGUI.on_set_as_default_activatec             G   s    | j j }| j| j |d  d S )Nr   )r6   r   r   )r!   r   r  r   r   r	   r   (  s    
zGUI.on_edit_activatec             C   s   | j j }g }| j j }x,|D ]$}|j|}|j|d}|j| qW | jjd| j| j	| j
dsn| jj  d S | jjj }| jjj }	|j }xF|d k	r|j|}
|j|d}|d |kr|	j| |j| |
}qW d S )Nr2   class)r   r   r   r   )r6   r   r   r   r   r   r   initrx   rz   r3   r}   r   ZtvNCNotMembersZtvNCMembersr   r   r  r   )r!   r   r  r  r   r   r   rN   Z	out_modelZin_modelnextdatar   r   r	   r   ,  s.    









zGUI.on_create_class_activatec       	      G   s   | j j }t|rtg }| j j }x,|D ]$}|j|}|j|d}|j| q&W tjd d d|| j	d}|j
d| j n"tjd d d| j	d}|j
d| j | jj| d S )Nr2   F)my_jobsspecific_destsr   finished)r  r   )r6   r   r   r   r   r   r   	jobviewer	JobViewerr3   r   on_jobviewer_exitr   )	r!   r   r  r  r   r   r   rN   viewerr   r   r	   r   F  s     







z GUI.on_view_print_queue_activatec             C   sL   y| j j|}| j |= W n. tk
rF   tdt|t| j f  Y nX d S )Nz'Jobviewer exited but not in list:
%s
%s)r   index
ValueErrorrW  r  )r!   r  ir   r   r	   r  Z  s    zGUI.on_jobviewer_exitc             C   s   | j   d S )N)r   )r!   r   r   r   r	   $on_view_discovered_printers_activatec  s    z(GUI.on_view_discovered_printers_activatec             C   s   d| j krtj| j| _d S )Ntroubleshooter)__dict__troubleshootrj  on_troubleshoot_quitr  )r!   r  r   r   r	   on_troubleshoot_activatef  s    
zGUI.on_troubleshoot_activatec             C   s   | ` d S )N)r  )r!   r  r   r   r	   r  j  s    zGUI.on_troubleshoot_quitc             C   sx   | j j| | jj| | jj| | jj| | jj| | jj| xdD ]}| jj|j| qNW | j	d d  d S )N/connect-to-server/server-settings/new-printer
/new-class/rename-printer/duplicate-printer/delete-printer/set-default-printer/edit-printer/create-class/enable-printer/share-printer/filter-name/filter-description/filter-location/filter-manufacturer)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )
r6   r   r   r7   r   r>   r   r   r   r   )r!   	sensitiver   r   r   r	   r   m  s0                  z!GUI.sensitise_main_window_widgetsc             C   s   | j d d S )NF)r   )r!   r   r   r	   r     s    z#GUI.desensitise_main_window_widgetsc             C   s&   | j j| j | j j  | j j  d S )N)r?   r   r3   rj  r   )r!   r  r   r   r	   on_about_activate  s    
zGUI.on_about_activatec             C   s$   d| j kr tj| j|j d| _d S )Nr  )r   )r  r  rj  r  Z
get_dialogr  )r!   serversettingsr   r   r	   r    s    
zGUI.on_problems_button_clickedc             C   sL   | j j| | jj| | jjdj| | jjdj| | jd d  d S )Nz/new-printerz
/new-class)r   r   r7   r   r   r   )r!   r  r   r   r	   sensitise_new_printer_widgets  s
    z!GUI.sensitise_new_printer_widgetsc             C   s   | j d d S )NF)r  )r!   r   r   r	   desensitise_new_printer_widgets  s    z#GUI.desensitise_new_printer_widgetsc             G   sL   t | j | j  | jjd| j| j| jds>| j  | jj	  t
| j d S )NrL   )r   r   r   )r   r3   r  r   r  rx   rz   r  r}   r   r   )r!   r  r   r   r   r	   r     s    


zGUI.on_new_printer_activatec             G   s8   | j   | jjd| j| j| jds4| j  | jj  d S )Nr  )r   r   r   )	r  r   r  rx   rz   r3   r  r}   r   )r!   r  r   r   r   r	   r     s    
zGUI.on_new_class_activatec             C   s   | j   d S )N)r  )r!   r"   r   r   r	   r     s    zGUI.on_new_printer_not_addedc       
      C   s  t d|  | j  | j  || jkr2t d d S | jj }|j }xp|d k	r|j|d}||kr|j|}| jj	|ddd | jj
  | jj|d dd | jj| P |j|}qFW | jj| | jjo| jjjp| jjj ry| j| j|| jjd W n   t  Y nX | jjrtj| jddtjjtjjtd	d
}|jtjtj j!tdtj j" |j# }|j$  |tj j"kr| jj%j&  d}	y| j'| d}	W n t(k
r   Y nX |	r| jj)j*  d S )NzNew printer added: %szNew printer disappearedr2   Tg      ?F)r   r   r   )ppdz$Would you like to print a test page?)r   r  r  r  r  r   zPrint Test Page)+rW  r  r   rw   r6   r   r   r   r   r   r  r   r  r   r   r  r  rL   r   rL  checkDriverExistsr3   rs   r   r  r  ZQUESTIONr  r  r   r  ZSTOCK_CANCELrk  ZNOZYESrj  r  r  r   r   r   ZbtnPrintTestPagerc   )
r!   r"   rN   r   r   ri   r   qrw  Zproperties_shownr   r   r	   r     s`    









zGUI.on_new_printer_addedc             C   s"   |j d | jj| j| jd d S )NF)r(   r)   )r   r   r*   on_start_service_reply)r!   r  r   r   r	   r     s    

zGUI.on_start_service_clickedc             G   s   t jd| j d S )Nr   )r   timeout_add_secondsservice_started_try)r!   r   r   r   r	   r  	  s    zGUI.on_start_service_replyc             C   s4   t j  z| jd  W d t j  X tjd| j dS )Nr   F)r   rx  r   ry  r   r  service_started_retry)r!   r   r   r	   r    s    
zGUI.service_started_tryc          
   C   s8   | j s4tj  z| jd  | jjd W d tj  X dS )NTF)r   r   rx  r   r8   r   ry  )r!   r   r   r	   r    s    

zGUI.service_started_retryc             C   s  t j }| jdkp| jd dks$dS |sy| j j|}W nL t jk
r } z.|j\}}|t jkrddS | j|| dS W Y dd}~X nX t j|}t	j
| tj|\}}	t|dkst|	dkrd}
t|dkrytj }d}
W n   Y nX |
rt|dkr|d }dtd d	 td
||f  }| j}| jj| |j| |j }|j  |tjjkry|jdd| W n   Y nX n$ttdtd||	| d f | dS )zCheck that the driver for an existing queue actually
        exists, and prompt to install the appropriate package
        if not.

        ppd: cups.PPD object, if already createdr   r   r   NFTz"<span weight="bold" size="larger">zInstall driverz	</span>

zGPrinter '%s' requires the %s package but it is not currently installed.zMissing driverzwPrinter '%s' requires the '%s' program but it is not currently installed.  Please install it before using this printer.)r   r   rx   ZgetPPDr   r   ZIPP_NOT_FOUNDr   ZPPDrt   unlinkrC  ZmissingPackagesAndExecutablesr   installpackageZ
PackageKitr   rJ   rK   rn  r   rj  r   r   rk  rl  ZInstallPackageNamer  )r!   r   rN   r  rv  filenamer   r  ZpkgsZexesZcan_installZpkpkgZinstall_textr  rw  r   r   r	   r  !  sX    	





zGUI.checkDriverExistsc             C   s   t d|  | jj| | jjry| j| jj|| jjd W n   t  Y nX yH| jjd }|j d krt d |j	  | jj
j| | jj| j W n$ tk
r   Y n   t  Y nX d S )NzPrinter modified by user: %s)r  ZmediazInvalid media option: resetting)rW  r   r  r  r  r  rs   Zserver_side_optionsZget_current_valueresetr   r   r  rL   r  )r!   r"   rN   Zppd_has_changedZoptionr   r   r	   r   f  s&    
zGUI.on_printer_modifiedc                s8    fdd} j rtj j  tjd| _ td d S )Nc            
      s.   d  _ tj  z jdd W d tj  X dS )NF)r\  )r~   r   rx  r   ry  r   )r!   r   r	   deferred_refresh  s    
z+GUI.defer_refresh.<locals>.deferred_refresh   zDeferred populateList by 200ms)r~   r   r  ro  rW  )r!   r  r   )r!   r	   r    s
    	zGUI.defer_refreshc             C   s   | j   d S )N)r  )r!   r   r   r	   printer_added_or_removed  s    zGUI.printer_added_or_removedc             C   s   | j   d S )N)r  )r!   monrL   r   r   r	   r%    s    zGUI.printer_addedc             C   s4   || j kr0| j | jf | | j| j | j  d S )N)rw   r   r   r6   r  )r!   r  rL   Z	eventnamer  r   r   r	   r&    s    
zGUI.printer_eventc             C   s   | j   d S )N)r  )r!   r  rL   r   r   r	   r'    s    zGUI.printer_removedc             C   s   d | _ | j  | jdd d S )NF)r\  )r   r   r   )r!   r  r   r   r	   r(    s    zGUI.cups_connection_errorc             C   s   t d tj| j d S )NzTrying to recover connection)rW  r   r*  r  )r!   r  r   r   r	   r)    s    zGUI.cups_connection_recovered)T)N)N)T)T)N)Zr+   r,   r-   r   ZIPP_PRINTER_IDLEr   ZIPP_PRINTER_PROCESSINGZIPP_PRINTER_BUSYZIPP_PRINTER_STOPPEDZprinter_statesrY  rZ  r[  rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7  r   rg  r   rp  r   r{  r   r~  r  r   r  r  r   r  r  r   r  r  r  r  r  r  r   r  r   r  r   r   r  r   r   r   r   r  r  r  r  r   r   r  r  r  r  r   r   r   r   r   r  r  r  r  r   r  r  r%  r&  r'  r(  r)  __classcell__r   r   )r   r	   r1      s   


  rH0
  ,2	
K#

#		t
01
	

	
	B

Er1   c          
   C   s   t jtjjdt j  tj  ddlm	} |dd | r^t
jd d d| gd}|jdtj nt }tj  ztj  W d tj  X d S )	NZ	CUPS_USERr   )DBusGMainLoopT)Zset_as_defaultF)r  r  r  )r   rr  rt   ru   r  r{   r   Zthreads_initZ	dbus.glibr  r  r  r   r   r  r1   rx  mainry  )	show_jobsr  r  Z
mainwindowr   r   r	   r    s    


r  __main__z	embedded=debugz
show-jobs=z--debugTz--show-jobsz
--embedded)Zr   sysrt   r  rF  rs  r   ZgiZrequire_versionZgi.repositoryr   r   r   r   r  argvr   r   r   exitr
   r   r   ZrequireZppdSetConformanceZPPD_CONFORM_RELAXEDro   rv   r   Errorru   gettextinstallr   r   rC  r   r   Zguir   r  Zurllib.requestrO  Zurllib.parseZurllib.errorr  r  r  r   r}   r  r   r  r   r   ZSearchCriterionrT  r   r   r   r   Z	ppdippstrZ
pkgdatadirZpkgdatar   joinrR  r   r   r   Zset_prgnamer   r   r.   r/   r1   r  r+   ZgetoptZ
gnu_getoptZoptsr   ZGetoptErrorr  ZoptZoptargZset_debuggingZset_debugprint_fnrW  r  r   r   r   r	   <module>   s    

	 




                



