3
Z0                @   s:  d dl Z d dlZd dlZ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	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlT d dlZd dlmZ d dlmZ d dlZd dlZd dlZyd dladaW n   daY nX d dlZd dlm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&m'Z' d dl(T 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/Z/e/j0e j1e j2d e3dZ4dd Z5dd Z6dd Z7dd Z8d7ddZ9dd Z:dd Z;dd Z<d d! Z=G d"d# d#eZ>d$d% Z?e@d&kr6d dlAZAy$eAjBejCd'd d(d)d*g\ZDZEW n( eAjFk
r`   e?  ejGd' Y nX dZHd(ZIx0eDD ](\ZJZKeJd+kreKZHneJd,krpeKZIqpW d-ejLd.< d dlMZMejNejOd( eMjP  eQd ejReS e> ZTd/d0 ZUeTjVd1eU eTjVd2eU eTjVd3eU eHdk	r$eTjPd4eHeId5 n
eTjPd6 ejW  dS )8    N)OpenPrintingRequest)*)Gdk)GtkTF)GObject)GLib)GtkGUI)OptionWidget)SMBURI)PhysicalDevice)domain	localedirz^The firewall may need adjusting in order to detect network printers.  Adjust the firewall now?c             C   s(   t jj| \}}|dks |dkr$dS dS )z*Returns True is the provided URI is valid.N FT)urllibparse	splittype)urischemerest r   ./usr/share/system-config-printer/newprinter.pyvalidDeviceURIL   s    r   c       	         sr   | j  }|j \ } fdd|D }|j }x>|D ]6}|j } j|} j|d}|j|  j| q4W d S )Nc                s   g | ]}t jj |qS r   )r   ZTreeRowReferencenew).0row)
model_fromr   r   
<listcomp>X   s    z$moveClassMembers.<locals>.<listcomp>r   )get_selectionget_selected_rows	get_modelget_pathget_itergetappendremove)	Ztreeview_fromZtreeview_to	selectionrowsZmodel_tor   pathiterZrow_datar   )r   r   moveClassMembersU   s    


r)   c             C   sJ   | j  }|j }g }x(|r<|j|j|dd  |j|}qW |j  |S )Nr   )r   get_iter_firstr#   r"   	iter_nextsort)treeviewmodelr(   resultr   r   r   getCurrentClassMembersc   s    r0   c             C   s@   |sdS |j  }x*| j D ]}|j r|jj  |krdS qW dS )NFT)lowervaluesZ
discoveredname)printersr3   printerr   r   r   checkNPNamem   s     r6   c          	   C   sH   y0| j  }|r.|j| xtj r,tj  qW W n   t  Y nX d S )N)Z
get_window
set_cursorr   events_pendingmain_iterationnonfatalException)winZcursorZgdkwinr   r   r   readyu   s    

r<   c             C   s   t | tjjtjj d S )N)r<   r   ZCursorr   Z
CursorTypeZWATCH)r;   r   r   r   busy   s    r=   c             C   s   | j   dS )NT)hide)widgeteventr   r   r   on_delete_just_hide   s    rA   c             C   s   t | tr| d S | S )z{If we don't know whether getPPDs() or getPPDs2() was used, this
    function can unwrap an item from a list in either case.r   )
isinstancelist)xr   r   r   
_singleton   s    
rE   c       	   
   C   s   | j dstd|   dS dddg}d}d}x|D ]}tjj|r2|}P q2W |s\td dS ytj| |d	}|jjd
}W n   td|   dS t	j
dt	j}|j|}|r|jdj jddS dS )a  Get GPG fingerprint from URL.

    Check that the URL is HTTPS with a valid and trusted server
    certificate, read it, extract the GPG fingerprint from it, and return
    it. Return None if the URL is invalid, not trusted, or the fingerprint
    can't be found.
    zhttps://z0Not a https fingerprint URL: %s, ignoring driverNz"/etc/ssl/certs/ca-certificates.crtz/etc/ssl/certs/ca-bundle.crtz /etc/pki/tls/certs/ca-bundle.crtzhkp://keyserver.ubuntu.com:80z7No system SSL certificates available for trust checking)Zverifyzutf-8zCannot retrieve %sz$ ((?:(?:[0-9A-F]{4})(?:\s+|$)){10})$    r   )
startswith
debugprintosr'   existsrequestsr"   contentdecoderecompileMsearchgroupstripreplace)	urlZssl_cert_file_pathsZgpg_key_serverZcertfZreqrM   Zkeyid_remr   r   r   download_gpg_fingerprint   s4    


rY   c               @   s  e Zd Zejjdf fejjdeffejjdeeffejjdeffejjdf fdZdZ	dZ
dZdZdZdZd	Zd
ZdZdZdddddddddddd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#d$Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?d@ Z,dAdB Z-dCdD Z.dEdF Z/dGdH Z0ddIdJZ1dKdL Z2dMdN Z3dOdP Z4dQdR Z5dSdT Z6dUdV Z7ddWdXZ8dYdZ Z9d[d\ Z:d]d^ Z;d_d` Z<dadb Z=dcdd Z>dedf Z?dgdh Z@didj ZAdkdl ZBdmdn ZCdodp ZDdqdr ZEdsdt ZFdudv ZGdwdx ZHdydz ZIdd{d|ZJd}d~ ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdddZRdddZSdd ZTdd ZUdd ZVd	ddZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd ZmddĄ ZnddƄ ZoddȄ Zpddʄ Zqdd̄ Zrdd΄ ZsddЄ Ztdd҄ ZuddԄ Zvddք Zwdd؄ Zxddڄ Zydd܄ Zzddބ Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zdd ZdS (
  NewPrinterGUIN)destroyzprinter-addedzprinter-modifiedzdriver-download-checkedzdialog-canceledr   rF                     TF)parallelusb	bluetoothhalbehhphpfaxdnssdsocketlpdscsiserialsmbnetworkc          N   C   s  t j j|  tjtj| _i | _t | _t | _	d | _
d | _d| _d| _d| _d | _g | _d| _d| _d| _d | _g | _d| _i | _d| _d | _d | _| jdddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNgMdOdPgdQdRdSgdTtjdU x6| jtdVdWgdXdXgdYdYgdZdZgd[d[gd\d\gd]d]gd^d^gd_d_gg	f| j tdVdWgtd`dagtdbdcgtdddeggf| j!tdVdWgdfdfgdgdgggf| j"tdVdWgtd`dagtdhdigtdjdkgtdldkggfgD ]d\}}t#j$t%t%}x|D ]}|j&| q>W |j'| t#j( }|j)  |j*|dm |j+|dndo q$W t#j,j-}t#j,j.}t#j,j/}xtdpt#j$t%| j0|ftdqt#j$t%| j1|ftdrt#j$t%| j2|ftdst#j$t%| j3|ftdtt#j$t%t%| j4|ftdut#j$t%t%| j5|ftdvt#j$t%| j6|ftdwt#j$t%| j7|ffD ]H\}	}
}}t#j( }t#j8|	|dodx}|j'|
 |j9| |j: j;| q`W | j<j=dyt> | j?j=dyt>| _@| jAjBd | jCjBd | jDjBd | jEjBd do| _Fd | _Gd | _H| jI}t#j( }|j*|dm |j+|dndo tjJr\x| jK| jLgD ]}|jM  qJW tNjOjPdzsxtNjOjPd{rd|t_Qd}| _Rn"tNjOjPd~rdt_Qd| _Rndmt_Sdd }x&| jT| jK| jLgD ]}|j=d| qW x.| jU| jV| jW| jXgD ]}|j=ddd  qW | j2j: }|jY| jZd  | j2j[| j\d  | j2j=d| j] | j2j=d| j^ | j_j=d| j` | j_jad t#jbt jc| _d| jejfdm | jgj'| jd t#j8td}t#j( }|j*|d |jh|| jid  | jgj9| t#j8td}t#j( }|j*|d |jh|| jjd  | jgj9| | jgj: }|jY| jkd  | j<jl| jm | j6jndm | j6j=d| jo t#jp }|jqtd |jrd |jrd |jrd |jrd |jrd | jsjt| t#jp }|jqtd |jrd | jsjt| d| _ud| _v| jw  txd|   d S )NFNewPrinterWindowntbkNewPrinter	btnNPBackbtnNPForward
btnNPApplyspinner	entNPNameentNPDescriptionentNPLocationtvNPDevices
ntbkNPTypelblNPDeviceDescriptionexpNPDeviceURIstvNPDeviceURIscmbNPTSerialBaudcmbNPTSerialParitycmbNPTSerialBitscmbNPTSerialFlowbtnNPTLpdProbeentNPTLpdHostentNPTLpdQueueentNPTJetDirectHostnameentNPTJetDirectPort	entSMBURIbtnSMBBrowse
tblSMBAuthrbtnSMBAuthPromptrbtnSMBAuthSetentSMBUsernameentSMBPasswordbtnSMBVerifyentNPTNetworkHostnamebtnNetworkFindlblNetworkFindSearchinglblNetworkFindNotFoundentNPTDevicetvNCMemberstvNCNotMembersbtnNCAddMemberbtnNCDelMemberntbkPPDSource	rbtnNPPPD	tvNPMakesrbtnNPFoomaticfilechooserPPDrbtnNPDownloadableDriverSearchentNPDownloadableDriverSearchbtnNPDownloadableDriverSearch#btnNPDownloadableDriverSearch_label$cmbNPDownloadableDriverFoundPrinters
tvNPModelstvNPDriversrbtnChangePPDasIsrbtnChangePPDKeepSettingsscrNPInstallableOptionsvbNPInstallOptionstvNPDownloadableDrivers"ntbkNPDownloadableDriverPropertieslblNPDownloadableDriverSupplier$cbNPDownloadableDriverSupplierVendorlblNPDownloadableDriverLicense$cbNPDownloadableDriverLicensePatents!cbNPDownloadableDriverLicenseFree"lblNPDownloadableDriverDescription&lblNPDownloadableDriverSupportContactshsDownloadableDriverPerfTexthsDownloadableDriverPerfLineArt hsDownloadableDriverPerfGraphicshsDownloadableDriverPerfPhotoZ$lblDownloadableDriverPerfTextUnknownZ'lblDownloadableDriverPerfLineArtUnknownZ(lblDownloadableDriverPerfGraphicsUnknownZ%lblDownloadableDriverPerfPhotoUnknown#frmNPDownloadableDriverLicenseTermstvNPDownloadableDriverLicenserbtnNPDownloadLicenseYesrbtnNPDownloadLicenseNo
WaitWindowlblWaitSMBBrowseDialogtvSMBBrowserbtnSMBBrowseOk)rp   r   r   )r   ZDefaultr   Z1200Z2400Z4800Z9600Z19200Z38400Z57600Z115200NoneZnoneZOddZoddZEvenZeven87zXON/XOFF (Software)ZsoftzRTS/CTS (Hardware)ZhardzDTR/DSR (Hardware)Ttextr   zMembers of this classZOthersZDevicesZConnectionsZMakesZModelsZDriverszDownloadable Drivers)r   zdelete-eventz/etc/apt/sources.listz/etc/apt/sources.list.dZdebZaptz/etc/yum.confZrpmZyumc             S   s"   t | dd }|d k	r| j| d S )Nprotect_active)getattr
set_active)Ztoggle_widgetactiver   r   r   protect_toggle  s    z.NewPrinterGUI.__init__.<locals>.protect_toggleclickedzchange-valuec             S   s   dS )NTr   )rD   yzr   r   r   <lambda>  s    z(NewPrinterGUI.__init__.<locals>.<lambda>zrow-activatedzrow-expandedznotify::expandedrF   ZShareCommentzquery-tooltipzQPostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)z*.ppdz*.PPDz*.ppd.gzz*.PPD.gzz*.PPD.GZzAll files (*)r   r5   z+%s)yr   __init__localeZ	getlocaleLC_MESSAGESlanguageoptionssetchanged	conflictsdeviceppdremotecupsqueueexactdrivermatchinstallable_options
ppdsloaderinstalled_driver_filessearchedfordriverpackagesfounddownloadabledriversfounddownloadableppddownloadable_driver_for_printerdownloadable_printersnextnptab_rerunr4   recommended_model_selected_searchdialog_installdialogZ
getWidgetsconfigPACKAGEr~   _r   r   r   r   	ListStorestrr#   	set_modelZCellRendererTextclear
pack_startZadd_attributeZSelectionModeZMULTIPLEZSINGLEZBROWSEr   r   ry   r}   r   r   r   r   ZTreeViewColumnZappend_columnr   Zset_moder   connectrA   r   WaitWindow_handlerrq   Zset_show_tabsr   rz   r   spinner_countopreqopreq_handlersr   ZDOWNLOADABLE_ONLYFREEr   r   r>   rJ   r'   rK   ZpackagesystempackageinstallerDOWNLOADABLE_ONLYPPDr   r   r   r   r   Zset_select_functiondevice_select_functionZset_row_separator_funcdevice_row_separator_fndevice_row_activateddevice_row_expandedr|   on_expNPDeviceURIs_expandedZset_expanded	TreeStoreTYPE_PYOBJECT	smb_storer   set_sensitiver   Zset_cell_data_funcsmbbrowser_cell_sharesmbbrowser_cell_commentsmb_select_functionset_transient_forrp   Zset_has_tooltipon_NPDrivers_query_tooltipZ
FileFilterZset_nameZadd_patternr   Z
add_filterdevice_selecteddialog_modeZconnect_signalsrI   )selfr?   optsstorer   cellrX   sbr3   r.   r-   Zselection_modecolumncomboboxr   ZslctcolZ
ppd_filterr   r   r   r      s   























zNewPrinterGUI.__init__c             C   s   t d|   d S )Nz-%s)rI   )r  r   r   r   __del__  s    zNewPrinterGUI.__del__c             C   sR   t d|   | jr"| jj  d | _| jr8| jj  d | _| jrN| jj  d | _d S )NzDESTROY: %s)rI   r   r[   rp   r   )r  r   r   r   
do_destroy  s    


zNewPrinterGUI.do_destroyc             C   s0   | j dkr| jj  | jj  |  j d7  _ d S )Nr   rF   )r   ru   showstart)r  r   r   r   inc_spinner_task#  s    


zNewPrinterGUI.inc_spinner_taskc             C   s0   |  j d8  _ | j dkr,| jj  | jj  d S )NrF   r   )r   ru   r>   stop)r  r   r   r   dec_spinner_task*  s    

zNewPrinterGUI.dec_spinner_taskc             C   s&   t d| t||f  t||| jdS )Nz%s: IPP error dialog (%s, %s))parent)rI   reprshow_IPP_Errorrp   )r  Z	exceptionmessager   r   r   r  0  s    
zNewPrinterGUI.show_IPP_Errorc             C   sN   |j  r| jj| n| jj| |jr6| jj| n| jj| | j  d S )N)Z
is_changedr   adddiscardr   setDataButtonState)r  optionr   r   r   option_changed5  s    zNewPrinterGUI.option_changedc             C   s   | j jt| j  d S )N)rs   r   boolr   )r  r   r   r   r  C  s    z NewPrinterGUI.setDataButtonStatec             C   sx   |j dd}|j dd}|j dd}t| j|std}x.t| j|d t| sb|d7 }|dkr6P q6W |dt| 7 }|S )z-Make a suggested queue name valid and unique.rG   -/#r\   rF   d   )rU   r6   r4   r   )r  r3   suffixr   r   r   makeNameUniqueF  s    zNewPrinterGUI.makeNameUniquec             C   s   | j d d S )Nr[   )emit)r  r   r   r   r[   T  s    zNewPrinterGUI.destroyr   c
              C   s  || _ | j s| jjd || _|| _|| _|| _|| _|| _|| _	|sPt
j | _|s^t
j | _i | _t | _t | _d | _d | _d | _d | _| j stytj| j| j| jd| _
W n~ t
jk
r }
 z|
j\}t|| j  dS d }
~
X nJ tk
r
   td| j  dS  tk
r2 }
 zt|
 dS d }
~
X nX ytj| j
| _ W n> t
j!k
r }
 z|
j\}
}t"|
|| j d dS d }
~
X nX | j#j$  | j%j&d | j%j'd | j(j&d | j)j$  | j*j+ }|j,  | j-}|j.t/j0t1t1 | j2j'd | j3}|j't4d | j5j'd | j6j7d |	d	krJ| j rJ| jj8  | jj9| j  | jd
kr`| j:  np| jdkrv| j;  nZ| jdkr| j<  nD| jdkr| j=  n.| jdkr| j>  n| jdkr| j?  dS |	d	kr| j r| jj9| | jj@  | jA  dS )NF)r  host
encryptionrF   )r  Tr   SearchZ9100r   r5   classr   printer_with_urir   download_driverr   )Br  rp   Zset_focus_on_mapr  _device_uriorig_ppddevid_host_encryption_namecupsZ	getServerZgetEncryptionr   r   r   r   fetchDevices_connppdsppdsmatch_resultprinter_finder_validInitParametersRuntimeErrorauthconn
ConnectionZ	HTTPErrorargsZshow_HTTP_Error	Exceptionr:   cupshelpersgetPrintersr4   IPPErrorr  r   r>   r   r   set_textr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   show_nowr   _initialisePrinterMode_initialiseClassMode_initialiseDeviceMode_initialisePrinterWithURIMode_initialisePPDMode_initialiseDownloadDriverModer  setNPButtons)r  r  
device_urir3   r   r-  r%  r&  r  Zxider  rX   r.   r  labelr   r   r   initW  s    












zNewPrinterGUI.initc             C   s,   | j dkr| jd k	S | j dkr(| jdkS dS )Nr)  r   r   r*  r   T)r)  r   r   )r  r+  r-  )r  r   r   r   r6    s
    



z"NewPrinterGUI._validInitParametersc             C   s4   | j d | jjtd | j  | jj| j d S )Nr(  z	New Class)_initialiseWidgetsForModerp   	set_titler   fillNewClassMembersrq   set_current_pagePAGE_DESCRIBE_PRINTER)r  r   r   r   rB    s    
z"NewPrinterGUI._initialiseClassModec             C   sL   | j d | jjtd | jj| j | j  | jj	d | j
| j d S )Nr5   zNew PrinterT)rL  rp   rM  r   rq   rO  PAGE_SELECT_DEVICEfillDeviceTabr   r   on_rbtnNPFoomatic_toggled)r  r   r   r   rA    s    
z$NewPrinterGUI._initialisePrinterModec             C   s.   | j jtd | jj| j | j| j d S )NzChange Device URI)rp   rM  r   rq   rO  rQ  rR  r+  )r  r   r   r   rC    s    z#NewPrinterGUI._initialiseDeviceModec             C   sl   | j d | j  | jjtd | jj| j | jj	d | j
| j | jj	d | j  | jdd d S )Nr5   zNew PrinterTr   )step)rL  _initialiseDeviceFromURIrp   rM  r   rq   rO  PAGE_SELECT_INSTALL_METHODr   r   rS  r   _initialiseAutoVariables	nextNPTab)r  r   r   r   rD    s    
z+NewPrinterGUI._initialisePrinterWithURIModec             C   s4   | j jtd | jj| j d| _| jdd d S )NzDownload Printer DriverTr   )rT  )rp   rM  r   rq   rO  PAGE_DOWNLOAD_DRIVERr   rX  )r  r   r   r   rF    s    z+NewPrinterGUI._initialiseDownloadDriverModec             C   s   | j   | jjtd | jst| jjddd }|g}|dkrP|jdd	g t	j
 | _| jjtd
 | j  tj| j|| j| jd | jj| j | jjd | j| j | jjd | j  d S )NzChange Driver:rF   r   rj   rk   ippsnmpri   zfetching device list)include_schemesreply_handlererror_handlerT)rj   rk   r[  )rU  rp   rM  r   r-  r   r+  splitextend	asyncconnr9  r2  _begin_operationr  r<  
getDeviceschange_ppd_got_devsrq   rO  rV  r   r   rS  r   rW  )r  r   Zschemesr   r   r   rE    s&    

z NewPrinterGUI._initialisePPDModec             C   sL   | j j| j| | j j  x*| j| j| j| j| jgD ]}|jd q6W d S )Nr   )	rv   r?  r#  Z
grab_focusrx   rw   r   r   r   )r  Z	mode_namer?   r   r   r   rL    s    
z'NewPrinterGUI._initialiseWidgetsForModec             C   s   i }t j| jf|| _d S )N)r<  Devicer+  r   )r  device_dictr   r   r   rU    s    z&NewPrinterGUI._initialiseDeviceFromURIc             C   s   d| _ d| _d | _d S )Nr   )	auto_make
auto_modelauto_driver)r  r   r   r   rW    s    z&NewPrinterGUI._initialiseAutoVariablesc             C   s   | j j  | j j  d | _ | j  t|tr2i }n|}d }d }| jdkrP| j}n$|j| jj	}|rt|j
}|j}|| _| jj| j | jdd d S )Nr   r   )rT  )r2  _end_operationr[   r  rB   r;  r-  r"   r   r   idmake_and_modelrq   rO  rV  rX  )r  connr/   Zcurrent_devicesr-  Zmmr   r   r   r   re    s$    



z!NewPrinterGUI.change_ppd_got_devsc             C   sX   | j | | jsdS |jr d| _td d| _| jj | jkrL| j	dd n| j	  dS )a  
        This method is called when the PPDs loader has finished
        loading PPDs in preparation for the next screen the user will
        see, having clicked 'Forward'.  We are creating a new queue,
        and dialog_mode is either "printer" or "printer_with_uri".
        NTz-Loaded PPDs this time; try nextNPTab again...r   )rT  )
_getPPDs_replyr3  _jockey_has_answeredr   rI   r   rq   get_current_pagerV  rX  )r  r   r   r   r   on_ppdsloader_finished_next2  s    
z)NewPrinterGUI.on_ppdsloader_finished_nextc             C   s   |j  }|rV|j  y|W n8 tjk
rT } z|j\}}| j|| d S d }~X nX |j }|r|| _|j | _	|j
r|j | _nd | _d | _	|j  d | _d S )N)Z	get_errorr[   r1  r>  r:  r  Zget_ppdsr3  Zget_ppdsmatch_resultr4  rp  Zget_installed_filesr   r   )r  r   excrI  rX   r3  r   r   r   ro  J  s&    

zNewPrinterGUI._getPPDs_replyc             C   s   | j j }|j  | jj }|j  ytj| j| _W n tjk
rR   i | _Y nX x0| jj	 D ]"}| j| j
tj@ s`|j|f q`W d S )N)r   r   r   r   r<  r=  r1  r4   r>  keystypeZCUPS_PRINTER_CLASSr#   )r  r.   r5   r   r   r   rN  d  s    

z!NewPrinterGUI.fillNewClassMembersc             C   s2   t | j| j | jjtt| j |jd d S )NF)r)   r   r   rt   r   r  r0   )r  buttonr   r   r   on_btnNCAddMember_clickedr  s    z'NewPrinterGUI.on_btnNCAddMember_clickedc             C   s2   t | j| j | jjtt| j |jd d S )NF)r)   r   r   rt   r   r  r0   )r  rv  r   r   r   on_btnNCDelMember_clickedx  s    z'NewPrinterGUI.on_btnNCDelMember_clickedc             C   s4   |j  }|d krd S |j \}}| jj|g k d S )N)r   r   r   r   )r  r?   r%   r   r&   r   r   r   on_tvNCMembers_cursor_changed~  s
    z+NewPrinterGUI.on_tvNCMembers_cursor_changedc             C   s4   |j  }|d krd S |j \}}| jj|g k d S )N)r   r   r   r   )r  r?   r%   r   r&   r   r   r    on_tvNCNotMembers_cursor_changed  s
    z.NewPrinterGUI.on_tvNCNotMembers_cursor_changedc             C   s   | j r| j j  d | _ | j  | jr4| jj  d | _| jrR| jj  d | _| j  | jj  | jd k	rx| j	D ]}| jj
| qnW d | _	| jj  d | _d | _i | _| jd dS )Nzdialog-canceledT)r2  r[   r  r   r5  cancelrp   r>   r   r   
disconnectr   r4   r$  )r  r?   r@   handlerr   r   r   on_NPCancel  s,    






zNewPrinterGUI.on_NPCancelc             C   s   | j d d S )NrF   r   )rX  )r  r?   r   r   r   on_btnNPBack_clicked  s    z"NewPrinterGUI.on_btnNPBack_clickedc             C   s   | j   d S )N)rX  )r  r?   r   r   r   on_btnNPForward_clicked  s    z%NewPrinterGUI.on_btnNPForward_clickedc       
      C   s   | j |}|sdS |d }|d }|d }td| }tj| jddtjjtjj|d| _	| j	j
td | j	j }tj }|j| |j  || j	_| j	jd	| j | j	j  | j|||}	| j	r| j	j  | j	j  d | _	|	S )
NFr3   repokeyidzInstalling driver %sT)r  modaldestroy_with_parentru  buttonsr   zInstalling ...response)_getDriverInstallationInfor   r   MessageDialogrp   MessageTypeINFOButtonsTypeCANCELr   format_secondary_textZget_message_areaZProgressBarr  r  _progress_barr   _installdialog_responseshow_alldo_installdriverpackager>   r[   )
r  driverZinstall_infor3   r  r  fmtZ
dialogareapbarretr   r   r   installdriverpackage  s4    






z"NewPrinterGUI.installdriverpackagec             C   s  t dt|t|t|f  tjj }d|d< |rBd|||g}n
d||g}t dt|  d}y2tj||dtjtjd| _	| j	j
| j	j }}d}	| jj}
x| j	j d krv|j j }t|d	krL|d
krd}	P nt|jdr:yFt|dd  }|d	kr|
j|d  n|
j| d  |
j  W n   Y nX n| jj|jd xtj rdtj  qNW |stjd qW | j	jd	kr|	 rd}W n   d}Y nX |sg | _|S )Nz+Installing driver: %s; Repo: %s; Key ID: %sCLC_ALLzinstall-printerdriverzRunning command: T)env	close_fdsstdinstdoutFr   done   PrF   r!  zutf-8g?) rI   r  rJ   environcopy
subprocessPopenDEVNULLPIPEpr  stderrr   r  ZpollreadlinerT   lenrH   floatZset_fractionZset_pulse_stepZpulser   r#   rN   r   r8   r9   timeZsleep
returncode)r  r3   r  r  new_environr:  r  r  r  r  r  lineZ
percentager   r   r   r    sZ    




z%NewPrinterGUI.do_installdriverpackagec             C   s  |j di }t|j }t|dkr0td d S t|dkrNtdt| d S ||d  }t|dkrrtd d S t|j d }d}|jdr|jd	d }n0|jd
rdj|jddd }nt	d| d }d|| krt
jo|d dkr>td d S n:t|| d }t
jr>|d dkr>| r>td d S || j di j | j}|std| jt|| j di f  d S |||dS )Npackagesr   zNo packages for driverrF   zMReturned more than one matching architecture, please report this as a bug: %sz=Returned more than one package, this is currently not handledr   z.debr   z.rpmr  r\   zUnknown package type: Zfingerprintallnoarchz?Not installing driver as it does not have a GPG fingerprint URLzANot installing driver as it does not have a valid GPG fingerprintZrepositoriesz'Local package system %s not found in %s)r3   r  r  )r  r  )r  r  )r"   rC   rt  r  rI   r  endswithr`  join
ValueErrorr   ZDOWNLOADABLE_PKG_ONLYSIGNEDrY   r   )r  r  ZpkgsZarchespkgr3   r  r  r   r   r   r    sF    

z(NewPrinterGUI._getDriverInstallationInfoc             C   s   | j j  d S )N)r  Z	terminate)r  dialogr  r   r   r   r  F  s    z%NewPrinterGUI._installdialog_responsec             C   s  | j j }td|  d}| jdksB| jdksB| jdksB| jdkrZ| j|}|| jkrZd}|sjtd d S | j }||j||  }d}y&|j| jdkr|| jko|d
k}W n& t	k
r   || j
ko|d
k}Y nX td|  |rb| j | _d| _| jd krd S t| jtjr"| j  n| j}d | _| j  || _| jsb|| j
krb||j|d	  }|| j
kr| j r|d
k r||j|d	  }td|  |d
kr|| jkr| j  |d
kr|| jkrd }	d }
y8| jjr| jjdkrd| jjd | jjd f }	W n   t  Y nX yn|	d krt| jtjr| jjdj}tjj|\}}|r||r|d||f }	n|s|rd||f }	W n   t  Y nX |	r|	}
nd}	| j|	}	| j j!|	 |
r| j"j!|
 | j j#| | j$  d S )NzNext clicked on page %dTr5   r)  r   r*  Fz9Interrupting execution of nextNPTab(): Operations pendingrF   r   zWill fetch ppd? %dzWill advance to page %drj   rk   r[  httphttpsrd   z%s %sMFGMDLZ	modelNamez%s%sr   )rj   rk   r[  r  r  rd   )%rq   rq  rI   r  _handlePrinterInstallationModeINSTALL_RESULT_OPS_PENDING_getPagesOrderForDialogModeindex
PAGE_APPLYr  PAGE_INSTALLABLE_OPTIONSgetNPPPDr   r   rB   r1  PPDfillNPInstallableOptionsrY  fillDownloadableDriversrP  r   rl  ru  id_dictr:   findAttrvaluer<  r3  ppdMakeModelSplitr#  rv   r?  rw   rO  rG  )r  rT  page_nrZ
keep_goingZinstall_resultorderZnext_page_nrZ	fetch_ppdr   r3   ZdescrZmnamemaker.   r   r   r   rX  I  s    






zNewPrinterGUI.nextNPTabc             C   sz  g }| j dkr"| j| j| jg}nT| j dkr8| jg}n>| j dkr*| jrX| j| jg}n| jr| jj	  r| j
r| j| j| j| jg}n| j| j| j| j| j| jg}n| j
r| jj	  r| j| j| jg}n^| jj	 r| j| j| j| j| jg}n:| jj	 r| j| j| j| jg}n| j| j| j| j| jg}nL| j dkr| jj	 rX| j| j| j| jg}n2| jj	 rv| j| j| jg}n| j| j| j| jg}n| j dkr| jg}n| jr| jg}n| jr| jj	  r| j
r| j| j| jg}n| j| j| j| j| jg}nx| j
r"| jj	  r"| j| jg}nT| jj	 rD| j| j| j| jg}n2| jj	 rb| j| j| jg}n| j| j| j| jg}|S )Nr(  r*  r5   r   r   )r  rP  PAGE_CHOOSE_CLASS_MEMBERSr  rY  r   rQ  r   r   
get_activer   r  rV  PAGE_CHOOSE_DRIVER_FROM_DBr   r   )r  r  r   r   r   r    s    


















z)NewPrinterGUI._getPagesOrderForDialogModec          	   C   s   t | j | jj }| jj }| j}|| jks8|| jkr@|dks\|| jksT|| jkrh|dkrh| j||}|| j	kr| j
jsy<| jj j \}}|j|dd }| j|}| jj| W n   t  Y nX t| j |S )Nr   )r=   rp   rq   rq  INSTALL_RESULT_DONErQ  rY  rV  _handlePrinterInstallationStager  r   rl  r   r   get_selectedr"   r#  rv   r?  r:   r<   )r  rT  r  r/   r.   r(   r3   r   r   r   r  =  s(    







z,NewPrinterGUI._handlePrinterInstallationModec             C   s  | j dkr>| jj}|r>|jdr>t|dd  dj }| j  || jksR|| jkr^| j	| n|| j
krz| jdkrz| j  d }| j s| j dkr| j dkr| jj}|s| j}|sd }| jd kr| j dkr| j|| | jS d| _|| jks|| jk r| j  | j|||S )Nr*  rn   r`   )r   Fr   )r  r   r   rH   r
   Zsanitize_uri_installSMBBackendIfNeededrQ  rV  _selectDeviceForInstallationrY  r   _handleDriverInstallationr   rl  r-  r3  _loadPPDsForDevicer  _installHPScannerFilesIfNeeded_installPrinterFromDeviceID)r  r  rT  r   r-  r   r   r   r  `  s0    

z-NewPrinterGUI._handlePrinterInstallationStagec          
   C   st   | j dkrp| j rp| jdks*| jd dkrptjdtj rptd ytj }|j	ddd W n   t
  Y nX d S )NF	localhostr   r  z/usr/lib/cups/backend/smbz$No smb backend so attempting installZ	smbclient)r   r   r.  rJ   accessF_OKrI   installpackage
PackageKitInstallPackageNamer:   )r  pkr   r   r   r    s    z(NewPrinterGUI._installSMBBackendIfNeededc             C   s  | j   | j | j_| jr2| jj  d | _| j  | jrP| jj  d | _| j  | jj	 rn| jj
dkrn| j  d | _tjd|}|r|j }t|d dkrt|d dd  }nd}yHtjj|d |}|jdd	|d
   |j }|jdk r|d
 | _W n   Y nX y|tj}tj|d ||d}ddg}	|j||	d}
|
jdd}|
jdd}t|dkrr| jj| t|dkr|| j_W n& t k
r   Y n   t!  Y nX n<|j"ds|j"dr|j#ddkr| jj$r| jj$| _d S )Nrj   rk   r[  z"ipp://(\S+?)(:\d+|)/printers/(\S+)rF   r   iw  ZGETz/printers/%s.ppdr\      )r%  portr&  zprinter-infozprinter-location)r   Zrequested_attributesr   zdnssd:zmdns:z/cups)rj   rk   r[  r   )%rW  getDeviceURIr   r   r2  r[   r  r5  r{  rl  ru  getNetworkPrinterMakeModelr   rO   rR   groupsr  intr  ZclientZHTTPConnectionrequestZgetresponsestatusr1  ZHTTP_ENCRYPT_IF_REQUESTEDr9  ZgetPrinterAttributesr"   rw   r?  locationr7  r:   rH   findinfo)r  r   resresgr  rn  Zrespr&  crZattrsr  r  r   r   r   r    sb    



z*NewPrinterGUI._selectDeviceForInstallationc             C   s   | j }|j j \}}d }|d k	r.|j|d}|d ksF|dksFd|krJd S | j|}| sht| jdkrld S d | _| jdkr| j	j
 r| j	j s| j	jdkr| jr| j| j	_d S )NrF   r   r  r*  Unknown)r   r   r  	get_valuer  r  r   r3  r  r   rl  rm  r   )r  r-   r.   r(   r  r/   r   r   r   r    s     


z'NewPrinterGUI._handleDriverInstallationc          
   C   sh   t | jdrd| jjrdtjdtj rdtjdtj rdtd ytj }|j	ddd W n   Y nX d S )Nhp_scannablez/etc/sane.d/dll.d/hpaioz/etc/sane.d/dll.d/hplipz+No HPLIP sane backend so attempting installr   zlibsane-hpaio)
hasattrr   r  rJ   r  R_OKrI   r  r  r  )r  r  r   r   r   r    s    z,NewPrinterGUI._installHPScannerFilesIfNeededc             C   sB   t d tj||| j| j| jd}|| _|jd| j |j  d S )NznextNPTab: need PPDs loaded)	device_idrH  r  r%  r&  finished)	rI   r   Z
PPDsLoaderrp   r.  r/  r   rr  run)r  r-  r   r  r   r   r   r    s    
z NewPrinterGUI._loadPPDsForDevicec             C   s  d }g | _ yf| jdkr$d}d}nL| jrXd}|| _| j}| j|}| jj| d}n| jjsz| jj	rt| jj	dksz|rf| jjr| jj
}nT|rtj|}nDi }tjj| jj	\|d< |d< d	|d
< g |d< d|d |d f }| jj|d |d |d
 |d | jj| jj	}tdt|  | jjt|j | j||d}	tdt|	  |	| _ |	d }|| }n
| jdkr4| jr4| jjd}
|
s| jjd}
|
r|
jr|
j}|jdr|d d }tjj|}|\}}| jj||}x0|j D ]$\}}t|jd|kr|}P qW |r$d}nd}|| _d}n<| jdkrPd}|| _d}n | jjdddg | jj\}}d}W n   t   Y nX |r| j s| jdkr| j!|||||S | j"S )Nr*  downloadZgenericrawexactr  r  r  r   DESZCMDzMFG:%s;MDL:%s;zSuitable PPDs found: %s)r-  fitzPPDs in priority order: %sr   r   ZNickNameZ	ModelNamez (recommended)   zppd-make-and-modelGenericZPrinterzGeneric Printeri)#id_matched_ppdnamesr  r   r   r#  rv   r?  r   rl  rm  r  r<  parseDeviceIDr3  r  ZgetPPDNamesFromDeviceIDr   rI   r  orderPPDNamesByPreferencerC   rt  r   r,  r  r  r  getInfoFromModelitemsrE   r"   ZgetPPDNameFromDeviceIDr:    _installPrinterOrSearchForDriverr  )r  r-  r  rT  ppdnamer  r3   r  r  Zppdnamelistattrr  Zmfgmdlr  r.   r3  r   r  r   r   r   r    s    





z)NewPrinterGUI._installPrinterFromDeviceIDc             C   sT  y|dkrR| j j|}t|d }tj j|\}}	|| _|	| _|| _| j||	 |dksb|dkr| j	dkrd| _
|dkr| j}n~d| _
| j	dkr| jdkr|rt|dkr|jd	dkp2|jd
dkp2|jddkp2|jddkp2|jddkp2|jddkp2|jddkp2|jddk rtd td|  d| _d| _td}
tj| jddtjjtjj|
d| _| jjtd t | _| jjd| j | jj  g | _ | j j!| jjd| j" | j j!| jjd| j# d| _$| jj%| | j&S W n   t'  Y nX | j	dksF| j	dkrN| j( rN|| j)krN| j*  | j+S )Nr  zppd-make-and-modelr  z	exact-cmdr   Tr   FzMFG:generic;zMFG:Generic;zMFG:unknownzMFG:UnknownzMDL:unknownzMDL:UnknownzMFG:;zMDL:;z7nextNPTab: No exact driver match, querying OpenPrintingznextNPTab: Searching for "%s"	Searching)r  r  r  message_typer  r   zSearching for driversr  r  errorr*  ),r3  getInfoFromPPDNamerE   r<  r  rh  ri  rj  fillDriverListr  r   r  r   r  r  rI   Z_searchdialog_canceledr   r   r  rp   r  r  r  r  r   r  r   r   r   _searchdialog_responser  r   r#   opreq_id_search_doneopreq_id_search_erroropreq_user_searchsearchPrintersr  r:   r   rY  fillMakeListr  )r  r-  r  r  r  rT  ppddictZ
make_modelr  r.   r  r   r   r   r  j  s~    








z.NewPrinterGUI._installPrinterOrSearchForDriverc             C   sP   | j jd | jjtd g | _d| _d| _d| _t	| j
 tj| jj d S )NTr'  F)r   r   r   r?  r   r   r   r   r   r<   rp   r   idle_addr   r{  )r  r  r  r   r   r   r
    s    
z$NewPrinterGUI._searchdialog_responsec             C   s>  x| j D ]}|j| qW tj  z
d| _d | _ d | _| jj  | jj  d | _t	|dk rt
| j d| _| jdkr| jd  n| j  n|| _|| _d| _yp| jj  | j  | j st
| j d| _| jdkr| jd  n| j  n"| jdkr| jdd n| j  W n   t  | j  Y nX W d tj  X d S )NFrF   r*  Tr   )rT  )r   r|  r   threads_enterr  r   r   r>   r[   r  r<   rp   r   r  r~  rX  r   downloadable_driversr  rG  r  r:   threads_leave)r  r   r4   driversr}  r   r   r   r    sF    








z"NewPrinterGUI.opreq_id_search_donec             C   s*   t d|t|f  | j|t t  d S )Nz$OpenPrinting request failed (%d): %s)rI   r  r  rC   dict)r  r   r  errr   r   r   r    s    z#NewPrinterGUI.opreq_id_search_errorc             C   s   | j }|j j \}}d }|d k	r.|j|d}|d ksF|dksFd|krJd S | j| sdt| jdkrhd S d | _| jdkr| j	j
 r| j	j s| j	jdkr| jr| j| j	_d S )NrF   r   r  r*  r  )r   r   r  r  r  r  r   r3  r  r   rl  rm  r   )r  r-   r.   r(   r  r   r   r   &_installSelectedDriverFromOpenPrinting  s$    


z4NewPrinterGUI._installSelectedDriverFromOpenPrintingc       	      C   s$  | j j }| jdkrp| jj  | jj  | jj  y| j }t	|}W n t
k
r^   d}Y nX | jj| d S | jdkr|| jkr| jstd | jj  | jj  n| jj  | jj  d S || jkr| jj  | jj  d S | jj  | jj  || jkr| jj  | jj  d}| jj rR| j}|j }|rR|j j|drRd}| jjt| jj rz| jj d d k	p| jj p| d S | jj  | jdkr| jj  | jj  | jj  | j }| jj| d S || jkr.d}y| j }t	|}W n   t  Y nX | jj| | jj  n
| jj  | jj  | jj  || j kr| jj  | jd	ksz| jd
kr| jj  | jj  | jjt!| j"| j#j$  | jdkr| jj  | jd
kr| j%s| j&r| j r| jj  || jkrrd}| jj r4| j}|j }|r4|j j|dr4d}| jjt| jj pV| jj pV| | jd
krr| jj  || j'kr| j(j) j* \}}| jjt| || j+kr| jj  | jj  | jjtt,| j- || jkr | jd
kr | j&r | jj  || j.kr | j }| jj| d S )Nr   Fr   zNo installable optionsrF   Tr   r*  r5   r)  r(  )/rq   rq  r  rr   r>   rs   rt   r  r  r   AttributeErrorr   r  r   rI   r  rV  r   r  r   get_active_iterr   r  r  r   r   
get_cursorr   get_filename_is_driver_license_acceptedrQ  r:   rP  r6   r4   rv   get_textr   r   r  r   r   r  r  r0   r   rY  )	r  nrr   ZvalidZdownloadable_selectedr  r(   Zacceptedr.   r   r   r   rG    s    

































zNewPrinterGUI.setNPButtonsc             C   sZ   | j j }|| jkr| jj S | j}|j j \}}|sR|j \}}|rR|j	|}|d k	S )N)
r   rq  rQ  r   r  r   r   r  r  r!   )r  Zcurrent_pager-   r.   r(   r'   r
  r   r   r   r    s    



z)NewPrinterGUI._is_driver_license_acceptedc             C   sz   |j  }|}|jdd}|jdd}|jdd}||krB|j| | jdkrb| jjt| j| n| jjt| j| d S )Nr  r   r   rG   r5   )	r  rU   r?  r  rt   r   r6   r4   rs   )r  r?   r   new_textr   r   r   on_entNPName_changed  s    

z"NewPrinterGUI.on_entNPName_changedc                sv   t d j  dddddg}j}|dkrP fdd	}tjj|||d
 n" fdd	}tjj|||d d S )NfetchDevicesri   r\  
driverlessbjnprd   Fc                s   j | | S )N)local_devices_reply)rD   r   )current_urir  r   r   r     s    z,NewPrinterGUI.fetchDevices.<locals>.<lambda>)Zexclude_schemesr^  r_  c                s   j | | S )N)network_devices_reply)rD   r   )r&  r  r   r   r     s    )r]  r^  r_  )rI   r  error_getting_devicesr<  rd  r2  )r  ro   r&  Znetwork_schemesr_  r^  r   )r&  r  r   r"    s    
zNewPrinterGUI.fetchDevicesc             C   s6   t dt|  | j  | jj  | jj  d | _d S )NzError fetching devices: %s)rI   r  r  r2  rk  r[   )r  rn  rs  r   r   r   r(    s
    

z#NewPrinterGUI.error_getting_devicesc             C   s&   | j   | jd|d | j|| d S )NT)ro   r&  )r  r"  add_devices)r  rn  r/   r&  r   r   r   r%    s    z!NewPrinterGUI.local_devices_replyc       	         s   j j  j j  d _ d}i }x*|j D ]\}}|jdr,|||< d}q,W x|j D ]
}||= qXW j| |d t|dkrtj	|}j
  |j fddd j  j  d S )	NTzdnssd://F)no_morer   c                s   j  | S )N)dnssd_resolve_reply)devices)r&  r  r   r   r     s    z5NewPrinterGUI.network_devices_reply.<locals>.<lambda>)r^  )r2  rk  r[   r  rH   rt  r)  r  dnssdresolveZDNSSDHostNamesResolverr  Zresolver  check_firewall)	r  rn  r/   r&  r*  Zneed_resolvingr   r   Zresolverr   )r&  r  r   r'    s$    




z#NewPrinterGUI.network_devices_replyc             C   s$   | j ||dd | j  | j  d S )NT)r*  )r)  r  r.  )r  r&  r,  r   r   r   r+    s    z!NewPrinterGUI.dnssd_resolve_replyc             C   s
  t jj }d|d< d|d< dddd| g}t|d	 t|  y,tj||d
tjtjtjd}|j	 \}}W n
   d S d}xj|j
 jdD ]X}|jddkrqtjd|}	|	r|	j }
yt|
d }W n   d}Y nX |dkrP qW |dk rd S |dkrdS dS d S )Nr  r  r   ZDISPLAYzhp-infoz-xz-iz-dz: T)r  r  r  r  r  rF   
zfax-typez(\d+)r   r^   zMFG:HP;MDL:Fax 2;DES:HP Fax 2;zMFG:HP;MDL:Fax;DES:HP Fax;r   r   r   )rJ   r  r  rI   r  r  r  r  r  communicaterN   r`  r  rO   rR   r  r  )r  faxurir  r:  r  r  r  Zfaxtyper  r  r  r   r   r   get_hpfax_device_id  s>    





z!NewPrinterGUI.get_hpfax_device_idc       	      C   s   dddd|g}t |d t|  y8tj|dtjtjtjd}|j \}}|jdkrXd S W n
   d S |j j	 }|j
d	d
}t|dk rd S |d
 }|dkrd S |S )Nzhp-queryz-kz	scan-typez-dz: T)r  r  r  r  r   =rF   r\   0)rI   r  r  r  r  r  r0  r  rN   rT   r`  r  )	r  r   r:  r  r  r  Z	scan_typeZfieldsr  r   r   r   get_hplip_scan_type_for_uri/  s(    

z)NewPrinterGUI.get_hplip_scan_type_for_uric       	      C   s   |dkrd}n|dkrd}nd}d||g}t |d t|  d }y8tj|dtjtjtjd}|j \}}|jd	krxd S W n
   d S |j j	 }|S )
Nprintz-cfaxz-fz
hp-makeuriz: T)r  r  r  r  r   )
rI   r  r  r  r  r  r0  r  rN   rT   )	r  r%  modemodr:  r   r  r  r  r   r   r   !get_hplip_uri_for_network_printerI  s(      


z/NewPrinterGUI.get_hplip_uri_for_network_printerc             C   sz  d}|dkr| j }|dkr|jjd}|dkr|d7 }|j|d jd}|dkrf|j|d jd}|dkr|j|d jd}|dkrt|j}|j|||  }|rrd|g}t|d	 t|  d}y:tj|d
tjtj	tj	d}|j
 \}}	|jdkrd}W n   Y nX |dk	rry|jdj }
W n( tk
rX   |jdddj }
Y nX tj|
}t|}|dk r|jddddg |dd }d}n|dkr|dd }d}|dkr|\}}}}}}n0|dkr|\}}}}}n|dkr |\}}}}|dkr6td tjj|\}}d||||f |_ntd|  ||_tj|j|_||_||_|dkrr||_||fS )z
        Try to determine the make and model for the currently selected
        network printer, and store this in the data structure for the
        printer.
        Returns (hostname or None, uri or None).
        Nz://rF   r]   rZ  r  ?z/usr/lib/cups/backend/snmpz: T)r  r  r  r  r   zutf-8z
iso-8859-1ignore)encodingerrorsr^   r   r`   r_   zNo Device ID from snmp backendzMFG:%s;MDL:%s;DES:%s %s;zGot Device ID: %sr   r   r   r   )r   r   r  r  rI   r  r  r  r  r  r0  r  rN   rT   UnicodeDecodeErrorprobe_printerZwordsepra  r<  r3  r  rl  r  r  rm  r  r  )r  r%  r   r   r  rI  r:  r  r  r  r  Zwordsndevice_classrm  r  r  Zdevice_locationZmkZmdr   r   r   r  _  s~       











z(NewPrinterGUI.getNetworkPrinterMakeModelc             C   s|  d| _ tjttjt}tjddt	di}t
|}|g| _|jd |j |dgd}|jd t	dd dgd}dt	d	d
}tjd|}|j||d t
|dgd}	|j||	dd dgd dt	dd
}
tjd|
}|j||
d t
|dgd}|j|	|dd dgd || _|	| _|| _d| _| jj| | jjd | jj  | jjd}| jjtj |d || _d | _td | j  d S )NrF   r   zdevice-infoz	Enter URIF)r   zNetwork Printerro   zFind Network Printer)zdevice-classzdevice-infoTzWindows Printer via SAMBArn   r   zFetching devicesr   )r   )ro   )rn   ) r  r   r   r   r   r   r  r<  rf  r   r   r,  r#   get_infoZinsert_afterdevices_uri_iterdevices_find_nw_iterdevices_network_iterZdevices_network_fetchedry   r   r   r?  r|   r>   
get_columnr7   TreePathr&  firewallrI   start_fetching_devices)r  r&  r.   otherZ	physotherZuri_iternetwork_iterZnetwork_dictro   find_nw_iterZsmbdev_dictZsmbdevZfind_smb_iterr
  r   r   r   rR    sN    

zNewPrinterGUI.fillDeviceTabc             C   s   | j }d}y|j }|j }|o"|}td }|sP|dtd d 7 }|jtj |st|dtd d 7 }|jtj |st	d|  t
j| jddt
jjt
jjtdd	}|j| |jtd
t
jjtdt
jj |jd| j |j  W n" tjtfk
r   t  Y nX |rt	d d S )NTz

z- z%Allow all incoming IPP Browse packetsr/  zAllow all incoming mDNS trafficz,Asking for permission to adjust firewall:
%szAdjust Firewall)r  r  r  r  r  r   zDo It Laterr  z"Firewall all OK, no changes needed)rI  Zcheck_ipp_client_allowedZcheck_mdns_allowedTEXT_adjust_firewallr   add_servicefirewallsettingsZIPP_CLIENT_SERVICEZMDNS_SERVICErI   r   r  rp   r  QUESTIONr  NONEformat_secondary_markupadd_buttonsResponseTypeNOYESr   adjust_firewall_responser  dbusDBusExceptionr;  r:   )r  datarW   allowedZipp_allowedZmdns_allowedsecondary_textr  r   r   r   on_firewall_read  sB    

zNewPrinterGUI.on_firewall_readc             C   sl   |j   |tjjkr:| jj }|s0| jjtj | jj	  t
d tj | _| jjtd | jdd d S )Nz7Fetching network devices after firewall dialog responsezfetching device listT)ro   )r[   r   rU  rW  rI  Zcheck_ipp_server_allowedrO  rP  ZIPP_SERVER_SERVICEwriterI   rb  r9  r2  rc  r   r"  )r  r  r  Zipp_server_allowedr   r   r   rX  	  s    


z&NewPrinterGUI.adjust_firewall_responsec             C   s2   t j | _| jjtd | jd| jd | `d S )Nzfetching device listF)ro   r&  )rb  r9  r2  rc  r   r"  r&  )r  r   r   r   rJ  	  s    
z$NewPrinterGUI.start_fetching_devicesc             C   s*  |rZ||kr|j |}nB|jdd|kr@|jdd}|j |}n|rVtj|}d|_nd }t|j }x&|D ]}|jdkrl|jjdd|_qlW dd }tt	||}xt
t|d D ]}xt
|d t|D ]z}|| }	|| }
|	jdks|
jdkrq|	j|
jkr|	jsd|	_q|
js$d|
_qt|	jt|
jk rBd|	_qd|
_qW qW d	d
 |D }g }x|D ]}td|j  t|drtd|j  t|drtd|j  t|}tdt|  yT| jj|}td|  | j| j| tdt||t| j| f  td W n< tk
rV   | jj| |j| tdt|  Y nX qhW | jj  |rt|}y*| jj|}| j| j| | j| }W n, tk
r   | jj| |j| Y nX nd }| jj }| j}| j}x|D ]}d }y| jj|}| j| }W n* tk
r@   tdt|  wY nX |j }|d jdk}|j }||krv|t d7 }||dg}|r|d j|d jkr|j!|||d}||kr|j"|}| jj#|d n|j||d}n\|j"|}|j$ }x8|j"||kr*|j%|d}||krP |j&|}qW |j!d ||d}||kr|j"|}| jj'|dd | jj(d}| jj)||d qW d}|r| j*j }|j$ }d}x|r|j%|d}||jkr|}P |j&|}|d7 }qW nD| j+s&| jj(d}| jj)t,j- |d | j*j(d}| j*j)||d d S )Nz:9100r   zCurrent devicerj   c             S   s&   | j dkrd| _ n| j dkr"d| _ | S )Nzhp:/no_device_foundrg   zhpfax:/no_device_foundrh   )r   )r   r   r   r   replace_generic*	  s
    

z2NewPrinterGUI.add_devices.<locals>.replace_genericrF   deletec             S   s   g | ]}|j d	kr|qS )
rg   rh   re   rf   rn   rl   r  r$  ra  )	rg   rh   re   rf   rn   rl   r  r$  ra  )r   )r   rD   r   r   r   r   D	  s      z-NewPrinterGUI.add_devices.<locals>.<listcomp>zAdding device with URI %saddressz   Device address %shostnamez   Device host name %sz   Created physical device %sz)   Physical device %d is the same printerz;   New physical device %s is same as physical device %d: %sz   Joining devicesz0   Physical device %s is a completely new devicezQERROR: Cannot identify new physical device with its entry in the device list (%s)r   ro   z
 (Current)F)r   g      ?)Z	row_align).poprU   r<  rf  r  rC   r2   ru  r   mapranger  rl  rI   r  rb  rc  r   r  r,  r  
add_devicer  r#   r,   ry   r   rF  rE  get_devicesrB  rC  r   insert_beforer    
expand_rowr*   r  r+   scroll_to_cellrG  r7   r}   r  r   rH  )r  r,  r&  r*  Zcurrentr   r`  ijZdevice1Zdevice2Z
newdevicesphysicaldeviceZcurrent_devicer.   rL  rM  Z	newdeviceZdevsro   r  r   r(   network_pathphysdevZdevice_select_pathr
  Zconnection_select_pathdevr   r   r   r)  	  s    

















zNewPrinterGUI.add_devicesc             C   sn   t sjtd yHtj }|jddd ydd lada td W n   td Y nX W n   td Y nX t S )Nz3No SMB client library present so attempting installr   zpython3-smbcTz-SMB client successfully installed and set up.zSMB client setup failed.z.Error during installation/setup of SMB client.)PYSMB_AVAILABLErI   r  r  r  pysmb)r  r  r   r   r   install_python3_smbc_if_needed	  s    z,NewPrinterGUI.install_python3_smbc_if_neededc             C   sf  | j }|j  t| j G dd d}| }tjj|_td|_	d|_
|jd|g xtj rhtj  qVW d}t rxd}tj| j}tjj||jd}d}yVxP|j dkry|jd	j }W q tk
r } z|j| W Y dd}~X qX qW W n^ tk
r> } z0|j\}}	|tjkr.td
t||	f  W Y dd}~X n   t  Y nX |j  |rx>|D ]6}
|
jtjjtjj gkrd|jd|
g}|j|}qdW t!| j"j# d}|j$ \}}}}}t%|dkr(G dd d}| }tjj |_||_	d|_
|jd|g}|j|}|j&|}| j'j(|d t)| j |j* dkrb| jj+  t,tdtd| j-d dS )zInitialise the SMB tree store.c               @   s   e Zd ZdS )z)NewPrinterGUI.browse_smb_hosts.<locals>.XN)__name__
__module____qualname__r   r   r   r   X	  s   rx  zScanning...r   Nr   
   )debugauth_fnzsmb://zRuntime error: %s)r   c               @   s   e Zd ZdS )z1NewPrinterGUI.browse_smb_hosts.<locals>.FakeEntryN)ru  rv  rw  r   r   r   r   	FakeEntry	  s   r|  zNo Print Sharesz{There were no print shares found.  Please check that the Samba service is marked as trusted in your firewall configuration.)r  ).r   r   r=   r   rs  smbcPRINTER_SHARE	smbc_typer   r3   commentr#   r   r8   r9   get_debuggingAuthContextContextcallbackperform_authenticationopendirgetdentsr;  failedr7  r:  errnoENOENTrI   r  r:   	WORKGROUPSERVERr
   r   r  separater  r    r   rj  r<   r*   r>   show_info_dialogrp   )r  r  rx  Zdummyrz  	smbc_authctxentriesrI  r  entryr(   rl  Zspecified_urirS   r%  shareuserpasswordr|  Ztoplevelr'   r   r   r   browse_smb_hosts	  sn    




$
$






zNewPrinterGUI.browse_smb_hostsc             C   s   | j j|}| j j| S )z9Don't allow this path to be selected unless it is a leaf.)r   r!   iter_has_child)r  r%   r.   r'   Zpath_selectedr[  r(   r   r   r   r   
  s    z!NewPrinterGUI.smb_select_functionc             C   s.   |j |d}d}|d k	r|j}|jd| d S )Nr   r   r   )r  r3   set_property)r  r
  r  r.   r(   r[  r  r  r   r   r   r   
  s
    z#NewPrinterGUI.smbbrowser_cell_sharec             C   s.   |j |d}d}|d k	r|j}|jd| d S )Nr   r   r   )r  r  r  )r  r
  r  r.   r(   r[  r  r  r   r   r   r    
  s
    z%NewPrinterGUI.smbbrowser_cell_commentc             C   sd   | j }|j|}|j|d}|r<|jtjjkr<| jj  dS |j	|rR|j
| n| j||| dS )z*Handle double-clicks in the SMB tree view.r   N)r   r!   r  r  rs  r}  r~  r   r   row_expandedcollapse_rowon_tvSMBBrowser_row_expanded)r  viewr'   r
  r  r(   r  r   r   r   on_tvSMBBrowser_row_activated'
  s    


z+NewPrinterGUI.on_tvSMBBrowser_row_activatedc             C   s  |j  }|j|d}|dkr dS |jtjjkry| jr<dS W n   d| _Y nX t| j d|j	 }d}t
 rtd}tj| j}tjj||jd}	g }
yVxP|j dkry|	j|j }
W q tk
r } z|j| W Y dd}~X qX qW W n^ tk
r: } z0|j\}}|tjkr*tdt||f  W Y dd}~X n   t  Y nX x(|j|rt|j|d}|j| qNW xN|
D ]F}|jtjjtjjgkr|j||g}|jtjjkr||j|}q|W |j |d | `t!| j n|jtjjkry| jrdS W n   d| _Y nX t| j d|j	 }d}t
 r<d}tj| j}tjj||jd}	g }y\xV|j dkry|	j|j }W n. tk
r } z|j| W Y dd}~X nX qbW W nj tk
r } z<|j\}}|tj"kr|tj#krtdt||f  W Y dd}~X n   t  Y nX x(|j|rN|j|d}|j| q(W x8|D ]0}|jtjjkrV|j||g}tt| qVW |j |d | `t!| j dS )z1Handler for expanding a row in the SMB tree view.r   NrF   z	smb://%s/ry  )rz  r{  zRuntime error: %s)$r   r  r  rs  r}  r  Zexpanding_rowr=   r   r3   r  r  r  r  r  r  r  r;  r  r7  r:  r  r  rI   r  r:   r  Ziter_nth_childr$   r  r~  r#   rj  r<   ZEACCESZEPERM)r  r  r(   r'   r.   r  r   rz  r  r  r  rI  r  rl  rA  Zsharesr  r   r   r   r  6
  s    


$
$




&
$
z*NewPrinterGUI.on_tvSMBBrowser_row_expandedc             C   s   | j j| d S )N)r   r   )r  Zonr   r   r   set_btnSMBVerify_sensitivity
  s    z*NewPrinterGUI.set_btnSMBVerify_sensitivityc       	      C   s   t jt j d }| j|| |j }t|dj \}}}}}|rL| jj| |r\| j	j| |sd|rt|||dj
 }|j| | jjd n| jj dkr| jjd | jt| | j  d S )Nz	_-./:%[]@)r   )rS   r%  r  Tr   )stringascii_lettersdigitsentry_changedr  r
   r  r   r?  r   get_urir   r   r   r  r  rG  )	r  entallowed_charsr   rS   r%  r  r  r  r   r   r   on_entSMBURI_changed
  s     
z"NewPrinterGUI.on_entSMBURI_changedc             C   s`   | j j }|d krd S |j \}}d}|rH|j|d}|rH|jtjjk}| jj	|d k	oX| d S )NFr   )
r   r   r  r  r  rs  r}  r~  r   r   )r  r?   r%   r  r(   is_sharer  r   r   r   on_tvSMBBrowser_cursor_changed
  s    
z,NewPrinterGUI.on_tvSMBBrowser_cursor_changedc             C   s  | j  sdS | jjd ytj }|js0tj }|j }td }|st	j
| jddt	jjt	jjtdd}|dtd 7 }|j| |jtd	t	jjtdt	jj |j }|j  |t	jjkr|jtj |j  W n  tjtfk
r   t  Y nX | jj   | j!  dS )
z<Check whether the needed SMB client library is available andNFz

TzAdjust Firewall)r  r  r  r  r  r   z- z*Allow all incoming SMB/CIFS browse packetszDo It Later)"rt  r   r   rP  	FirewallDrunningSystemConfigFirewallZcheck_samba_client_allowedrN  r   r  rp   r  rQ  r  rR  r   rS  rT  rU  rV  rW  r  r[   rO  ZSAMBA_CLIENT_SERVICEr_  rY  rZ  r;  r:   r   r  r  )r  rv  rW   r\  r]  r  r  r   r   r   on_btnSMBBrowse_clicked
  s:     

z%NewPrinterGUI.on_btnSMBBrowse_clickedc             C   s   | j j j \}}d}|r8|j|d}|r8|jtjjk}| sD| rR| jj	  d S |j
|}|j
|}|j|d}|j|d}	|r|j|dj}
nd}
t|
|	j|jdj }| jjd | jjd | jj| | jj	  d S )NFr   r   )rS   r%  r  )r   r   r  r  r  rs  r}  r~  r   r>   Ziter_parentr3   r
   r  r   r?  r   r   )r  rv  r  r(   r  r  Zparent_iterZdomain_iterr  r%  rS   r   r   r   r   on_btnSMBBrowseOk_clicked
  s.    


z'NewPrinterGUI.on_btnSMBBrowseOk_clickedc             G   s   | j j  d S )N)r   r>   )r  r?   r:  r   r   r   on_btnSMBBrowseCancel_clicked  s    z+NewPrinterGUI.on_btnSMBBrowseCancel_clickedc             C   s   | j   d S )N)r  )r  rv  r   r   r   on_btnSMBBrowseRefresh_clicked  s    z,NewPrinterGUI.on_btnSMBBrowseRefresh_clickedc             C   s   | j j|j  d S )N)r   r   r  )r  r?   r   r   r   on_rbtnSMBAuthSet_toggled  s    z'NewPrinterGUI.on_rbtnSMBAuthSet_toggledc                s.  | j  sdS | jj }t|dj \ }}}}ddd}| jj }|r\| jj | jj d}	d}
t	| j
 y
d}t rd}|r fdd}tjj||d	}y
d
|_W n tk
r   Y nX |jd||f tjd}d
}	ntj| j
 d}tjj||jd	}xd|j dkrly |jd||f tjd}d
}	W n. tk
rf } z|j| W Y dd}~X nX q
W |	sxd
}
W nV tk
r } z(|j\}}tdt||f  |}W Y dd}~X n   t  Y nX t| j
 |	rtt dt d| j
d dS |
s*t d}|r|}t!t d|| j
d dS )z<Check whether the needed SMB client library is available andN)r   r   Fr   ry  c                s
    fS )Nr   )ZsvrZshrZwgZunZpw)rS   passwdr  r   r   do_auth#  s    z6NewPrinterGUI.on_btnSMBVerify_clicked.<locals>.do_auth)rz  r{  Tzsmb://%s/%si  )Z	workgroupr  r  zError accessing share: %szPrint Share VerifiedzThis print share is accessible.)r  z#This print share is not accessible.zPrint Share Inaccessible)"rt  r   r  r
   r  r   r  r   r   r=   rp   r  rs  r}  r  ZoptionUseKerberosr  openrJ   O_RDWRr  r  r  r;  r  r7  r:  rI   r  r:   r<   r  r   show_error_dialog)r  rv  r   r%  r  ur  reasonZauth_setZ
accessibleZcanceledrz  r  r  rW   r  rI  r  r   r   )rS   r  r  r   on_btnSMBVerify_clicked
  sz     








"



z%NewPrinterGUI.on_btnSMBVerify_clickedc             C   sT   |j  }|}x0|D ](}||kr|j|d}tdt|  qW ||krP|j| dS )zARemove all chars from entry's text that are not in allowed_chars.r   zremoved disallowed character %sN)r  rU   rI   r  r?  )r  r  r  Zorigtextr   charr   r   r   r  V  s    
zNewPrinterGUI.entry_changedc             C   s(   t jt j d }| j|| | j  d S )Nz_-./:%[]()@?=&)r  r  r  r  rG  )r  r  r  r   r   r   on_entNPTDevice_changeda  s    z%NewPrinterGUI.on_entNPTDevice_changedc             C   s(   t jt j d }| j|| | j  d S )Nz_-.:%[])r  r  r  r  rG  )r  r  r  r   r   r   "on_entNPTJetDirectHostname_changedf  s    z0NewPrinterGUI.on_entNPTJetDirectHostname_changedc             C   s   | j |tj | j  d S )N)r  r  r  rG  )r  r  r   r   r   on_entNPTJetDirectPort_changedk  s    z,NewPrinterGUI.on_entNPTJetDirectPort_changedc             C   s8   |j  }|j|\}}}}|j }|j||||| d S )N)Z
get_parentZquery_child_packingZget_expandedZset_child_packing)r  r?   UNUSEDr  expandZfillZpaddingZ	pack_typer   r   r   r   o  s
    	
z)NewPrinterGUI.on_expNPDeviceURIs_expandedc             C   s   |j |dS )Nr\   )r  )r  r.   r(   r[  r   r   r   r     s    z%NewPrinterGUI.device_row_separator_fnc             C   s&   |j |r|j| n|j|d d S )NF)r  r  rj  )r  r  r'   r
  r   r   r   r     s    
z"NewPrinterGUI.device_row_activatedc             C   s  | j }|j }|sd S |j| j}|j|s0d S | jd k	r>d S | jdkrTtd d S xB| jD ]8}x2|j	 D ]&}|j
dkrj|j|jkrjtd d S qjW q\W yP| jdks| jd dkrtj | _| jjstj | _td | jj| jd W n" tjtfk
r
   t  Y nX d S )	Nr   z3Skipping firewall adjustment: discovery in progressro   z4Skipping firewall adjustment: network printers foundr  r  zExamining firewall)r^  )ry   r   r    rF  r  rI  r   rI   r,  rh  rB  r   ru  r.  rP  r  r  r  readr^  rY  rZ  r;  r:   )r  r  r.   ro  rp  r   r   r   r   r.    s8    






zNewPrinterGUI.check_firewallc             C   s8   |j  }| s| rd S |j| j}||kr4| j  d S )N)r   r    rF  r.  )r  r  r(   r'   r.   ro  r   r   r   r     s    z!NewPrinterGUI.device_row_expandedc             G   s<   | j j }|j|}|j|ddk	r(dS | j| j |d dS )z
        Allow this path to be selected as long as there
        is a device associated with it.  Otherwise, expand or collapse it.
        rF   NTF)ry   r   r!   r  r   )r  r%   r.   r'   r  r(   r   r   r   r     s    

z$NewPrinterGUI.device_select_functionc             C   s>  g | _ d| _d| _d| _g | _|  jd7  _|j \}}|d krDd S |j }|j|}|j	|d}|d krnd S d}x|j
 D ]}|jdkrtd|_q~|jdkrtd|_q~|jdk rt|d	r|jj jd
dEkrtdd td |_n
td|_q~|jdkrtd|_q~|jdkr.td|_q~|jdkrRtdd td |_q~|jdkrjtd|_q~|jdkrtd|_q~|jdkr tjj|j\}	}
tjj|
\}}
tjj|
\}}
|dkr|d dkr|dd  }td| |_n
td|_q~|jdkrtd|_q~|jdkrtjj|j\}	}
tjj|
\}}
tjj|
\}}
|dkr|d dkrz|dd  }|jd r|d!d  }d"|jkrd#}d|_nd}|dkrd$td% d& ||f |_nd$td% | |_q~|jd'ks |jd(krtd)|_q~|jd*ks$|jd+krtjj|j\}	}
tjj|
\}}
tjj|
\}}
|dkrz|d dkrz|dd  }|d,krtd-|_|jdkr| jd&|j 7  _nhd }|jd.dFkrd%}n*|jd/dGkrd0}n|jd1dHkrd2}|d k	rtd3| |_n
td4|_q~d}|j|_q~W tjttj}| jj | t!|d5d dkrd}d}d}d}d }d6d7i}|j"r|j"}x|j
 D ]}|jdkrd}| j#|jrd}P n|jdIkr|d kr|jdJkrtjj|j\}	}
tjj|
\}}
|d k	rtjj$|\}}|rd}|jjd8s<|jjd9oF|jj%d:}|j& s^|j&d;krt| rt| j'||d< |j|d=< |j&|d>< |j(|d?< |j)|d@< qW | r|r| r|j& s|j&d;ks|j&j jds|j&j jdArt|dBr|j*r|j*}n|}| j+|dC}|rt,j-|f|}d|_|j.| | j#|jrTd}| j+|d
}|r| j/|}||d?< td|d=< t,j-|f|}tdd d |_|j.| |rd|_0d|_1t!|dDd |_0d}x*|j
 D ]}|j2|j|f |d7 }qW | jj3d}| jj4tj5 |d |r0| j6j7  n
| j6j8  d S )KNFrF   Trb   zParallel Portrm   zSerial Portrc   r   r7  Faxz - USBrd   Z	Bluetoothrg   z%HP Linux Imaging and Printing (HPLIP)rh   re   z Hardware Abstraction Layer (HAL)rj   zAppSocket/HP JetDirectrk   r   r   r  zLPD/LPR queue '%s'zLPD/LPR queuern   zWindows Printer via SAMBAr[  z	printers/	   r#  zDriverless z%sIPPz (%s)r  r  ZHTTPri   mdnsr1  zRemote CUPS printer via DNS-SDz._ippz	._printerLPDz._pdl-datastreamzAppSocket/JetDirectz%s network printer via DNS-SDzNetwork printer via DNS-SDchecked_hplipzdevice-classro   zdnssd:zmdns:z/cupsr  )r%  r   zdevice-infozdevice-make-and-modelz	device-idzdevice-locationZhewlettdnssd_hostnamer6  r  r   r   r   r   )rj   rk   r[  ri   r  )rj   rk   r[  )9r   r   r   r   r   r  r  r   r!   r  rh  ru  r   	menuentryr  r   r1   r  r   r   r   	splithost
splitqueryrH   r  r#  r   r   r   r   r   r}   r   r   Z_network_hostr5  Z	splitportr  rm  r  rl  r  r  r:  r<  rf  rg  r2  r  r  r#   rG  r7   rH  r|   r  r>   )r  r?   r'   r
  r.   r(   rn  Z	show_urisr   r   r   hostportZqueueZdrvlessr3   	cupsqueueprotocolZhp_drivabler  Z
is_networkZ
remotecupsr%  rg  r  Z	hpliphostZhplipurirq  r1  ZfaxdevidZfaxdevrA  r   r   r   on_tvNPDevices_cursor_changed  sP   






















z+NewPrinterGUI.on_tvNPDevices_cursor_changedc          	   C   s  |j  \}}|d krd S |j }|j|}|j|d}|| _| jjd | jj|j	| j
}| jj| td|j  d}|j	}	|jjddd8 }
|| jkrf|j	dkrtd}n|j	dkr
t|do|jj jd	d9k rtd
d td |_td}ntd}nL|j	dkr"td}n4|j	dkr:td}n|j	dkrRtd}n|j	dkrhtd}n|j	dks|j	dkrPtjj|j\}}tjj|\}}tjj|\}}|dkr|d dkr|dd  }|dkrtd}ndd }|jdd:krd}n*|jdd;krd }n|jd!d<kr.d"}|d k	rFtd#| }ntd$}n|j}| jj| n|j	d%krtjj|j\}}d}d&}|d%krtjj|\}}tjj||d'\}}td(|t|f  |jdkr|j}n|}| jj| | jjt | nt|j	d)kr>|j!sz|jjd*d}t"|dkr@|d }nd}|jd+}i }x$|D ]}|jd,\}}|||< qXW x| j#d-f| j$d.f| j%d/f| j&d0ffD ]\}}||kr*|j }|j' }d}xF|r
|j|dd }t |t || krP |j(|}|d7 }qW |r|j)| n
|j)d n
|j)d qW n<|j	d1kr| j*jd | j+jd | j+j,d  | j-j.d2 t"|jd3krz|jd3d  }|jd}|d=kr||d d  }|d | }nd}| j*j| | j+j| |}| j-j.d4 n|jd5kr| j/jd | j0j.d2 n\|j	d5krd| j1jd | j2jd | j/j|jd3d   | j3d4 n|jrz| j4j|j y`t"|dkr| jj5d6kr| j6d7ks| j6d dkrt7j8 }|d }n| j6}| j9j| W n   t:  Y nX | j;  d S )>NrF   r   z!Selected connection type. URI: %srZ  rb   z)A printer connected to the parallel port.rc   r   r7  r  z - r  zUA fax machine or the fax function of a multi-function device connected to a USB port.z"A printer connected to a USB port.rd   z"A printer connected via Bluetooth.rg   zUHPLIP software driving a printer, or the printer function of a multi-function device.rh   zUHPLIP software driving a fax machine, or the fax function of a multi-function device.re   z?Local printer detected by the Hardware Abstraction Layer (HAL).ri   r  r   r  r1  zRemote CUPS printer via DNS-SDz._ippr  z	._printerr  z._pdl-datastreamzAppSocket/JetDirectz%s network printer via DNS-SDzNetwork printer via DNS-SDrj   i#  )Zdefportzsocket: host is %s, port is %srm   r;  +r3  baudbitsparityflowrk   Fr`   Trn   Zdirectr  r   r   r   r   r   r   )<r  r   r!   r  r   r{   r?  new_printer_device_tabsr"   ru  rQ  rz   rO  rI   r   r`  rP  r   r  r1   r  r  r   r   r   r  r  Z
splitnportr  r  r   r   r   Zis_classr  r~   r   r   r   r*   r+   r   r   r   set_completionr   r   r   r   r   r   r  r   rB  r.  rJ   unamerx   r:   rG  )r  r?   r'   r
  r.   r(   r   pager  ru  rV   r   r   r   r3   r  r  r%  r  r  partsr   Zoption_dictr  r  r  rl  r5   r  r   r   r    on_tvNPDeviceURIs_cursor_changed  s   

















z.NewPrinterGUI.on_tvNPDeviceURIs_cursor_changedc             C   s(   |j  }| jjt|dk | j  d S )Nr   )r  r   r   r  rG  )r  r  rc  r   r   r   on_entNPTLpdHost_changed:  s    z&NewPrinterGUI.on_entNPTLpdHost_changedc             C   s   | j   d S )N)rG  )r  r  r   r   r   on_entNPTLpdQueue_changed?  s    z'NewPrinterGUI.on_entNPTLpdQueue_changedc       	         s  | j j }tj| | jjdtd d td  | jj| j	 | jj
  t| j  fdd}| jj| j | jjd|} j }| jj| | jjdt| _| jj  tjt}x|D ]}|j|g qW tj }|j| |jd |jd | jj| d S )	Nz"<span weight="bold" size="larger">r  z	</span>

zSearching for printersc                s    j   dS )NT)r[   )r?   r@   )serverr   r   r  M  s    z5NewPrinterGUI.on_btnNPTLpdProbe_clicked.<locals>.stopzdelete-eventr   )r   r  r@  Z	LpdServerr   
set_markupr   r   r   rp   r@  r=   r|  r   r   ZproberA   r>   r   r   r   r#   ZEntryCompletionr   Zset_text_columnZset_minimum_key_lengthr   r  )	r  rv  rc  r  signalr4   r.   r5   Z
completionr   )r  r   on_btnNPTLpdProbe_clickedB  s0    









z'NewPrinterGUI.on_btnNPTLpdProbe_clickedc             C   s   |j  }|jdd	kr||jd td|  | jj| | jj }|j| j}| jj	|dd | jj
dd | jjd
 d S tjtj d }| j|| |j  }| jjt|dk | jj  | j  d S )NrZ  rF   r   zURI detected (%s) -> Enter URIF)r'   Zstart_editingr   z_-.:%[]r   r   )r  r  r?  rI   r   ry   r   r    rD  r7   Zselect_regionZset_positionr  r  r  r  r   r   r  r   r>   rG  )r  r  r   r.   r'   r  r  r   r   r    on_entNPTNetworkHostname_changedd  s$    


z.NewPrinterGUI.on_entNPTNetworkHostname_changedc                sn    j j } fdd} jjd  j jd d _ jj   jj  t	j
 } j  |j|| | _d S )Nc                s     j d krd S tj j|  d S )N)r5  r   r  found_network_printer_callback)
new_device)r  r   r   found_callback}  s    
z?NewPrinterGUI.on_btnNetworkFind_clicked.<locals>.found_callbackFr   )r   r  r   r   network_foundr   r>   r   r  r@  ZPrinterFinderr  r  r5  )r  rv  r%  r  finderr   )r  r   on_btnNetworkFind_clickedz  s    


z'NewPrinterGUI.on_btnNetworkFind_clickedc             C   sx  t j  |r|  jd7  _t|}yh| jj|}| j| j| | jj \}}|r| jj	 }|j
|}|j|d| j| kr| j| j W n~ tk
r
   d|_| jj| | jj  | jj	 }|jd | j|j |dgd}| jdkr|j|}| jj|d d Y nX n^d | _| j  | jj  | jjd | jjd | jdkrl| jjdtd d  | jj   t j!  d S )	NrF   TF)r   r   z<i>z%No printer was found at that address.z</i>)"r   r  r  r   r,  r  rg  ry   r  r   r!   r  r  r  r  r#   r,   ri  rE  rC  r    r7   r5  r  r   r>   r   r   r   r   r  r   r  r  )r  r  rq  rl  r'   r
  r.   r(   r   r   r   r    sB    







z,NewPrinterGUI.found_network_printer_callbackc             C   s  | j dkr| jjS | jj}| jj|| j}|}|| jkrD| jj}n|dkr| jj	 }| j
j	 }|r|d| 7 }|r|d| 7 }nn|dkr| jj	 }| jj	 }|r|d| 7 }|r|d| 7 }n.|dkrjg }xf| jd	f| jd
f| jdf| jdffD ]>\}}	|j }
|j }|
j|d}|dkr|j|	d |  qW dj|}| jjjdd }|r|d | }n|dkr| jj	 }t|dj \}}}}}d}d}| jj r| jj	 }| jj	 }t|||||dj }|r|d| 7 }n
| jj	 }|S )Nr)  r   rj   z://rZ  rk   r  rm   r  r  r  r  rF   r   r3  r  r;  r   rn   )r   )rS   r%  r  r  r  )r)  r   ) r  r   r   ru  r  r"   rQ  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  ru  r  r   r%  r  r5   r   r?   r3   r.   r(   r  r   rS   r  r  r  r  r  r   r   r   r    sf    












zNewPrinterGUI.getDeviceURIc       	      C   s$  | j j }| jj }| jj }| jj| | jj| |r@| j}|rJ| j}|rT| j	}| j
j| | r| jrx| jD ]}| jj| qtW d | _| jj  d | _| jjd | jjtd tjtt}| j}|j| |jd x| j| jgD ]}|j| qW | jj|o| jd k | j  d S )NTr'  F)r   r  r   r   r   r   r   rP  rQ  rV  r   rO  r   r   r|  r{  r   r   r?  r   r   r   r   r   r   r   rG  )	r  r?   Zrbtn1Zrbtn2Zrbtn3r  r}  r.   r  r   r   r   rS    s<    





z'NewPrinterGUI.on_rbtnNPFoomatic_toggledc             C   s   | j   d S )N)rG  )r  r?   r   r   r   #on_filechooserPPD_selection_changed  s    z1NewPrinterGUI.on_filechooserPPD_selection_changedc             C   s   d| _ | jd k	rBx| jD ]}| jj| qW d | _| jj  d | _|jd | j}|jtd | j	j
 }tdt|  t | _g | _| jj| jjd| j | jj| jjd| j | jj| | jjd d S )NTFr  zSearching for "%s"r  r  )r   r   r   r|  r{  r   r   r?  r   r   r  rI   r  r   r#   r   opreq_user_search_doneopreq_user_search_errorr  r   )r  r?   r}  rJ  Z
searchtermr   r   r   (on_btnNPDownloadableDriverSearch_clicked   s,    





z6NewPrinterGUI.on_btnNPDownloadableDriverSearch_clickedc             C   s  x| j D ]}|j| qW d| _d | _ d | _d| _|| _|| _| j}| j}t	j
  yL|jtd |jd tjtt}t| jdkrt| jdkrtd}ntd}|jd }	|j|	d| |j|	dd g }
x | jD ]\}}|
j||f qW |
jtjdd	 d
 | jj j }d}xT|
D ]L\}}|jd }	|j|	d| |j|	d| |j |kr"|j|	d }q"W | j}|j| |j| |jd | j  W n   t  Y nX t	j   d S )NTr'  rF   z -- Select from search results --z-- No matches found --r   r   c             S   s   t j| d |d S )NrF   )r1  Z	modelSort)rD   r   r   r   r   r   [  s    z6NewPrinterGUI.opreq_user_search_done.<locals>.<lambda>)key)!r   r|  r  r   r   r   r  r   r   r   r  r?  r   r   r   r   r   r  r#   	set_valuer,   	functools
cmp_to_keyr   r  r1   r    r   r   r   rG  r:   r  )r  r   r4   r  r}  rv  rJ  r.   firstr(   Zsorted_list
printer_idZprinter_nameZsoughtZselect_indexrl  r3   r  r   r   r   r  :  sT    






z$NewPrinterGUI.opreq_user_search_donec             C   s*   t d|t|f  | j|t t  d S )Nz$OpenPrinting request failed (%d): %s)rI   r  r  rC   r  )r  r   r  r  r   r   r   r  n  s    z%NewPrinterGUI.opreq_user_search_errorc             C   sd   | j   | jd k	r`x| jD ]}| jj| qW d | _| jj  d | _| jjd | jjt	d d S )NTr'  )
rG  r   r   r|  r{  r   r   r   r?  r   )r  r?   r}  r   r   r   /on_cmbNPDownloadableDriverFoundPrinters_changeds  s    

z=NewPrinterGUI.on_cmbNPDownloadableDriverFoundPrinters_changedc             C   s2  t d d | _| jdkr| j}|j }|j }|r|j|d}|j|d}|dkr|jd |j }|r|j|d}|j|d}qd }d }qd }d }n| jd \}}|d krdd | jD }n|g}|r|| _t	j
ttj}d }d }x|D ]}| j| }	x|	j D ]}
d|
ks"t|
d dkrLtjs8| j|
 rLtd	|
d
   q|jd }|d krd|}|j|d|
d
  |j|d|
 |
d r|}qW qW |d krdS | jj  r| jdkr|jd }|j|dtd |j|dd |d kr|}| j}|j| |d k	r$|j j| | j| dS )NZfilldownloadableDriversTrF   r   r   c             S   s   g | ]}|d  qS )r   r   )r   rD   r   r   r   r     s    z9NewPrinterGUI.fillDownloadableDrivers.<locals>.<listcomp>r3  zRemoved invalid driver entry %sr3   recommendedFr*  zLocal Driver) r6  r   r  r   r   r  r  r   r   r   r   r   r   r   r  r2   r  r   r   r  rI   r#   r  r   r  r  r   r   r   r   Zselect_iter)on_tvNPDownloadableDrivers_cursor_changed)r  r?   r.   r(   r  Zprinter_strZprinter_idsZrecommended_iterZ
first_iterr  r  r-   r   r   r   r    sz    













z%NewPrinterGUI.fillDownloadableDriversc             C   s   | j   d S )N)rG  )r  r?   r   r   r    on_rbtnNPDownloadLicense_toggled  s    z.NewPrinterGUI.on_rbtnNPDownloadLicense_toggledc             C   s  d| _ | jj }| jj }|j  d}| jr<tjj| j}nd }x|D ]}|o\tjj||k}| j	r~| j	j
r~|r~|td }n|}|j||f}|rF|j|}	| jj|	d d | jj|	d ddd d}qFW |s| jjtj d d | jjdd ddd d}
| j	rd| j	jrd| j	j}|d r>|d	 r>|d d
 |d	  }
n&|d rR|d }
n|d rd|d }
|
dkr| jd k	r|
| j7 }
| jd k	r|
d
| j 7 }
|
jds|
jdrd}
| jj|
 d S )NFz (recommended)Tg      ?r   g        r   r  r  rG   r  r  r  )recommended_make_selectedr3  ZgetMakesr   r   r   rh  r<  	normalizer   rm  r   r#   r    r7   rk  r   rH  r  ri  rH   r   r?  )r  Zmakesr.   foundZauto_make_normr  r  r   r(   r'   rR   Z
devid_dictr   r   r   r    sR    









zNewPrinterGUI.fillMakeListc             C   sv   |j  \}}|d k	rr| jd k	rr|j }|j|}|j|dd | _| jobtjj| jtjj| jk}|| _	| j
  d S )NrF   r   )r  r3  r   r!   r"   NPMakerh  r<  r  r  fillModelList)r  r   r'   r
  r.   r(   Zrecommended_maker   r   r   on_tvNPMakes_cursor_changed  s    
z)NewPrinterGUI.on_tvNPMakes_cursor_changedc             C   s  d| _ | jj| j}| jj }|j  d}tjj| jtjj| j	k}|rXtjj| j
}x|D ]}|ottjj||k}| jr| jjr|r|td }n|}|j||f}	|r^|j|	}
| jj|
d d | jj|
d ddd d}q^W |s| jjtj d d | jjdd ddd | jj  d S )NFz (recommended)Tg      ?r   g        )r   r3  Z	getModelsr  r   r   r   r<  r  rh  ri  r   rm  r   r#   r    r7   rk  r   rH  columns_autosize)r  Zmodelsr.   ZselectedZis_auto_makeZauto_model_normpmodelr  r   r(   r'   r   r   r   r    s6    





zNewPrinterGUI.fillModelListc             C   s  || _ | jj }|j  | jr(| jj}nd }| jrj| jjrj| jrj| jrj| jj}| j| _	t
dt| j	  n| jr|d | }| jj||}t|j }| j}y| jj||||| _	W n   t  || _	Y nX | jo| jr,g }	x2| j	D ](}
|
| jkr|	jd|
 q|	j|
 qW |	| _	nt
d g | _	g }g }d}x| j	D ]}| jj|}t|d }
|
jdd}
ydt|d	  }|
|7 }
W n tk
r   Y nX |
|k}| jo| jj r(| j|kr(|j|
 |j| |d
7 }|j|
td f}|j|}| jj j| | jj|d ddd n| jr|dkr|j|
 |j| |d
7 }|j|
td f}|j|}| jj j| | jj|d ddd n2|rqB|j|
 |j| |d
7 }|j|
f qBW || _	| jj  d S )NzID matched PPDs: %srG   r   zNo PPDs available?zppd-make-and-modelz (recommended)r   z [%s]zppd-natural-languagerF   z
 (Current)Tg      ?g        ) NPModelr   r   r   r   r  rm  r   r  	NPDriversrI   r  r3  r   rC   rt  r   r  r:   rj  insertr#   r  rE   rU   KeyErrorr   r    r   Zselect_pathrk  r  )r  Zpmaker  r.   r-  rm  r3  Zppdnamesfilesr  r  Z
driverlistr  rl  r  r   ZlpostfixZ	duplicater(   r'   r   r   r   r	  1  s    









zNewPrinterGUI.fillDriverListc             C   s   |r|j  d }|d krNdS n0|j||\}}|j||}	|	d krFdS |	d }| j|d  }
| jj|
}t|d }|
jdr|d7 }|td7 }|j	| dS )Nr   Fzppd-make-and-modelz	foomatic:rG   z"This PPD is generated by foomatic.T)
r  Z#convert_widget_to_bin_window_coordsZget_path_at_posr  r3  r  rE   rH   r   r  )r  ZtvrD   r   Zkeyboard_modeZtooltipr'   Zbin_xZbin_yr  Z
drivernamer  Zmarkupr   r   r   r    s"    

z(NewPrinterGUI.on_NPDrivers_query_tooltipc             C   sx   |j  \}}|d k	rt|j }|j|}|j|dd }| joR| joR| jj |j k}|| _| j| j	| | j
| j d S )NrF   r   )r  r   r!   r"   r  ri  r1   r   r	  r  on_tvNPDrivers_cursor_changedr   )r  r?   r'   r
  r.   r(   r  Zrecommended_modelr   r   r   on_tvNPModels_cursor_changed  s    
z*NewPrinterGUI.on_tvNPModels_cursor_changedc             C   s   | j   d S )N)rG  )r  r?   r   r   r   r    s    z+NewPrinterGUI.on_tvNPDrivers_cursor_changedc          
   C   s  | j jd | jjd | jjd | jjd | jjd | jj  |j	 }|d krZd S |j
 \}}|s|j \}}|r|j|}nd S |j|d}|dkr| jj| j | j  d S | jj| j |jdtd}| j}	|d }
dd	 }||	|
 | j j| |jd
td}| j}| j}|||d  |||d  | jj| |jdtd}| jj| d|kr|d }xd&D ]}|j }d }| jjd| }| jjd| }||kr|ry6t|| }|jdd |j| |j  |j  W n   Y nX |d krz|j  |j  qzW d}d|krx|d D ]}|d r6d|d  }d}|d rj||d  }|d r|r|td }||d  }|r6|td|  }|r|d }|| }q6W |std }| jj| d!|kr| jj  |jd!td"}| j j! j| n
| jj  |d#  rX|d  rX| j"jd | j"j  | jj  nJ| jjd | j"j  | jj  | jj  |jd!td"}| j j! j| d$|krt#|d$ dkrd| _$nd%| _$| j  d S )'Nr   TrF   r   supplierZOpenPrintingZmanufacturersuppliedc             S   s   || _ | j| d S )N)r   r   )r?   r   r   r   r   set_protect_active  s    zSNewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changed.<locals>.set_protect_activelicenseZDistributablepatentsZfreesoftwareZshortdescriptionr   functionalityGraphicsLineArtPhotoTextzhsDownloadableDriverPerf%sz"lblDownloadableDriverPerf%sUnknownr!  supportcontactsr3   z - rV   levelz, z
(%s)r/  zNo support contacts knownZlicensetextzNot specified.Znonfreesoftwarer3  F)r	  r
  r  r  )%r   r?  r   r   r   r   r   r   r>   r   r  r  r!   r  r   rO  rP  rG  rQ  r"   r   r   r   r   r  r1   __dict__r  Z	set_ranger  r  r  r   Z
get_bufferr   r  r   )r  r?   r%   r.   r(   r'   r
  r  r  Zvendorr   r  r  r  ZfreeZdescriptionr  Zfieldr  r  Zhsunknownr  ZsupportentryZsupportcontactZsupportcontact_extraZtermsr   r   r   r    s    



















z7NewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changedc             C   s.  d }y6| j j s t| jdkrV| jdkrV| jj j \}}|j|d }| j	| }n| j
j rrtj| jj }n| j}|j j \}}|j|d}|dkod|kr8t|d dkr8|d d }td| d  |j }t|dkr8tjj|}|j }	|j  tj $}
|
j|	 |
j  tj|
j}W d Q R X W n> tk
rz } ztdt|  | j j rtd}td	}| jj j \}}|j|d }| j	| }|j d
rtdd }n||| j!| j"f }n| j
j rNtd}| jj }tdd }y<t#j$dd|gdt#j%t#j&t#j&d}|j' \}}||j( 7 }W n    Y nX ntd}td}t)||| j* d S d }~X nX tdt|  t+|t,r*| jj-td y.|dkr| jj.|}tj|}t/j0| W nH tk
r   t1  td Y n& tj2k
r   t1  td Y nX | jj3  |S )Nr   FrF   r3  zppd file to download []zRuntimeError: zDatabase errorz4The '%s' driver cannot be used with printer '%s %s'.Z
gutenprintzFYou will need to install the '%s' package in order to use this driver.zgutenprint-foomaticz	PPD errorz2Failed to read PPD file.  Possible reason follows:r/  z/usr/bin/cupstestppdz-rvvT)r  r  r  r  zDownloadable driverszFailed to download PPD.zppd: zfetching PPDr  z/libcups from CUPS 1.3 not available: never mindz)CUPS 1.3 server not available: never mind)4r   r  r  r   r   r   r   r  r    r  r   r1  r  r   r  r   r  rI   rT   r   r  Zurlopenr  closetempfileZNamedTemporaryFiler_  flushr3   r7  r  r   rH   r  r  r  r  r  r  r0  rN   r  rp   rB   r   rc  ZgetServerPPDrJ   unlinkr:   r>  rk  )r  r   r.   r(   r  r-   r  Zfile_to_downloadZ	ppdurlobjZ
ppdcontentZtmpfrI  Z	err_titleZerr_textr  filenamer  r  r  rW   r   r   r   r  /  s    











zNewPrinterGUI.getNPPPDc             C   s  t d d| _i | _| j}x|j D ]}|j| q$W | jsjtjt	dd}|j
| |j  t d d S x0| jjD ]"}|jdkrqvd| _tj }|jd |jd |j
| d	}xt|jD ]\}}|jd
krq|d7 }t|| j| }	|j|	jd	|dd tj }
|	jrftjjdddd}|jd	d	d	d |j
|	j |j|d|dd |j|
d|dd n|j|
d|dd |
j|	jddd	 |	| j|j< qW qvW | jstjt	dd}|j
| |j  | jj  | jj  d S )NzExamining installable optionsFzNo Installable Options)rJ  z No PPD so no installable optionsZInstallableOptionsTr`   r   Z
PageRegionrF   g      ?g      ?r\   ) rI   r   r   r   Zget_childrenr$   r   r   ZLabelr   r  r  ZoptionGroupsr3   ZGridZset_column_spacingZset_row_spacing	enumeratekeywordr	   ZattachZconflictIconZBoxrJ  Z	Alignmentr   Zset_paddingr   Zselectorr   r>   r  )r  Z	containerZchildlrS   Zgridr&   r  r  oZhboxar   r   r   r    sV    







z&NewPrinterGUI.fillNPInstallableOptionsc          =   C   s  | j r| j j  d | _ | j  | jr4| jj  d | _| jrR| jj  d | _| j  | jdkr|| jj }| j	j }| j
j }n| j}| j}| jdkrt| j}y<x6|D ].}y| jj|| W q tk
r   wY qX qW W n: tjk
r } z|j\}}	| j||	 d S d }~X nX n| jdks2| jdkrd }
| jjrJ| jj}
n| j }
| jsh| jd d S x| jj D ]}|j  qtW t| j xtj rtj   qW | jj!t"d|  ypt#|t$r| jj%|||
||d nH|d kr| jj%||
||d n(t&j'|| j(d  | jj%|||
||d	 W nt tjk
r| } z.|j\}}	t)| j | j||	 | jj*  d S d }~X n(   t)| j | jj*  t+d Y nX | jj*  t)| j | jdkrZ| jj!t"d
|  y.t&j,| j| | jj-|| | jj.|| W nD tjk
rJ } z$|j\}}	| j||	 | jj*  d S d }~X nX | jj*  n| jdkr| jj!t"d
|  y| j }
| jj%||
d W nD tjk
r } z$|j\}}	| j||	 | jj*  d S d }~X nX | jj*  nn| jdkrB|s| j/  }| _|s| jd d S | jj!t"d
|  d}t#|t$r~| j0j1 ry| jj%|dd W n< tjk
r } z|j\}}	| j||	 W Y d d }~X nX y| jj%||d W nD tjk
r } z$|j\}}	| j||	 | jj*  d S d }~X nX y$| jj2|}tj3|}t4j5| W n\ tjk
rz } z<|j\}}	|tj6krPd}n| j||	 | jj*  d S W Y d d }~X nX n| j0j1  rt#| j7tj3rt&j8| j7| nt&j'|| j(d  x| jj D ]}|j  qW y| jj%||d W nD tjk
r4 } z$|j\}}	| j||	 | jj*  d S d }~X nX | jj*  n| jdkrX| jd | jj9  | jdkr|| j:d| n2| jdkr| j:d| j; n| j:d|| j7| jk d | _i | _<d S )Nr(  r5   r)  rF   zadding printer %s)r  r   r  r  )r   r  r  r   )r   r   r  r  zmodifying printer %sr   )r   r   Fr  )r  T)r   r*  zprinter-addedzdriver-download-checkedzprinter-modified)r(  r5   r)  r   )r(  r5   r)  r   )r5   r)  r(  )=r2  r[   r  r   r5  r{  r  rv   r  rx   rw   r0  r   r0   r   r1  ZaddPrinterToClassr7  r>  r:  r  r   r   r  rX  r   r2   Z	writebackr=   rp   r   r8   r9   rc  r   rB   r   Z
addPrinterr<  ZsetPPDPageSizer   r<   rk  ZfatalExceptionZactivateNewPrinterZsetPrinterLocationZsetPrinterInfor  r   r  ZgetPPDr  rJ   r  ZIPP_NOT_FOUNDr,  ZcopyPPDOptionsr>   r$  r   r4   )r  r?   r3   r  r  r   membersmemberrI  msgr   r  r  r  r   r   r   on_btnNPApply_clicked  s$   





































z#NewPrinterGUI.on_btnNPApply_clicked)NNNr   NNNr   )N)rF   )FN)NN)N)F)ru  rv  rw  r   ZSignalFlagsZRUN_LASTr   r  Z__gsignals__rP  rQ  rV  r  r  r  r  rY  r  r  r  r   r  r  r  r  r  r  r  r#  r[   rK  r6  rB  rA  rC  rD  rF  rE  rL  rU  rW  re  rr  ro  rN  rw  rx  ry  rz  r~  r  r  r  r  r  r  rX  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  rG  r  r!  r"  r(  r%  r'  r+  r2  r5  r:  r  rR  r^  rX  rJ  r)  rt  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  rS  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r   r   r   r   rZ      sB    " a	
	
(:1e #"EdO4 
$S*& $Hb'L+	 M &".:(4N2 ave
6rZ   c               C   s   t d d S )Na  
This is the test/debug mode of the new-printer dialog of system-config-printer.

Options:

  --setup-printer URI
            Select the (detected) CUPS device URI on start up
            and run the new-printer wizard for it.

  --devid   Supply a device ID which should be used for the
            setup of the new printer with "--setup-printer".
            This can be any printer's ID, so that driver 
            selection can be tested for printers which are not
            physically available.
)r6  r   r   r   r   	show_help  s    r   __main__rF   r   zsetup-printer=zdevid=z--setup-printerz--devidZuiZSYSTEM_CONFIG_PRINTER_UIc              G   s   t j  d S )N)r   Z	main_quit)r:  r   r   r   	on_signal  s    r"  zprinter-addedzprinter-modifiedzdialog-canceledr)  )rH  r-  r5   )N)Xr   r8  r<  r   r  sysrJ   r  r  	tracebackrO   Zhttp.clientr  r   r  r  ZtimedopsrY  Zgi.repositoryr   r   rL   r  r1  rs  rr  r   r   r   Zguir   Zoptionwidgetsr	   rz  r@  Zurllib.requestr   Zurllib.parseZsmburir
   Zerrordialogsr   rP  rb  r   r-  r  gettextinstallr   r   r   rN  r   r)   r0   r6   r<   r=   rA   rE   rY   rZ   r   ru  ZgetoptZ
gnu_getoptargvr  r:  ZGetoptErrorexitZsetup_printerr-  ZoptZoptargr  Z	ppdippstr	setlocaler  rK  Zset_debuggingZset_debugprint_fnrI   rA  r"  r   mainr   r   r   r   <module>   s   8
	


8                                 _







