U
    9¡_#Ê ã                   @   s6  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z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r2d dlAZAz$eA BejCd'd… d(d)d*g¡\ZDZEW n( eAjFk
r`   e?ƒ  e Gd'¡ Y nX dZHd(ZIeDD ](\ZJZKeJd+kr†eKZHneJd,krneKZIqnd-ejLd.< d dlMZMe NejOd(¡ eM P¡  eQdƒ e ReS¡ e>ƒ ZTd/d0„ ZUeT Vd1eU¡ eT Vd2eU¡ eT Vd3eU¡ eHdk	r eTjPd4eHeId5 n
eT Pd6¡ e W¡  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 | ¡\}}|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           	         sn   |   ¡ }| ¡ \‰ }‡ fdd„|D ƒ}| ¡ }|D ]6}| ¡ }ˆ  |¡}ˆ  |d¡}| |¡ ˆ  |¡ q2d S )Nc                    s   g | ]}t 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   sF   |   ¡ }| ¡ }g }|r:| | |d¡d ¡ | |¡}q| ¡  |S ©Nr   )r    Úget_iter_firstr$   r#   Ú	iter_nextÚsort)ÚtreeviewÚmodelr)   Úresultr   r   r   ÚgetCurrentClassMembersc   s    r2   c                 C   s<   |sdS |  ¡ }|  ¡ D ]}|js|j  ¡ |kr dS qdS )NFT)ÚlowerÚvaluesZ
discoveredÚname)Úprintersr5   Úprinterr   r   r   ÚcheckNPNamem   s     r8   c                 C   sD   z,|   ¡ }|r*| |¡ t ¡ r*t ¡  q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 tjj¡ƒ d S r9   )r?   r   ZCursorr   Z
CursorTypeZWATCH)r>   r   r   r   Úbusy   s    r@   c                 C   s   |   ¡  dS ©NT)Úhide©ÚwidgetÚeventr   r   r   Úon_delete_just_hide‚   s    rF   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    
rJ   c           	      C   sÊ   |   d¡std|  ƒ dS dddg}d}d}|D ]}tj |¡r0|} qJq0|sZtdƒ dS ztj| |d	}|j d
¡}W n   td|  ƒ Y dS X t	 
dt	j¡}| |¡}|rÆ| d¡ ¡  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verifyú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reqrS   Zkeyid_reÚmr   r   r   Údownload_gpg_fingerprint   s6    
ú
r_   c                   @   s”  e Zd Zejjdd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d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#d0d1„ Z$d2d3„ Z%d4d5„ Z&d6d7„ Z'd8d9„ Z(d:d;„ Z)d<d=„ Z*d>d?„ Z+d@dA„ Z,dBdC„ Z-dDdE„ Z.dFdG„ Z/dHdI„ Z0ddJdK„Z1dLdM„ Z2dNdO„ Z3dPdQ„ Z4dRdS„ Z5dTdU„ Z6dVdW„ Z7ddXdY„Z8dZd[„ Z9d\d]„ Z:d^d_„ Z;d`da„ Z<dbdc„ Z=ddde„ Z>dfdg„ Z?dhdi„ Z@djdk„ ZAdldm„ ZBdndo„ ZCdpdq„ ZDdrds„ ZEdtdu„ ZFdvdw„ ZGdxdy„ ZHdzd{„ ZIdd|d}„ZJd~d„ ZKd€d„ ZLd‚dƒ„ ZMd„d…„ ZNd†d‡„ ZOdˆd‰„ ZPdŠd‹„ ZQddŒd„ZRd	dŽd„ZSdd‘„ ZTd’d“„ ZUd”d•„ ZVd
d–d—„ZWd˜d™„ ZXdšd›„ ZYdœd„ ZZdždŸ„ Z[d d¡„ Z\d¢d£„ Z]d¤d¥„ Z^d¦d§„ Z_d¨d©„ Z`dªd«„ Zad¬d­„ Zbd®d¯„ Zcd°d±„ Zdd²d³„ Zed´dµ„ Zfd¶d·„ Zgd¸d¹„ Zhdºd»„ Zid¼d½„ Zjd¾d¿„ ZkdÀdÁ„ ZldÂdÃ„ ZmdÄdÅ„ ZndÆdÇ„ ZodÈdÉ„ ZpdÊdË„ ZqdÌdÍ„ ZrdÎdÏ„ ZsdÐdÑ„ ZtdÒdÓ„ ZudÔdÕ„ ZvdÖd×„ ZwdØdÙ„ ZxdÚdÛ„ ZydÜdÝ„ ZzdÞdß„ Z{dàdá„ Z|dâdã„ Z}dädå„ Z~dædç„ Zdèdé„ Z€dêdë„ Zdì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„ ZdS (  ÚNewPrinterGUINr   )Údestroyúprinter-addedúprinter-modifiedúdriver-download-checkedúdialog-canceledr   rL   é   é   é   é   é   é   TF)ÚparallelÚusbÚ	bluetoothÚhalÚbehÚhpÚhpfaxÚdnssdÚsocketÚlpdÚscsiÚserialÚsmbÚnetworkc              N   C   sÚ  t j  | ¡ t 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 | 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fD ]`\}}t# $t%t%¡}|D ]}| &|¡ q8| '|¡ t# (¡ }| )¡  | *|dm¡ | +|dndo¡ q t#j,j-}t#j,j.}t#j,j/}tdpƒt# $t%¡| j0|ftdqƒt# $t%¡| j1|ftdrƒt# $t%¡| j2|ftdsƒt# $t%¡| j3|ftdtƒt# $t%t%¡| j4|ftduƒt# $t%t%¡| j5|ftdvƒt# $t%¡| j6|ftdwƒt# $t%¡| j7|ffD ]H\}	}
}}t# (¡ }t#j8|	|dodx}| '|
¡ | 9|¡ | :¡  ;|¡ qR| j< =dyt>¡ | j? =dyt>¡| _@| jA Bd¡ | jC Bd¡ | jD Bd¡ | jE Bd¡ do| _Fd | _Gd | _H| jI}t# (¡ }| *|dm¡ | +|dndo¡ tjJrH| jK| jLfD ]}| M¡  q8tNjO Pdz¡sdtNjO Pd{¡rrd|t_Qd}| _Rn"tNjO Pd~¡rŽdt_Qd€| _Rndmt_Sdd‚„ }| jT| jK| jLfD ]}| =dƒ|¡ q¬| jU| jV| jW| jXfD ]}| =d„d…d†„ ¡ qÔ| j2 :¡ }| Y| jZd ¡ | j2 [| j\d ¡ | j2 =d‡| j]¡ | j2 =dˆ| j^¡ | j_ =d‰| j`¡ | j_ adŠ¡ t# bt jc¡| _d| je fdm¡ | jg '| jd¡ t# 8td‹ƒ¡}t# (¡ }| *|d¡ | h|| jid ¡ | jg 9|¡ t# 8tdŒƒ¡}t# (¡ }| *|d¡ | h|| jjd ¡ | jg 9|¡ | jg :¡ }| Y| jkd ¡ | j< l| jm¡ | j6 ndm¡ | j6 =d| jo¡ t# p¡ }| qtdŽƒ¡ | rd¡ | rd¡ | rd‘¡ | rd’¡ | rd“¡ | js t|¡ t# p¡ }| qtd”ƒ¡ | rd•¡ | js t|¡ d–| _ud—| _v|  w¡  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)rz   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Ë   ú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|  |¡ 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 rA   r   )rI   ÚyÚzr   r   r   Ú<lambda>×  ó    z(NewPrinterGUI.__init__.<locals>.<lambda>zrow-activatedzrow-expandedznotify::expandedrL   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   éÿÿÿÿr7   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_rerunr6   Ú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Ÿ   rƒ   r‡   r¤   r¬   r­   r²   ZTreeViewColumnZappend_columnr   Zset_moderÅ   ÚconnectrF   rÃ   ÚWaitWindow_handlerr{   Zset_show_tabsr¢   r„   r³   Úspinner_countÚopreqÚopreq_handlersr«   ZDOWNLOADABLE_ONLYFREEr¸   r·   rB   rP   r(   rQ   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_forrz   Zset_has_tooltipÚon_NPDrivers_query_tooltipZ
FileFilterZset_nameZadd_patternr¦   Z
add_filterÚdevice_selectedÚdialog_modeZconnect_signalsrO   )ÚselfrD   ÚoptsÚstorer   Úcellr^   ÚsÚbr5   r0   r/   Zselection_modeÚcolumnÚcomboboxrÑ   ZslctÚcolZ
ppd_filterr   r   r   rÙ   ò   s   ´Nÿþ®VªZ
øÿ



ýÿ
þÿ




üÿêÿ
 ÿ ÿ÷

ÿÿÿþýÿ
ÿ






zNewPrinterGUI.__init__c                 C   s   t d|  ƒ d S )Nz-%s)rO   ©r  r   r   r   Ú__del__  s    zNewPrinterGUI.__del__c                 C   sR   t d|  ƒ | jr"| j ¡  d | _| jr8| j ¡  d | _| jrN| j ¡  d | _d S )NzDESTROY: %s)rO   rÅ   ra   rz   rÃ   r  r   r   r   Ú
do_destroy  s    


zNewPrinterGUI.do_destroyc                 C   s0   | j dkr| j ¡  | j ¡  |  j d7  _ d S )Nr   rL   )rû   r   ÚshowÚstartr  r   r   r   Úinc_spinner_task#  s    


zNewPrinterGUI.inc_spinner_taskc                 C   s0   |  j d8  _ | j dkr,| j ¡  | j ¡  d S ©NrL   r   )rû   r   rB   Ústopr  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)rO   ÚreprÚshow_IPP_Errorrz   )r  Z	exceptionÚmessager   r   r   r%  0  s    ÿzNewPrinterGUI.show_IPP_Errorc                 C   sN   |  ¡ r| j |¡ n| j |¡ |jr6| j |¡ n| j |¡ |  ¡  d S r9   )Z
is_changedrß   ÚaddÚdiscardrà   ÚsetDataButtonState)r  Úoptionr   r   r   Úoption_changed5  s    zNewPrinterGUI.option_changedc                 C   s   | j  t| jƒ ¡ d S r9   )r}   r  Úboolrà   r  r   r   r   r)  C  s    z NewPrinterGUI.setDataButtonStatec                 C   st   |  dd¡}|  dd¡}|  dd¡}t| j|ƒspd}t| j|d t|ƒ ƒs`|d7 }|dkr4q`q4|dt|ƒ 7 }|S )z-Make a suggested queue name valid and unique.rM   ú-ú/ú#rf   rL   éd   )r[   r8   r6   rõ   )r  r5   Úsuffixr   r   r   ÚmakeNameUniqueF  s    zNewPrinterGUI.makeNameUniquec                 C   s   |   d¡ d S )Nra   )Úemitr  r   r   r   ra   T  s    zNewPrinterGUI.destroyr   c
              
   C   s  || _ | j s| j d¡ || _|| _|| _|| _|| _|| _|| _	|sPt
 ¡ | _|s^t
 ¡ | _i | _tƒ | _tƒ | _d | _d | _d | _d | _|  ¡ s˜t‚ztj| j| j| jd| _
W n t
jk
rò }
 z|
j\}t|| j ƒ W Y ¢dS d }
~
X Y nT tk
r   td| j ƒ Y dS  tk
rD }
 zt|
ƒ W Y ¢dS d }
~
X Y nX zt | j
¡| _ W nF t
j!k
rž }
 z$|
j\}
}t"|
|| j d W Y ¢dS d }
~
X Y nX | j# $¡  | j% &d¡ | j% 'd¡ | j( &d¡ | j) $¡  | j* +¡ }| ,¡  | j-}| .t/ 0t1t1¡¡ | j2 'd¡ | j3}| 't4dƒ¡ | j5 'd¡ | j6 7d¡ |	d	krd| j rd| j 8¡  | j 9| j ¡ | jd
krz|  :¡  np| jdkr|  ;¡  nZ| jdkr¦|  <¡  nD| jdkr¼|  =¡  n.| jdkrÒ|  >¡  n| jdkrê|  ?¡  dS |	d	kr| j r| j 9|¡ | j @¡  |  A¡  dS )NF)r#  ÚhostÚ
encryptionrØ   r"  Tr   ÚSearchZ9100r   r7   Úclassrá   Úprinter_with_urirâ   Údownload_driver)Br#  rz   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ÚgetPrintersr6   ÚIPPErrorr%  r›   rB   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_urir5   râ   r<  r4  r5  r#  ZxidÚer  r^   r0   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 )N)r8  rá   râ   r9  r   T)r  r:  r<  r  r   r   r   rE  ¹  s
    



z"NewPrinterGUI._validInitParametersc                 C   s4   |   d¡ | j tdƒ¡ |  ¡  | j | j¡ d S )Nr7  z	New Class)Ú_initialiseWidgetsForModerz   Ú	set_titleró   ÚfillNewClassMembersr{   Úset_current_pageÚPAGE_DESCRIBE_PRINTERr  r   r   r   rQ  À  s    
z"NewPrinterGUI._initialiseClassModec                 C   sL   |   d¡ | j tdƒ¡ | j | j¡ |  ¡  | j 	d¡ |  
| j¡ d S )Nr7   úNew PrinterT)r[  rz   r\  ró   r{   r^  ÚPAGE_SELECT_DEVICEÚfillDeviceTabr¥   rÏ   Úon_rbtnNPFoomatic_toggledr  r   r   r   rP  É  s    
z$NewPrinterGUI._initialisePrinterModec                 C   s.   | j  tdƒ¡ | j | j¡ |  | j¡ d S )NzChange Device URI)rz   r\  ró   r{   r^  ra  rb  r:  r  r   r   r   rR  Ó  s    z#NewPrinterGUI._initialiseDeviceModec                 C   sl   |   d¡ |  ¡  | j tdƒ¡ | j | j¡ | j 	d¡ |  
| j¡ | j 	d¡ |  ¡  | jdd d S )Nr7   r`  Tr   ©Ústep)r[  Ú_initialiseDeviceFromURIrz   r\  ró   r{   r^  ÚPAGE_SELECT_INSTALL_METHODr¥   rÏ   rc  r¯   Ú_initialiseAutoVariablesÚ	nextNPTabr  r   r   r   rS  Ø  s    
z+NewPrinterGUI._initialisePrinterWithURIModec                 C   s4   | j  tdƒ¡ | j | j¡ d| _| jdd d S )NzDownload Printer DriverTr   rd  )rz   r\  ró   r{   r^  ÚPAGE_DOWNLOAD_DRIVERrí   ri  r  r   r   r   rU  æ  s    z+NewPrinterGUI._initialiseDownloadDriverModec                 C   sÈ   |   ¡  | j tdƒ¡ | jsŠt| j dd¡d ƒ}|g}|dkrP| ddg¡ t	 
¡ | _| j tdƒ¡ |  ¡  tj| j|| j| jd	 | j | j¡ | j d
¡ |  | j¡ | j d
¡ |  ¡  d S )NzChange Driverú:rL   r   ©rt   ru   ÚippÚsnmprs   úfetching device list©Zinclude_schemesÚreply_handlerÚerror_handlerT)rf  rz   r\  ró   r<  rõ   r:  ÚsplitÚextendÚ	asyncconnrH  rA  Ú_begin_operationr  rK  Ú
getDevicesÚchange_ppd_got_devsr{   r^  rg  r¥   rÏ   rc  r¯   rh  )r  r   Zschemesr   r   r   rT  í  s(    
ýz NewPrinterGUI._initialisePPDModec                 C   sH   | j  |  |¡¡ | j  ¡  | j| j| j| j| jfD ]}| d¡ q4d S ©Nr   )	r€   rN  r2  Z
grab_focusr‚   r   r‘   r–   r—   )r  Z	mode_namerD   r   r   r   r[    s    
 ýz'NewPrinterGUI._initialiseWidgetsForModec                 C   s   i }t j| jf|Ž| _d S r9   )rK  ÚDevicer:  rá   )r  Údevice_dictr   r   r   rf    s    z&NewPrinterGUI._initialiseDeviceFromURIc                 C   s   d| _ d| _d | _d S ry  )Ú	auto_makeÚ
auto_modelÚauto_driverr  r   r   r   rh    s    z&NewPrinterGUI._initialiseAutoVariablesc                 C   s’   | j  ¡  | j  ¡  d | _ |  ¡  t|tƒr2i }n|}d }d }| jdkrP| j}n$| | jj	¡}|rt|j
}|j}|| _| j | j¡ | jdd d S )Nr   r   rd  )rA  Ú_end_operationra   r!  rG   rJ  r<  r#   rá   r   ÚidÚmake_and_modelr{   r^  rg  ri  )r  Úconnr1   Zcurrent_devicesr<  Zmmrá   r   r   r   rx    s$    



z!NewPrinterGUI.change_ppd_got_devsc                 C   sX   |   |¡ | jsdS |jr d| _tdƒ d| _| j ¡ | jkrL| j	dd n|  	¡  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   rd  )
Ú_getPPDs_replyrB  Ú_jockey_has_answeredrè   rO   rí   r{   Úget_current_pagerg  ri  )r  ræ   r   r   r   Úon_ppdsloader_finished_next2  s    
z)NewPrinterGUI.on_ppdsloader_finished_nextc              
   C   sª   |  ¡ }|r^| ¡  z|‚W n@ tjk
r\ } z |j\}}|  ||¡ W Y ¢d S d }~X Y nX | ¡ }|rŒ|| _| ¡ | _	|j
r˜| ¡ | _nd | _d | _	| ¡  d | _d S r9   )Z	get_errorra   r@  rM  rI  r%  Zget_ppdsrB  Zget_ppdsmatch_resultrC  r„  Zget_installed_filesrç   ræ   )r  ræ   ÚexcrX  r^   rB  r   r   r   rƒ  J  s&    

zNewPrinterGUI._getPPDs_replyc                 C   s†   | j  ¡ }| ¡  | j ¡ }| ¡  zt | j¡| _W n tjk
rR   i | _Y nX | j 	¡ D ]"}| j| j
tj@ s^| |f¡ q^d S r9   )rž   r    r÷   rŸ   rK  rL  r@  r6   rM  ÚkeysÚtypeZCUPS_PRINTER_CLASSr$   )r  r0   r7   r   r   r   r]  d  s    

z!NewPrinterGUI.fillNewClassMembersc                 C   s2   t | j| jƒ | j tt| jƒƒ¡ | d¡ d S ©NF)r*   rŸ   rž   r~   r  r,  r2   ©r  Úbuttonr   r   r   Úon_btnNCAddMember_clickedr  s
    ÿz'NewPrinterGUI.on_btnNCAddMember_clickedc                 C   s2   t | j| jƒ | j tt| jƒƒ¡ | d¡ d S rŠ  )r*   rž   rŸ   r~   r  r,  r2   r‹  r   r   r   Úon_btnNCDelMember_clickedx  s
    ÿz'NewPrinterGUI.on_btnNCDelMember_clickedc                 C   s4   |  ¡ }|d krd S | ¡ \}}| j |g k¡ d S r9   )r   r   r¡   r  ©r  rD   r&   r   r'   r   r   r   Úon_tvNCMembers_cursor_changed~  s
    z+NewPrinterGUI.on_tvNCMembers_cursor_changedc                 C   s4   |  ¡ }|d krd S | ¡ \}}| j |g k¡ d S r9   )r   r   r    r  r  r   r   r   Ú on_tvNCNotMembers_cursor_changed†  s
    z.NewPrinterGUI.on_tvNCNotMembers_cursor_changedc                 C   s®   | j r| j  ¡  d | _ |  ¡  | jr4| j ¡  d | _| jrR| j ¡  d | _|  ¡  | j ¡  | jd k	r”| j	D ]}| j 
|¡ qld | _	| j ¡  d | _d | _i | _|  d¡ dS )Nre   T)rA  ra   r!  ræ   rD  Úcancelrz   rB   rü   rý   Ú
disconnectrá   r6   r3  )r  rD   rE   Úhandlerr   r   r   Úon_NPCancel  s,    







zNewPrinterGUI.on_NPCancelc                 C   s   |   d¡ d S )NrØ   ©ri  ©r  rD   r   r   r   Úon_btnNPBack_clicked­  s    z"NewPrinterGUI.on_btnNPBack_clickedc                 C   s   |   ¡  d S r9   r–  r—  r   r   r   Úon_btnNPForward_clicked°  s    z%NewPrinterGUI.on_btnNPForward_clickedc           
      C   sà   |   |¡}|sdS |d }|d }|d }tdƒ| }tj| jddtjjtjj|d| _	| j	 
tdƒ¡ | j	 ¡ }t ¡ }| |¡ | ¡  || j	_| j	 d	| j¡ | j	 ¡  |  |||¡}	| j	rÜ| j	 ¡  | j	 ¡  d | _	|	S )
NFr5   ÚrepoÚkeyidzInstalling driver %sT)r#  ÚmodalÚdestroy_with_parentr‰  ÚbuttonsrË   zInstalling ...Úresponse)Ú_getDriverInstallationInforó   r   ÚMessageDialogrz   ÚMessageTypeÚINFOÚButtonsTypeÚCANCELrð   Úformat_secondary_textZget_message_areaZProgressBarr'  r  Ú_progress_barrù   Ú_installdialog_responseÚshow_allÚdo_installdriverpackagerB   ra   )
r  ÚdriverZinstall_infor5   rš  r›  ÚfmtZ
dialogareaÚpbarÚretr   r   r   Úinstalldriverpackage³  s8    
 ü




z"NewPrinterGUI.installdriverpackagec                 C   s®  t dt|ƒt|ƒt|ƒf ƒ tj ¡ }d|d< |rBd|||g}n
d||g}t dt|ƒ ƒ d}z*tj||dtjtjd| _	| j	j
| j	j }}d}	| jj}
| j	 ¡ d krr| ¡  ¡ }t|ƒd	krL|d
krØd}	qrnt| d¡r:zFt|dd … ƒ}|d	kr|
 |d ¡ n|
 | d ¡ |
 ¡  W n   Y nX n| j | d¡¡ t ¡ rbt ¡  qL|sœt d¡ qœ| j	jd	krŠ|	sŠd}W n   d}Y nX |sªg | _|S )Nz+Installing driver: %s; Repo: %s; Key ID: %sÚCÚLC_ALLzinstall-printerdriverzRunning command: T)ÚenvÚ	close_fdsÚstdinÚstdoutFr   Údoneó   PrL   r0  rK   gš™™™™™¹?) rO   r$  rP   ÚenvironÚcopyÚ
subprocessÚPopenÚDEVNULLÚPIPEÚprµ  Ústderrrð   r§  ZpollÚreadlinerZ   ÚlenrN   ÚfloatZset_fractionZset_pulse_stepZpulserç   r$   rT   r   r;   r<   ÚtimeÚsleepÚ
returncode)r  r5   rš  r›  Únew_environrI  r®  rµ  r¿  r¶  r­  ÚlineZ
percentager   r   r   rª  Û  s`    þÿ


þ


z%NewPrinterGUI.do_installdriverpackagec                 C   s  |  di ¡}t| ¡ ƒ}t|ƒdkr0tdƒ d S t|ƒdkrPtdt|ƒ ƒ d S ||d  }t|ƒdkrttdƒ d S t| ¡ ƒd }d}| d¡r¢| d	¡d }n0| d
¡rÆd | d¡dd… ¡}nt	d| ƒ‚d }d|| krt
jr@|d dkr@tdƒ d S n8t|| d ƒ}t
jr@|d dkr@|s@tdƒ d S ||   di ¡  | j¡}|s„td| jt||   di ¡ƒf ƒ d S |||dœS )NÚpackagesr   zNo packages for driverrL   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-  éþÿÿÿzUnknown package type: Zfingerprint)ÚallZ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)r5   rš  r›  )r#   rH   rˆ  rÁ  rO   r$  Úendswithrs  ÚjoinÚ
ValueErrorrñ   ZDOWNLOADABLE_PKG_ONLYSIGNEDr_   rþ   )r  r«  ZpkgsZarchesÚpkgr5   r›  rš  r   r   r   r     sJ    

ÿÿz(NewPrinterGUI._getDriverInstallationInfoc                 C   s   | j  ¡  d S r9   )r¾  Z	terminate©r  ÚdialogrŸ  r   r   r   r¨  F  s    z%NewPrinterGUI._installdialog_responsec                 C   sø  | j  ¡ }td| ƒ d}| jdksB| jdksB| jdksB| jdkrZ|  |¡}|| jkrZd}|sjtdƒ d S |  ¡ }|| |¡|  }d}z&| | 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|  ¡ | _d| _| jd krd S t| jtjƒr"|  ¡  n| j}d | _|  ¡  || _| jsb|| j
krb|| |¡d  }|| j
kr’| js’|d
k r’|| |¡d  }td| ƒ |d
kr¼|| jkr¼|  ¡  |d
krà|| jkràd }	d }
z8| jjr| jjdkrd| jjd | jjd f }	W n   tƒ  Y nX zn|	d kr’t| jtjƒr’| j d¡j}tj |¡\}}|rz|rzd||f }	n|s†|r’d||f }	W n   tƒ  Y nX |	r´|	}
nd}	|  |	¡}	| j  !|	¡ |
rà| j" !|
¡ | j  #|¡ |  $¡  d S )NzNext clicked on page %dTr7   r8  râ   r9  Fz9Interrupting execution of nextNPTab(): Operations pendingrØ   r   zWill fetch ppd? %drL   zWill advance to page %d)rt   ru   rm  ÚhttpÚhttpsrn   z%s %sÚMFGÚMDLZ	modelNamez%s%s)%r{   r…  rO   r  Ú_handlePrinterInstallationModeÚINSTALL_RESULT_OPS_PENDINGÚ_getPagesOrderForDialogModeÚindexÚ
PAGE_APPLYrÍ  ÚPAGE_INSTALLABLE_OPTIONSÚgetNPPPDrâ   rå   rG   r@  ÚPPDÚfillNPInstallableOptionsrj  ÚfillDownloadableDriversr_  rá   r€  r‰  Úid_dictr=   ÚfindAttrÚvaluerK  rB  ÚppdMakeModelSplitr2  r€   rN  r   r^  rV  )r  re  Úpage_nrZ
keep_goingZinstall_resultÚorderZnext_page_nrZ	fetch_ppdrâ   r5   ZdescrZmnameÚmaker0   r   r   r   ri  I  sš    
ÿÿ



ÿÿ

ÿ
ÿ

zNewPrinterGUI.nextNPTabc                 C   sr  g }| j dkr"| j| j| jg}nL| j dkr8| jg}n6| j dkr&| jrX| j| jg}nÊ| jr¢| j 	¡ s¢| j
r„| j| j| j| jg}n| j| j| j| j| j| jg}n€| j
rÄ| j 	¡ sÄ| j| j| jg}n^| j 	¡ rè| j| j| j| j| jg}n:| j 	¡ r
| j| j| j| jg}n| j| j| j| j| jg}nH| j dkrˆ| j 	¡ rT| j| j| j| jg}n2| j 	¡ rr| 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 	¡ sø| j
rÞ| j| j| jg}n| j| j| j| j| jg}nv| j
r| j 	¡ s| j| jg}nT| j 	¡ r<| j| j| j| jg}n2| j 	¡ rZ| j| j| jg}n| j| j| j| jg}|S )Nr7  r9  r7   râ   rá   )r  r_  ÚPAGE_CHOOSE_CLASS_MEMBERSrÙ  rj  rã   ra  ré   r§   Ú
get_activerä   rÚ  rg  ÚPAGE_CHOOSE_DRIVER_FROM_DBr¥   r£   )r  rä  r   r   r   r×  ®  sè    
ý
ÿþÿüúÿý
ûü	ûüýüÿÿÿýûÿþüýüz)NewPrinterGUI._getPagesOrderForDialogModec                 C   sØ   t | jƒ | j ¡ }| j ¡ }| j}|| jks8|| jkr@|dks\|| jksT|| jkrh|dkrh|  ||¡}|| j	krÊ| j
jsÊz<| j ¡  ¡ \}}| |d¡d }|  |¡}| j |¡ W n   tƒ  Y nX t| jƒ |S r+   )r@   rz   r{   r…  ÚINSTALL_RESULT_DONEra  rj  rg  Ú_handlePrinterInstallationStagerè  rá   r€  r¬   r   Úget_selectedr#   r2  r€   rN  r=   r?   )r  re  rã  r1   r0   r)   r5   r   r   r   rÕ  =  s6    



ÿÿþýý


z,NewPrinterGUI._handlePrinterInstallationModec                 C   s  | j dkr>| jj}|r>| d¡r>t|dd … d ¡ }|  ¡  || jksR|| jkr^|  	|¡ n|| j
krz| jdkrz|  ¡  d }| jrŽ| j dkrØ| j dkr | jj}|sª| j}|s²d }| jd krØ| j dkrØ|  ||¡ | jS d| _|| jksò|| jkrú|  ¡  |  |||¡S )Nr9  rx   rj   ©r   Frâ   )r  rá   r   rN   r
   Zsanitize_uriÚ_installSMBBackendIfNeededra  rg  Ú_selectDeviceForInstallationrj  rí   Ú_handleDriverInstallationrã   r€  r<  rB  Ú_loadPPDsForDevicerÖ  Ú_installHPScannerFilesIfNeededÚ_installPrinterFromDeviceID)r  rã  re  r   r<  r   r   r   rê  `  s0    

z-NewPrinterGUI._handlePrinterInstallationStagec                 C   sp   | j dkrl| jsl| jdks(| jd dkrlt dtj¡sltdƒ zt ¡ }| 	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=  rP   ÚaccessÚF_OKrO   ÚinstallpackageÚ
PackageKitÚInstallPackageNamer=   ©r  Zpkr   r   r   rí  ‚  s    ÿÿþz(NewPrinterGUI._installSMBBackendIfNeededc              
   C   s^  |   ¡  |  ¡ | j_| jr2| j ¡  d | _|  ¡  | jrP| j ¡  d | _|  ¡  | jj	sl| jj
dkrl|  ¡  d | _t d|¡}|r| ¡ }t|d ƒdkr²t|d dd … ƒ}nd}z´tdƒ tj |d |¡}| dd|d	  ¡ | ¡ }|jd
kr|d	 | _| ¡ }t ¡ N}| |¡ | ¡  zt |j ¡}	W n$ tj!t"fk
r\   t#dƒ‚Y nX W 5 Q R X W n   Y nX z|tj$}
tj%|d ||
d}ddg}|j&||d}| 'dd¡}| 'dd¡}t|ƒdkrÜ| j( )|¡ t|ƒdkrò|| j_*W n& t"k
r
   Y n   t+ƒ  Y nX n<| ,d¡s6| ,d¡rZ| -d¡dkrZ| jj.rZ| jj.| _d S )Nrl  z"ipp://(\S+?)(:\d+|)/printers/(\S+)rL   r   iw  z$Download ppd file from remote serverZGETz/printers/%s.ppdrf   éÈ   zServer's ppd file is corrupted.)r4  Úportr5  zprinter-infozprinter-location)r   Zrequested_attributesr   údnssd:úmdns:ú/cupsrØ   )/rh  ÚgetDeviceURIrá   r   rA  ra   r!  rD  r’  r€  r‰  ÚgetNetworkPrinterMakeModelrã   rU   rX   ÚgroupsrÁ  ÚintrO   rÑ  ZclientZHTTPConnectionÚrequestZgetresponseÚstatusÚreadÚtempfileÚNamedTemporaryFileÚwriteÚflushr@  rÜ  r5   rM  rF  ÚIOErrorZHTTP_ENCRYPT_IF_REQUESTEDrH  ZgetPrinterAttributesr#   r   rN  Úlocationr=   rN   ÚfindÚinfo)r  r   ÚresÚresgrû  r‚  ZrespÚ
ppdcontentÚtmpfrâ   r5  ÚcÚrZattrsr  r  r   r   r   rî    s€    


ÿ



þÿÿÿz*NewPrinterGUI._selectDeviceForInstallationc                 C   sª   | j }| ¡  ¡ \}}d }|d k	r.| |d¡}|d ksF|dksFd|krJd S |  |¡}|rft| jƒdkrjd S d | _| jdkr¦| j	j
s¦| j	jr–| j	jdkr¦| jr¦| j| j	_d S ©NrL   r   rÈ  r9  ÚUnknown©r²   r   rë  Ú	get_valuer¯  rÁ  rç   rB  r  rá   r€  r  rë   )r  r/   r0   r)   r«  r1   r   r   r   rï  ß  s*    

ÿþ
þýz'NewPrinterGUI._handleDriverInstallationc                 C   sd   t | jdƒr`| jjr`t dtj¡s`t dtj¡s`tdƒ zt ¡ }| 	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  rP   rô  ÚR_OKrO   rö  r÷  rø  rù  r   r   r   rñ  ù  s    ÿþz,NewPrinterGUI._installHPScannerFilesIfNeededc                 C   sB   t dƒ tj||| j| j| jd}|| _| d| j¡ | ¡  d S )NznextNPTab: need PPDs loaded)Ú	device_idrW  r#  r4  r5  Úfinished)	rO   ræ   Z
PPDsLoaderrz   r=  r>  rù   r†  Úrun)r  r<  r   r¾  r   r   r   rð    s    üz NewPrinterGUI._loadPPDsForDevicec                 C   sÂ  d }g | _ zp| jdkr$d}d}nV| jrb| jd kr>d}|| _| j}|  |¡}| j |¡ d}n| jjs„| jj	r~| jj	dks„|rp| jjr–| jj
}nT|r¦t |¡}nDi }tj | jj	¡\|d< |d< d	|d
< g |d< d|d |d f }| j |d |d |d
 |d | jj| jj	¡}tdt|ƒ ƒ | jjt| ¡ ƒ| j||d}	tdt|	ƒ ƒ |	| _ |	d }|| }n
| jdkr>| jr>| j d¡}
|
s¢| j d¡}
|
r"|
jr"|
j}| d¡rÎ|d d… }tj |¡}|\}}| j ||¡}| ¡ D ](\}}t| d¡ƒ|krø|} q"qø|r.d}nd}|| _d}n<| jdkrZd}|| _d}n | j dddg | jj¡\}}d}W n   t ƒ  Y nX |r¼| jrª| jdkr¼|  !|||||¡S | j"S )Nr9  Ú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	ModelNameú (recommended)iòÿÿÿúppd-make-and-modelÚGenericZPrinterzGeneric Printer)#Úid_matched_ppdnamesr  rã   râ   r2  r€   rN  rá   r€  r  rß  rK  ÚparseDeviceIDrB  râ  ZgetPPDNamesFromDeviceIDr   rO   r$  ÚorderPPDNamesByPreferencerH   rˆ  rç   r;  rà  rá  rË  ÚgetInfoFromModelÚitemsrJ   r#   ZgetPPDNameFromDeviceIDr=   Ú _installPrinterOrSearchForDriverré  )r  r<  rã  re  Úppdnamer  r5   rß  r"  ZppdnamelistÚattrrá  Zmfgmdlrå  r0   rB  râ   r  r   r   r   rò    sÈ    


ÿ
þý
ÿÿÿú
 ýÿþ
ûÿÿz)NewPrinterGUI._installPrinterFromDeviceIDc                 C   sR  z|dkrR| j  |¡}t|d ƒ}tj  |¡\}}	|| _|	| _|| _|  ||	¡ |dksb|dkr„| j	dkr„d| _
|dkr€| j}n~d| _
| j	dkr| jdkr|rt|ƒdkr| d	¡dks| d
¡dks| d¡dks| d¡dks| d¡dks| d¡dks| d¡dks| d¡dkstdƒ td| ƒ d| _d| _tdƒ}
tj| jddtjjtjj|
d| _| j tdƒ¡ tƒ | _| j d| j¡ | j ¡  g | _ | j  !| j d| j"¡¡ | j  !| j d| j#¡¡ d| _$| j %|¡ | j&W S W n   t'ƒ  Y nX | j	dksD| j	dkrL| j(sL|| j)krL|  *¡  | j+S )Nr  r$  r   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  Zmessage_typerž  rË   zSearching for driversrŸ  r  Úerrorr9  ),rB  ÚgetInfoFromPPDNamerJ   rK  râ  r|  r}  r~  ÚfillDriverListr  rä   rÚ  rè   rÁ  r  rO   Z_searchdialog_canceledró   r   r¡  rz   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ã   rj  ÚfillMakeListré  )r  r<  r,  r  rã  re  ÚppddictZ
make_modelrå  r0   r¬  r   r   r   r+  v  s²    
ÿÿ
ÿþ
þýüûúùø	÷
öúÿ ÿ
þÿþÿÿþþz.NewPrinterGUI._installPrinterOrSearchForDriverc                 C   sP   | j  d¡ | j tdƒ¡ g | _d| _d| _d| _t	| j
ƒ t | jj¡ d S ©NTr6  F)r©   r  rª   rN  ró   rç   rè   ré   rê   r?   rz   r   Úidle_addrü   r’  rÏ  r   r   r   r3  Å  s    
z$NewPrinterGUI._searchdialog_responsec                 C   s:  | j D ]}| |¡ qt ¡  z
d| _d | _ d | _| j ¡  | j 	¡  d | _t
|ƒdk rŠt| jƒ d| _| jdkr€|  d ¡ n|  ¡  nž|| _|| _d| _zp| j ¡  |  ¡  |  ¡ sèt| jƒ d| _| jdkrÞ|  d ¡ n|  ¡  n"| jdkr| jdd n|  ¡  W n   tƒ  |  ¡  Y nX W 5 t ¡  X d S )NFrL   r9  Tr   rd  )rý   r“  r   Úthreads_enterÚthreads_leaver6  rü   rï   rB   ra   rÁ  r?   rz   ré   r  r•  ri  rì   Údownloadable_driversr  rV  rÞ  r=   )r  rü   r6   Údriversr”  r   r   r   r4  Õ  sF    









z"NewPrinterGUI.opreq_id_search_donec                 C   s*   t d|t|ƒf ƒ |  |tƒ tƒ ¡ d S ©Nz$OpenPrinting request failed (%d): %s)rO   r$  r4  rH   Údict©r  rü   r  Úerrr   r   r   r5  	  s    ÿz#NewPrinterGUI.opreq_id_search_errorc                 C   s¦   | j }| ¡  ¡ \}}d }|d k	r.| |d¡}|d ksF|dksFd|krJd S |  |¡rbt| jƒdkrfd S d | _| jdkr¢| j	j
s¢| j	jr’| j	jdkr¢| jr¢| j| j	_d S r  r  )r  r/   r0   r)   r«  r   r   r   Ú&_installSelectedDriverFromOpenPrinting  s0    
ÿ
ÿÿþüÿz4NewPrinterGUI._installSelectedDriverFromOpenPrintingc           	      C   s"  | j  ¡ }| jdkrp| j ¡  | j ¡  | j ¡  z|  ¡ }t	|ƒ}W n t
k
r^   d}Y nX | j |¡ d S | jdkrœ|| jkrÂ| jsªtdƒ | j ¡  | j ¡  n| j ¡  | j ¡  d S || jkrä| j ¡  | j ¡  d S | j ¡  | j ¡  || jkr’| j ¡  | j ¡  d}| j ¡ rR| j}| ¡ }|rR| ¡  |d¡rRd}| j t| j ¡ rz| j ¡ d d k	pˆ| j ¡ pˆ|ƒ¡ d S | j ¡  | jdkrÞ| j ¡  | j ¡  | j ¡  |  ¡ }| j |¡ d S || jkr.d}z|  ¡ }t	|ƒ}W n   tƒ  Y nX | j |¡ | j ¡  n
| j ¡  | j ¡  | j ¡  || j krì| j ¡  | jd	ksz| jd
kr¨| j ¡  | j ¡  | j t!| j"| j# $¡ ƒ¡ | jdkr¾| j ¡  | jd
krì| j%sâ| j&rì| jsì| j ¡  || jkrpd}| j ¡ r2| j}| ¡ }|r2| ¡  |d¡r2d}| j t| j ¡ pT| j ¡ pT|ƒ¡ | jd
krp| j ¡  || j'krž| j( )¡  *¡ \}}| j t|ƒ¡ || j+krÔ| j ¡  | j ¡  | j tt,| j-ƒƒ¡ || jkrþ| jd
krþ| j&rþ| j ¡  || j.kr|  ¡ }| j |¡ d S )Nrá   Frâ   zNo installable optionsrL   Tr   r9  r7   r8  r7  )/r{   r…  r  r|   rB   r}   r~   r  rÿ  r   ÚAttributeErrorr  rÙ  rå   rO   rÚ  rg  r§   rç  r«   Úget_active_iterr    r  r,  r¥   r¤   Ú
get_cursorr¦   Úget_filenameÚ_is_driver_license_acceptedra  r=   r_  r8   r6   r€   Úget_textrã   rä   rè  r­   r   rë  ræ  r2   rž   rj  )	r  Únrr   ZvalidZdownloadable_selectedr  r)   Zacceptedr0   r   r   r   rV  +  sê    
















ÿþü







ÿ

ÿ
ÿþý
ÿý


ÿÿ
zNewPrinterGUI.setNPButtonsc                 C   sZ   | j  ¡ }|| jkr| j ¡ S | j}| ¡  ¡ \}}|sR| ¡ \}}|rR| 	|¡}|d k	S r9   )
r³   r…  ra  rÁ   rç  r²   r   rë  rG  r"   )r  Zcurrent_pager/   r0   r)   r(   r  r   r   r   rI  ®  s    



z)NewPrinterGUI._is_driver_license_acceptedc                 C   sz   |  ¡ }|}| dd¡}| dd¡}| dd¡}||krB| |¡ | jdkrb| j t| j|ƒ¡ n| j t| j|ƒ¡ d S )Nr.  r   r/  rM   r7   )	rJ  r[   rN  r  r~   r  r8   r6   r}   )r  rD   rË   Únew_textr   r   r   Úon_entNPName_changed»  s    


ÿ
ÿz"NewPrinterGUI.on_entNPName_changedc                    sv   t dƒ ˆ ¡  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ÚfetchDevicesrs   rn  Ú
driverlessÚbjnprn   Fc                    s   ˆ  | |ˆ ¡S r9   )Úlocal_devices_reply©rI   rÓ   ©Úcurrent_urir  r   r   rÕ   Ô  s    ÿz,NewPrinterGUI.fetchDevices.<locals>.<lambda>)Zexclude_schemesrq  rr  c                    s   ˆ  | |ˆ ¡S r9   )Únetwork_devices_replyrR  rS  r   r   rÕ   Ü  s    ÿrp  )rO   r  Úerror_getting_devicesrK  rw  rA  )r  ry   rT  Znetwork_schemesrr  rq  r   rS  r   rN  Ë  s"    ýýzNewPrinterGUI.fetchDevicesc                 C   s6   t dt|ƒ ƒ |  ¡  | j ¡  | j ¡  d | _d S )NzError fetching devices: %s)rO   r$  r!  rA  r  ra   )r  r‚  r‡  r   r   r   rV  ä  s
    

z#NewPrinterGUI.error_getting_devicesc                 C   s&   |   ¡  | jd|d |  ||¡ d S )NT©ry   rT  )r!  rN  Úadd_devices)r  r‚  r1   rT  r   r   r   rQ  ì  s    z!NewPrinterGUI.local_devices_replyc           	         s¶   ˆj  ¡  ˆj  ¡  d ˆ_ d}i }| ¡ D ]\}}| d¡r*|||< d}q*| ¡ D ]
}||= qRˆj|ˆ |d t|ƒdkr¢t 	|¡}ˆ 
¡  |j‡ ‡fdd„d ˆ ¡  ˆ ¡  d S )	NTzdnssd://F©Úno_morer   c                    s   ˆ  ˆ | ¡S r9   )Údnssd_resolve_reply)ÚdevicesrS  r   r   rÕ     s    ÿz5NewPrinterGUI.network_devices_reply.<locals>.<lambda>©rq  )rA  r  ra   r*  rN   rˆ  rX  rÁ  ÚdnssdresolveZDNSSDHostNamesResolverr  Zresolver!  Úcheck_firewall)	r  r‚  r1   rT  rZ  Zneed_resolvingr   rá   Zresolverr   rS  r   rU  ö  s$    



z#NewPrinterGUI.network_devices_replyc                 C   s$   | j ||dd |  ¡  |  ¡  d S )NTrY  )rX  r!  r_  )r  rT  r\  r   r   r   r[    s    z!NewPrinterGUI.dnssd_resolve_replyc                 C   s
  t j ¡ }d|d< d|d< dddd| g}t|d	 t|ƒ ƒ z,tj||d
tjtjtjd}| 	¡ \}}W n   Y d S X d}| 
¡  d¡D ]Z}| d¡dkr qŒt d|¡}	|	rÚ|	 ¡ }
zt|
d ƒ}W n   d}Y nX |dkrŒ qèqŒ|dkrôd S |dkrdS dS d S )Nr°  r±  r   ZDISPLAYzhp-infoz-xz-iú-dú: T)r²  r³  r´  rµ  r¿  rØ   Ú
zfax-typez(\d+)r   rh   zMFG:HP;MDL:Fax 2;DES:HP Fax 2;zMFG:HP;MDL:Fax;DES:HP Fax;)rP   r¸  r¹  rO   r$  rº  r»  r¼  r½  ÚcommunicaterT   rs  r  rU   rX   r  r  )r  ÚfaxurirÆ  rI  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|ƒ ƒ z:tj|dtjtjtjd}| ¡ \}}|jdkrZW d S W n   Y d S X | ¡  	¡ }| 
d	d
¡}t|ƒdk r”d S |d
 }|dkr¨d S |S )Nzhp-queryz-kz	scan-typer`  ra  T©r³  r´  rµ  r¿  r   ú=rL   rf   Ú0)rO   r$  rº  r»  r¼  r½  rc  rÅ  rT   rZ   rs  rÁ  )	r  r   rI  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 }z:tj|dtjtjtjd}| ¡ \}}|jd	krzW d S W n   Y d S X | ¡  	¡ }|S )
NÚprintz-cÚfaxz-fz
hp-makeurira  Trf  r   )
rO   r$  rº  r»  r¼  r½  rc  rÅ  rT   rZ   )	r  r4  ÚmodeÚmodrI  r   r¾  rµ  r¿  r   r   r   Ú!get_hplip_uri_for_network_printerU  s*      
ý

z/NewPrinterGUI.get_hplip_uri_for_network_printerc                 C   sz  d}|dkr| j }|dkr¦|j d¡}|dkr¦|d7 }|j|d…  d¡}|dkrf|j|d…  d¡}|dkr‚|j|d…  d¡}|dkr”t|jƒ}|j||| … }|rrd|g}t|d	 t|ƒ ƒ d}z:tj|d
tjtj	tj	d}| 
¡ \}}	|jdkrd}W n   Y nX |dk	rrz| d¡ ¡ }
W n( tk
rX   |jddd ¡ }
Y nX t |
¡}t|ƒ}|dk rš| 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 |¡\}}d||||f |_ntd| ƒ ||_t |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).
        Nú://rØ   rg   rk  r.  ú?z/usr/lib/cups/backend/snmpra  Trf  r   rK   z
iso-8859-1Úignore)ÚencodingÚerrorsrh   r   rj   ri   zNo Device ID from snmp backendzMFG:%s;MDL:%s;DES:%s %s;zGot Device ID: %s)rá   r   r  rÁ  rO   r$  rº  r»  r¼  r½  rc  rÅ  rT   rZ   ÚUnicodeDecodeErrorÚprobe_printerZwordseprt  rK  rB  râ  r€  r'  rß  r  r  r  )r  r4  rá   r   r  rX  rI  rµ  r¾  r¿  rÇ  ZwordsÚnÚdevice_classr  r  r  Zdevice_locationZmkZmdr   r   r   r   k  s˜       
ý




ÿ  ÿ
ÿ ÿ

ÿ ÿ

z(NewPrinterGUI.getNetworkPrinterMakeModelc                 C   s|  d| _ t ttjt¡}tjddt	dƒiŽ}t
|ƒ}|g| _|jd | ¡ |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 d¡ | j ¡  | j d¡}| j t ¡ |d¡ || _d | _tdƒ |  ¡  d S )NrØ   r   údevice-infoz	Enter URIF©r   zNetwork Printerry   zFind Network Printer)údevice-classrx  TúWindows Printer via SAMBArx   r   zFetching devices)r   )ry   )rx   ) r  r   r  rõ   r   r  r,  rK  rz  ró   r   r\  r$   Úget_infoZinsert_afterÚdevices_uri_iterÚdevices_find_nw_iterÚdevices_network_iterZdevices_network_fetchedrƒ   rö   r   rN  r†   rB   Ú
get_columnr:   ÚTreePathrT  ÚfirewallrO   Ústart_fetching_devices)r  rT  r0   ÚotherZ	physotherZuri_iterÚnetwork_iterZnetwork_dictry   Úfind_nw_iterZsmbdev_dictZsmbdevZfind_smb_iterr  r   r   r   rb  ¾  sf    þ ÿþÿ ÿÿÿ ÿÿ
zNewPrinterGUI.fillDeviceTabc              	   C   s   | j }d}zà| ¡ }| ¡ }|o"|}td }|sP|dtdƒ d 7 }| tj¡ |st|dtdƒ d 7 }| tj¡ |sèt	d| ƒ t
j| jddt
jjt
jjtdƒd	}| |¡ | td
ƒt
jjtdƒt
jj¡ | d| j¡ | ¡  W n" tjtfk
r   tƒ  Y nX |rt	dƒ d S )NTú

ú- z%Allow all incoming IPP Browse packetsrb  zAllow all incoming mDNS trafficz,Asking for permission to adjust firewall:
%súAdjust Firewallr/  úDo It LaterrŸ  z"Firewall all OK, no changes needed)r‚  Zcheck_ipp_client_allowedZcheck_mdns_allowedÚTEXT_adjust_firewallró   Úadd_serviceÚfirewallsettingsZIPP_CLIENT_SERVICEZMDNS_SERVICErO   r   r¡  rz   r¢  ÚQUESTIONr¤  ÚNONEÚformat_secondary_markupÚadd_buttonsÚResponseTypeÚNOÚYESrù   Úadjust_firewall_responser  ÚdbusÚDBusExceptionrJ  r=   )r  Údatar]   ÚallowedZipp_allowedZmdns_allowedÚsecondary_textrÐ  r   r   r   Úon_firewall_readè  sV    ÿþÿÿÿ ü
 ÿzNewPrinterGUI.on_firewall_readc                 C   sl   |  ¡  |tjjkr:| j ¡ }|s0| j tj¡ | j 	¡  t
dƒ t ¡ | _| j tdƒ¡ | jdd d S )Nz7Fetching network devices after firewall dialog responsero  T)ry   )ra   r   r’  r”  r‚  Zcheck_ipp_server_allowedrŒ  r  ZIPP_SERVER_SERVICEr  rO   ru  rH  rA  rv  ró   rN  )r  rÐ  rŸ  Zipp_server_allowedr   r   r   r•  	  s    


z&NewPrinterGUI.adjust_firewall_responsec                 C   s2   t  ¡ | _| j tdƒ¡ | jd| jd | `d S )Nro  FrW  )ru  rH  rA  rv  ró   rN  rT  r  r   r   r   rƒ  	  s    
z$NewPrinterGUI.start_fetching_devicesc              	   C   s  |rZ||kr|  |¡}nB| dd¡|kr@| dd¡}|  |¡}n|rVt |¡}d|_nd }t| ¡ ƒ}|D ]}|jdkrj|j dd¡|_qjdd„ }tt	||ƒƒ}t
t|ƒd ƒD ]’}t
|d t|ƒƒD ]z}|| }	|| }
|	jdksÆ|
jdkrðqÆ|	j|
jkrÆ|	jsd|	_qÆ|
jsd|
_qÆt|	jƒt|
jƒk r:d|	_qÆd|
_qÆq°d	d
„ |D ƒ}g }|D ]ò}td|j ƒ t|dƒr†td|j ƒ t|dƒr td|j ƒ t|ƒ}tdt|ƒ ƒ zT| j |¡}td| ƒ | j|  |¡ tdt|ƒ|t| j| ƒf ƒ tdƒ W n< tk
rH   | j |¡ | |¡ tdt|ƒ ƒ Y nX qZ| j ¡  |rÀt|ƒ}z*| j |¡}| j|  |¡ | j| }W n, tk
r¼   | j |¡ | |¡ Y nX nd }| j ¡ }| j}| j}|D ]Š}d }z| j |¡}| j| }W n, tk
r.   tdt|ƒ ƒ Y qÞY nX | ¡ }|d jdk}| ¡ }||krd|t dƒ7 }||dg}|rÎ|d j|d jkr¾|j!|||d}||krÌ| "|¡}| j #|d¡ n|j||d}nZ| "|¡}| $¡ }| "|¡|kr| %|d¡}||kr
q| &|¡}qà|j!d ||d}||krÞ| "|¡}| jj'|dd | j (d¡}| j )||d¡ qÞd}|rÊ| j* ¡ }| $¡ }d}|r| %|d¡}||jkr²|}q| &|¡}|d7 }qŒnD| j+s| j (d¡}| j )t, -¡ |d¡ | j* (d¡}| j* )||d¡ d S )Nz:9100r   zCurrent devicert   c                 S   s&   | j dkrd| _ n| j dkr"d| _ | S )Nzhp:/no_device_foundrq   zhpfax:/no_device_foundrr   rì  ©rá   r   r   r   Úreplace_generic6	  s
    

z2NewPrinterGUI.add_devices.<locals>.replace_genericrL   Údeletec                 S   s   g | ]}|j d kr|‘qS ))	rq   rr   ro   rp   rx   rv   rÑ  rP  rž  rì  ©r   rI   r   r   r   r   P	  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   ry   ú
 (Current)Fry  ç      à?)Z	row_align).Úpopr[   rK  rz  r  rH   r4   r‰  r   ÚmapÚrangerÁ  r€  rO   r  r   r¡  r   r$  r\  rØ  Ú
add_devicerÍ  r$   r.   rƒ   r    r  r~  Úget_devicesrw  r|  ró   Úinsert_beforer!   Ú
expand_rowr,   r  r-   Úscroll_to_cellr€  r:   r‡   r  r   r  )r  r\  rT  rZ  Zcurrentrá   r  ÚiÚjZdevice1Zdevice2Z
newdevicesÚphysicaldeviceZcurrent_devicer0   r…  r†  Z	newdeviceZdevsry   r  r   r)   Únetwork_pathÚphysdevZdevice_select_pathr  Zconnection_select_pathÚdevr   r   r   rX  !	  sö    


ÿ



ÿ

ÿ





ÿ

zNewPrinterGUI.add_devicesc                 C   sn   t sjtdƒ zHt ¡ }| ddd¡ z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_AVAILABLErO   rö  r÷  rø  Úpysmbrù  r   r   r   Úinstall_python3_smbc_if_neededÄ	  s    z,NewPrinterGUI.install_python3_smbc_if_neededc              
   C   sZ  | j }| ¡  t| jƒ G dd„ dƒ}|ƒ }tjj|_tdƒ|_	d|_
| d|g¡ t ¡ rft ¡  qTd}tƒ rtd}t | j¡}tjj||jd}d}zR| ¡ dkræz| d	¡ ¡ }W q˜ tk
râ } z| |¡ W 5 d}~X Y q˜X q˜W n^ tk
r6 } z.|j\}}	|tjkr&td
t||	fƒ ƒ W 5 d}~X Y n   tƒ  Y nX | ¡  |r’|D ]6}
|
jtjjtjj fkrZ| d|
g¡}| |¡}qZt!| j" #¡ d}| $¡ \}}}}}t%|ƒdkrG dd„ dƒ}|ƒ }tjj |_||_	d|_
| d|g¡}| |¡}| &|¡}| j' (|d¡ t)| jƒ | *¡ dkrV| 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   r¹  zScanning...r   Nr   é
   ©ÚdebugZauth_fnzsmb://úRuntime error: %srì  c                   @   s   e Zd ZdS )z1NewPrinterGUI.browse_smb_hosts.<locals>.FakeEntryNrµ  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Å   r³  ÚsmbcÚPRINTER_SHAREÚ	smbc_typeró   r5   Úcommentr$   r   r;   r<   Úget_debuggingÚAuthContextÚContextÚcallbackÚperform_authenticationÚopendirÚgetdentsrJ  ÚfailedrF  rI  ÚerrnoÚENOENTrO   r$  r=   Ú	WORKGROUPÚSERVERr
   r‘   rJ  ÚseparaterÁ  r!   rÆ   rª  r?   r,   rB   Úshow_info_dialogrz   )r  r  r¹  Zdummyr¼  Ú	smbc_authÚctxÚentriesrX  r  Úentryr)   r¬  Zspecified_urirY   r4  ÚshareÚuserÚpasswordr¾  Ztoplevelr(   r   r   r   Úbrowse_smb_hostsØ	  st    



ÿ"
$
ÿ




ûzNewPrinterGUI.browse_smb_hostsc                 C   s   | j  |¡}| j  |¡ S )z9Don't allow this path to be selected unless it is a leaf.)r  r"   Úiter_has_child)r  r&   r0   r(   Zpath_selectedr˜  r)   r   r   r   r   
  s    z!NewPrinterGUI.smb_select_functionc                 C   s.   |  |d¡}d}|d k	r|j}| d|¡ d S ©Nr   r   rË   )r  r5   Úset_property)r  r  r  r0   r)   r˜  rÔ  rÕ  r   r   r   r	  %
  s
    z#NewPrinterGUI.smbbrowser_cell_sharec                 C   s.   |  |d¡}d}|d k	r|j}| d|¡ d S rÚ  )r  rÂ  rÛ  )r  r  r  r0   r)   r˜  rÔ  rÂ  r   r   r   r
  ,
  s
    z%NewPrinterGUI.smbbrowser_cell_commentc                 C   sd   | j }| |¡}| |d¡}|r<|jtjjkr<| j ¡  dS | 	|¡rR| 
|¡ n|  |||¡ dS )z*Handle double-clicks in the SMB tree view.r   N)r  r"   r  rÁ  r³  r¿  rÀ  rÇ   rÒ   Úrow_expandedÚcollapse_rowÚon_tvSMBBrowser_row_expanded)r  Úviewr(   r  r  r)   rÔ  r   r   r   Úon_tvSMBBrowser_row_activated3
  s    


z+NewPrinterGUI.on_tvSMBBrowser_row_activatedc              
   C   s”  |  ¡ }| |d¡}|dkr dS |jtjjkrÚz| jr>W dS W n   d| _Y nX t| jƒ d|j	 }d}t
ƒ rvd}t | j¡}tjj||jd}	g }
zR| ¡ dkrèz|	 |¡ ¡ }
W qš tk
rä } z| |¡ W 5 d}~X Y qšX qšW n^ tk
r8 } z.|j\}}|tjkr(tdt||fƒ ƒ W 5 d}~X Y n   tƒ  Y nX | |¡rp| |d¡}| |¡ qJ|
D ]F}|jtjjtjjfkrž| ||g¡}|jtjjkrt| |¡}qt|  |d¡ | `t!| jƒ n¶|jtjjkrz| jrúW dS W n   d| _Y nX t| jƒ d|j	 }d}t
ƒ r4d}t | j¡}tjj||jd}	g }zX| ¡ dkr¬z|	 |¡ ¡ }W n. tk
r¦ } z| |¡ W 5 d}~X Y nX qXW nj tk
r } z:|j\}}|tj"krø|tj#krøtdt||fƒ ƒ W 5 d}~X Y n   tƒ  Y nX | |¡r@| |d¡}| |¡ q|D ]0}|jtjjkrD| ||g¡}tt|ƒƒ qD|  |d¡ | `t!| jƒ dS )z1Handler for expanding a row in the SMB tree view.r   NrL   z	smb://%s/rº  r»  r½  )$r    r  rÁ  r³  r¿  rÍ  Zexpanding_rowr@   rÅ   r5   rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rJ  rÊ  rF  rI  rË  rÌ  rO   r$  r=   rÙ  Ziter_nth_childr%   rÎ  rÀ  r$   rª  r?   ZEACCESZEPERM)r  rß  r)   r(   r0   rÔ  r   r¼  rÑ  rÒ  rÓ  rX  r  r¬  rv  ZsharesrÕ  r   r   r   rÞ  B
  s¦    


ÿ"
$
ÿ


ÿ$
$z*NewPrinterGUI.on_tvSMBBrowser_row_expandedc                 C   s   | j  |¡ d S r9   )r˜   r  )r  Zonr   r   r   Úset_btnSMBVerify_sensitivity¤
  s    z*NewPrinterGUI.set_btnSMBVerify_sensitivityc           	      C   sÂ   t jt j d }|  ||¡ | ¡ }t|d ¡ \}}}}}|rL| j |¡ |r\| j	 |¡ |sd|rŽt|||d 
¡ }| |¡ | j d¡ n| j ¡ dkr¨| j d¡ |  t|ƒ¡ |  ¡  d S )Nz	_-./:%[]@rì  ©rY   r4  rÕ  Tr   )ÚstringÚascii_lettersÚdigitsÚentry_changedrJ  r
   rÏ  r–   rN  r—   Úget_urir•   rÏ   r”   rá  r,  rV  )	r  ÚentÚallowed_charsr   rY   r4  rÕ  rÖ  r×  r   r   r   Úon_entSMBURI_changed§
  s     
z"NewPrinterGUI.on_entSMBURI_changedc                 C   s`   | j  ¡ }|d krd S | ¡ \}}d}|rH| |d¡}|rH|jtjjk}| j 	|d k	oX|¡ d S )NFr   )
rÆ   r   rë  r  rÁ  r³  r¿  rÀ  rÇ   r  )r  rD   r&   r  r)   Úis_sharerÔ  r   r   r   Úon_tvSMBBrowser_cursor_changedº
  s    
z,NewPrinterGUI.on_tvSMBBrowser_cursor_changedc              	   C   s  |   ¡ sdS | j d¡ z¼t ¡ }|js0t ¡ }| ¡ }td }|sÒt	j
| jddt	jjt	jjtdƒd}|dtdƒ 7 }| |¡ | td	ƒt	jjtdƒt	jj¡ | ¡ }| ¡  |t	jjkrÒ| tj¡ | ¡  W n  tjtfk
rô   tƒ  Y nX | j  ¡  |  !¡  dS )
ú<Check whether the needed SMB client library is available andNFr‡  Tr‰  r/  rˆ  z*Allow all incoming SMB/CIFS browse packetsrŠ  )"r´  rÇ   r  r  Ú	FirewallDÚrunningÚSystemConfigFirewallZcheck_samba_client_allowedr‹  r   r¡  rz   r¢  rŽ  r¤  r  ró   r  r‘  r’  r“  r”  r  ra   rŒ  ZSAMBA_CLIENT_SERVICEr  r–  r—  rJ  r=   rÅ   r  rØ  )r  rŒ  r]   r™  rš  rÐ  rŸ  r   r   r   Úon_btnSMBBrowse_clickedÈ
  sD      üÿ
 ÿ
z%NewPrinterGUI.on_btnSMBBrowse_clickedc                 C   sÚ   | j  ¡  ¡ \}}d}|r8| |d¡}|r8|jtjjk}|r@|sN| j 	¡  d S | 
|¡}| 
|¡}| |d¡}| |d¡}	|rŽ| |d¡j}
nd}
t|
|	j|jd ¡ }| j d¡ | j d¡ | j |¡ | j 	¡  d S )NFr   r   râ  )rÆ   r   rë  r  rÁ  r³  r¿  rÀ  rÅ   rB   Ziter_parentr5   r
   rç  r–   rN  r—   r‘   )r  rŒ  r  r)   rë  rÔ  Zparent_iterZdomain_iterrÕ  r4  rY   r   r   r   r   Úon_btnSMBBrowseOk_clickedï
  s0    


þ
z'NewPrinterGUI.on_btnSMBBrowseOk_clickedc                 G   s   | j  ¡  d S r9   )rÅ   rB   )r  rD   rI  r   r   r   Úon_btnSMBBrowseCancel_clicked  s    z+NewPrinterGUI.on_btnSMBBrowseCancel_clickedc                 C   s   |   ¡  d S r9   )rØ  r‹  r   r   r   Úon_btnSMBBrowseRefresh_clicked  s    z,NewPrinterGUI.on_btnSMBBrowseRefresh_clickedc                 C   s   | j  | ¡ ¡ d S r9   )r“   r  rç  r—  r   r   r   Úon_rbtnSMBAuthSet_toggled  s    z'NewPrinterGUI.on_rbtnSMBAuthSet_toggledc              
      s*  |   ¡ sdS | j ¡ }t|d ¡ \‰ }}}}d‰d‰d}| j ¡ }|r\| j ¡ ‰| j ¡ ‰d}	d}
t	| j
ƒ zd}tƒ r€d}|râ‡ ‡‡fdd„}tjj||d	}z
d
|_W n tk
rÂ   Y nX | d||f tjd¡}d
}	n’tj| j
ˆ ˆˆd}tjj||jd	}| ¡ dkrjz | d||f tjd¡}d
}	W n. tk
rd } z| |¡ W 5 d}~X Y nX q|	std
}
W nV tk
r¼ } z&|j\}}tdt||fƒ ƒ |}W 5 d}~X Y n   tƒ  Y nX t| j
ƒ |	rútt dƒt dƒ| j
d dS |
s&t dƒ}|r|}t!t dƒ|| j
d dS )rí  Nrì  r   Fr   rº  c                    s
   ˆ ˆˆfS r9   r   )ZsvrZshrZwgZunZpw©rY   ÚpasswdrÖ  r   r   Údo_auth/  s    z6NewPrinterGUI.on_btnSMBVerify_clicked.<locals>.do_authr»  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)"r´  r‘   rJ  r
   rÏ  r•   rç  r–   r—   r@   rz   rÃ  r³  r¿  rÅ  ZoptionUseKerberosrE  ÚopenrP   ÚO_RDWRrÄ  rÆ  rÇ  rJ  rÊ  rF  rI  rO   r$  r=   r?   rÐ  ró   Úshow_error_dialog)r  rŒ  r   r4  rÕ  Úur¾  ÚreasonZauth_setZ
accessibleZcanceledr¼  rø  rÒ  r]   rÑ  rX  r  rË   r   rö  r   Úon_btnSMBVerify_clicked  sŠ     





 ÿýÿ ÿ 

þ
ÿz%NewPrinterGUI.on_btnSMBVerify_clickedc                 C   sP   |  ¡ }|}|D ](}||kr| |d¡}tdt|ƒ ƒ q||krL| |¡ dS )zARemove all chars from entry's text that are not in allowed_chars.r   zremoved disallowed character %sN)rJ  r[   rO   r$  rN  )r  rÔ  ré  ZorigtextrL  Úcharr   r   r   ræ  b  s    zNewPrinterGUI.entry_changedc                 C   s(   t jt j d }|  ||¡ |  ¡  d S )Nz_-./:%[]()@?=&©rã  rä  rå  ræ  rV  ©r  rè  ré  r   r   r   Úon_entNPTDevice_changedm  s    z%NewPrinterGUI.on_entNPTDevice_changedc                 C   s(   t jt j d }|  ||¡ |  ¡  d S )Nú_-.:%[]r   r  r   r   r   Ú"on_entNPTJetDirectHostname_changedr  s    z0NewPrinterGUI.on_entNPTJetDirectHostname_changedc                 C   s   |   |tj¡ |  ¡  d S r9   )ræ  rã  rå  rV  ©r  rè  r   r   r   Úon_entNPTJetDirectPort_changedw  s    z,NewPrinterGUI.on_entNPTJetDirectPort_changedc                 C   s8   |  ¡ }| |¡\}}}}| ¡ }| |||||¡ d S r9   )Z
get_parentZquery_child_packingZget_expandedZset_child_packing)r  rD   ÚUNUSEDr#  ÚexpandZfillZpaddingZ	pack_typer   r   r   r  {  s    	ÿ 
 ÿz)NewPrinterGUI.on_expNPDeviceURIs_expandedc                 C   s   |  |d¡S )Nrf   )r  )r  r0   r)   r˜  r   r   r   r  ‹  s    z%NewPrinterGUI.device_row_separator_fnc                 C   s&   |  |¡r| |¡ n| |d¡ d S rŠ  )rÜ  rÝ  rª  )r  rß  r(   r  r   r   r   r  Ž  s    
z"NewPrinterGUI.device_row_activatedc              	   C   s  | j }| ¡ }|sd S | | j¡}| |¡s0d S | jd k	r>d S | jdkrTtdƒ d S | jD ]8}| 	¡ D ]*}|j
dkrf|j|jkrftdƒ   d S qfqZzP| jdks®| jd dkrât ¡ | _| jjsÊt ¡ | _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 progressry   z4Skipping firewall adjustment: network printers foundró  r.  zExamining firewallr]  )rƒ   r    r!   r  rÜ  r‚  rû   rO   r\  r¨  rw  r   r‰  r=  r  rî  rï  rð  r  r›  r–  r—  rJ  r=   )r  rß  r0   r¯  r°  rá   r   r   r   r_  ”  s<    





ÿ
ÿ

zNewPrinterGUI.check_firewallc                 C   s4   |  ¡ }|r|sd S | | j¡}||kr0|  ¡  d S r9   )r    r!   r  r_  )r  rß  r)   r(   r0   r¯  r   r   r   r  ¿  s    z!NewPrinterGUI.device_row_expandedc                 G   s<   | j  ¡ }| |¡}| |d¡dk	r(dS |  | 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.
        rL   NTF)rƒ   r    r"   r  r  )r  r&   r0   r(   r  r)   r   r   r   r   È  s    

z$NewPrinterGUI.device_select_functionc                 C   s&  g | _ d| _d| _d| _g | _|  jd7  _| ¡ \}}|d krDd S | ¡ }| |¡}| 	|d¡}|d krnd S d}| 
¡ D ]¤}|jdkr–tdƒ|_qz|jdkr¬tdƒ|_qz|jdkrøt|d	ƒrì|j ¡  d
¡dkrìtdƒd tdƒ |_n
tdƒ|_qz|jdkrtdƒ|_qz|jdkr(tdƒ|_qz|jdkrLtdƒd tdƒ |_qz|jdkrdtdƒ|_qz|jdkr|tdƒ|_qz|jdkrútj |j¡\}	}
tj |
¡\}}
tj |
¡\}}
|dkrî|d dkrÞ|dd … }tdƒ| |_n
tdƒ|_qz|jdkrtdƒ|_qz|jd krâtj |j¡\}	}
tj |
¡\}}
tj |
¡\}}
|dkrŒ|d dkrt|dd … }| d!¡rŒ|d"d … }d#|jkr¤d$}d|_nd}|dkrÎd%td&ƒ d' ||f |_nd%td&ƒ | |_qz|jd(ksú|jd)krtd*ƒ|_qz|jd+ks|jd,krtj |j¡\}	}
tj |
¡\}}
tj |
¡\}}
|dkrt|d dkrt|dd … }|d-krªtd.ƒ|_|jdkr| jd'|j 7  _nhd }| d/¡dkrÄd&}n*| d0¡dkrÚd1}n| d2¡dkrîd3}|d k	rtd4ƒ| |_n
td5ƒ|_qzd}|j|_qzt ttj¡}| j  |¡ t!|d6d ƒdkr¬d}d}d}d}d }d7d8i}|j"rx|j"}| 
¡ D ]}|jdkr°d}|  #|j¡r¨d} q”nà|jd9kr€|d kr|jd:krtj |j¡\}	}
tj |
¡\}}
|d k	rtj $|¡\}}|r€d}|j d;¡s4|j d<¡o>|j %d=¡}|j&rT|j&d>krh|sh| j'||d? |j|d@< |j&|dA< |j(|dB< |j)|dC< q€|sš|rš|sš|j&rÞ|j&d>ksÞ|j& ¡  d¡sÞ|j& ¡  dD¡ršt|dEƒrú|j*rú|j*}n|}|  +|dF¡}|ršt,j-|f|Ž}d|_| .|¡ |  #|j¡r@d}|  +|d
¡}|rš|  /|¡}||dB< tdƒ|d@< t,j-|f|Ž}tdƒd d |_| .|¡ |r¦d|_0d|_1t!|dGd ƒ|_0d}| 
¡ D ]}| 2|j|f¡ |d7 }qÆ| j 3d¡}| j 4t 5¡ |d¡ |r| j6 7¡  n
| j6 8¡  d S )HNFrL   Trl   zParallel Portrw   zSerial Portrm   r   rk  rØ   ÚFaxú - ÚUSBrn   Z	Bluetoothrq   z%HP Linux Imaging and Printing (HPLIP)rr   ro   z Hardware Abstraction Layer (HAL)rt   zAppSocket/HP JetDirectru   r   r   r.  zLPD/LPR queue '%s'zLPD/LPR queuerx   r{  rm  z	printers/é	   rO  zDriverless z%sÚIPPz (%s)rÑ  rÒ  ZHTTPrs   Úmdnsr@  úRemote CUPS printer via DNS-SDú._ippú	._printerÚLPDú._pdl-datastreamúAppSocket/JetDirectú%s network printer via DNS-SDúNetwork printer via DNS-SDÚchecked_hpliprz  ry   )rt   ru   rm  rs   r  rl  rü  rý  rþ  r  )r4  rá   rx  zdevice-make-and-modelz	device-idzdevice-locationZhewlettÚdnssd_hostnamerj  r  )9rç   rè   ré   rê   rì   r  rG  r    r"   r  r¨  r‰  ró   Ú	menuentryr  r   r3   r  r   r   r   Ú	splithostÚ
splitqueryrN   r  rO  r   rô   rõ   r   r  r‡   rö   rÎ   Z_network_hostri  Z	splitportrË  r  r   r€  r  r  rn  rK  rz  r§  re  r  r  r$   r€  r:   r  r†   r©  rB   )r  rD   r(   r  r0   r)   r®  Z	show_urisrá   r   r   ÚhostportZqueueZdrvlessr5   Ú	cupsqueueÚprotocolZhp_drivabler  Z
is_networkZ
remotecupsr4  r{  rû  Z	hpliphostZhplipurir±  rd  ZfaxdevidZfaxdevrv  r   r   r   Úon_tvNPDevices_cursor_changedÕ  sx   




ÿ
ÿ
ÿ

ÿ


ÿÿ
ÿ

ÿ
þÿþÿ


ÿþýüÿÿ
ÿ

ÿ
z+NewPrinterGUI.on_tvNPDevices_cursor_changedc                 C   sî  |  ¡ \}}|d krd S | ¡ }| |¡}| |d¡}|| _| j d¡ | j |j	| j
¡}| j |¡ td|j ƒ d}|j	}	|j dd¡d }
|| jkrd|j	dkr²tdƒ}n¢|j	dkrt|d	ƒrü|j ¡  d
¡dkrütdƒd tdƒ |_tdƒ}ntdƒ}nL|j	dkr tdƒ}n4|j	dkr8tdƒ}n|j	dkrPtdƒ}n|j	dkrftdƒ}nî|j	dks~|j	dkrNtj |j¡\}}tj |¡\}}tj |¡\}}|dkrÔ|d dkrÔ|dd … }|dkrètdƒ}ndd }| d¡dkrd}n*| d ¡dkrd!}n| d"¡dkr,d#}|d k	rDtd$ƒ| }ntd%ƒ}n|j}| j |¡ n
|j	d&krtj |j¡\}}d}d'}|d&krätj |¡\}}tjj||d(\}}td)|t|ƒf ƒ |jdkrà|j}n|}| j |¡ | j t |ƒ¡ nj|j	d*kr2|j!sn|j d+d¡}t"|ƒdkr>|d }nd}| d,¡}i }|D ]}| d-¡\}}|||< qT| j#d.f| j$d/f| j%d0f| j&d1ffD ]–\}}||kr | ¡ }| '¡ }d}|r| |d¡d }t |ƒt || ƒkrìq| (|¡}|d7 }q¼|r| )|¡ n
| )d¡ n
| )d¡ q–n<|j	d2krì| j* d¡ | j+ d¡ | j+ ,d ¡ | j- .d3¡ t"|jƒd4krn|jd4d … }| d¡}|dkr¾||d d … }|d |… }nd}| j* |¡ | j+ |¡ |}| j- .d5¡ n‚|jd6kr| j/ d¡ | j0 .d3¡ n\|j	d6krX| j1 d¡ | j2 d¡ | j/ |jd4d … ¡ |  3d5¡ n|jrn| j4 |j¡ z`t"|ƒdkrÀ| jj5d7krÀ| j6d8ks¨| j6d dkrºt7 8¡ }|d }n| j6}| j9 |¡ W n   t:ƒ  Y nX |  ;¡  d S )9NrL   r   z!Selected connection type. URI: %srk  rØ   rl   z)A printer connected to the parallel port.rm   r   rk  r	  r
  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.rn   z"A printer connected via Bluetooth.rq   zUHPLIP software driving a printer, or the printer function of a multi-function device.rr   zUHPLIP software driving a fax machine, or the fax function of a multi-function device.ro   z?Local printer detected by the Hardware Abstraction Layer (HAL).rs   r  r   r.  r@  r  r  r  r  r  r  r  r  r  rt   iŒ#  )Zdefportzsocket: host is %s, port is %srw   rp  ú+rg  ÚbaudÚbitsÚparityÚflowru   Frj   Trx   Zdirectró  )<rG  r    r"   r  rá   r…   rN  Únew_printer_device_tabsr#   r‰  ra  r„   r^  rO   r   rs  r_  ró   r  r3   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   rw  r=  rP   Úunamer‚   r=   rV  )r  rD   r(   r  r0   r)   rá   Úpager  r‰  r\   rË   r   r   r5   r  r  r4  rû  r  ÚpartsrÝ   Zoption_dictr*  rá  rK  r¬  r7   rü  r   r   r   Ú on_tvNPDeviceURIs_cursor_changed¡  s   


ÿ






ÿ

ü



ÿ
z.NewPrinterGUI.on_tvNPDeviceURIs_cursor_changedc                 C   s(   |  ¡ }| j t|ƒdk¡ |  ¡  d S r+   )rJ  rŒ   r  rÁ  rV  )r  rè  r¡  r   r   r   Úon_entNPTLpdHost_changedF  s    z&NewPrinterGUI.on_entNPTLpdHost_changedc                 C   s   |   ¡  d S r9   ©rV  r  r   r   r   Úon_entNPTLpdQueue_changedK  s    z'NewPrinterGUI.on_entNPTLpdQueue_changedc           	         s  | j  ¡ }t |¡‰ | j dtdƒ d tdƒ ¡ | j | j	¡ | j 
¡  t| jƒ ‡ fdd„}| j | j¡ | j d|¡}ˆ  ¡ }| j |¡ | j dt¡| _| j ¡  t t¡}|D ]}| |g¡ qºt ¡ }| |¡ | d¡ | d¡ | j |¡ d S )	Nz"<span weight="bold" size="larger">r.  z	</span>

zSearching for printersc                    s   ˆ   ¡  dS rA   )ra   rC   ©Zserverr   r   r   Y  s    z5NewPrinterGUI.on_btnNPTLpdProbe_clicked.<locals>.stoprÌ   r   )r   rJ  ru  Z	LpdServerrÄ   Ú
set_markupró   rÃ   r  rz   rO  r@   r“  rú   rù   ZproberF   rB   r   rô   rõ   r$   ZEntryCompletionrö   Zset_text_columnZset_minimum_key_lengthrŽ   r&  )	r  rŒ  r¡  r   Úsignalr6   r0   r7   Z
completionr   r.  r   Úon_btnNPTLpdProbe_clickedN  s:    

ÿÿþ

ÿ




z'NewPrinterGUI.on_btnNPTLpdProbe_clickedc                 C   sÊ   |  ¡ }| d¡dkr|| d¡ td| ƒ | j |¡ | j ¡ }| | j¡}| jj	|dd | j 
dd¡ | j d¡ d S tjtj d }|  ||¡ |  ¡ }| j t|ƒdk¡ | j ¡  |  ¡  d S )	Nrk  rØ   r   zURI detected (%s) -> Enter URIF)r(   Zstart_editingr   r  )rJ  r  rN  rO   r   rƒ   r    r!   r}  r:   Zselect_regionZset_positionrã  rä  rå  ræ  rš   r  rÁ  rœ   rB   rV  )r  rè  rË   r0   r(   ré  r  r   r   r   Ú on_entNPTNetworkHostname_changedp  s&    

ÿ
z.NewPrinterGUI.on_entNPTNetworkHostname_changedc                    sn   ˆ j  ¡ }‡ fdd„}ˆ j d¡ ˆ j  d¡ dˆ _ˆ j ¡  ˆ j ¡  t	 
¡ }ˆ  ¡  | ||¡ |ˆ _d S )Nc                    s    ˆ j d krd S t ˆ j| ¡ d S r9   )rD  r   r;  Úfound_network_printer_callback)Ú
new_devicer  r   r   Úfound_callback‰  s    
z?NewPrinterGUI.on_btnNetworkFind_clicked.<locals>.found_callbackFr   )r™   rJ  rš   r  Únetwork_foundrœ   rB   r›   r©  ru  ZPrinterFinderr  r  rD  )r  rŒ  r4  r5  Úfinderr   r  r   Úon_btnNetworkFind_clicked†  s    


z'NewPrinterGUI.on_btnNetworkFind_clickedc              	   C   sx  t  ¡  |r|  jd7  _t|ƒ}zh| j |¡}| j|  |¡ | j ¡ \}}|rŠ| j 	¡ }| 
|¡}| |d¡| j| krŠ|  | j¡ W n~ tk
r
   d|_| j |¡ | j ¡  | j 	¡ }|jd | j| ¡ |dgd}| jdkr| |¡}| j |d d¡ Y nX n^d | _|  ¡  | j ¡  | j d¡ | j d¡ | jdkrl| j dtdƒ d ¡ | j  ¡  t  !¡  d S )	NrL   TFry  r   z<i>z%No printer was found at that address.z</i>)"r   r<  r6  r   r\  rØ  r§  rƒ   rG  r    r"   r  r  rÍ  r  r$   r.   r©  r~  r|  r!   r:   rD  r!  r›   rB   r™   r  rš   rœ   r/  ró   r  r=  )r  r4  r±  r¬  r(   r  r0   r)   r   r   r   r3  ™  sJ    




ÿ

ÿý
z,NewPrinterGUI.found_network_printer_callbackc                 C   sò  | j dkr| jjS | jj}| j || j¡}|}|| jkrD| jj}nª|dkr„| j 	¡ }| j
 	¡ }|r€|d| 7 }|r€|d| 7 }nj|dkrÄ| j 	¡ }| j 	¡ }|rÀ|d| 7 }|rÀ|d| 7 }n*|dkrfg }| jdf| jd	f| jd
f| jdffD ]>\}}	| ¡ }
| ¡ }|
 |d¡}|dkrö| |	d | ¡ qöd |¡}| jj d¡d }|rî|d | }nˆ|dkrä| j 	¡ }t|d ¡ \}}}}}d}d}| j ¡ rº| j 	¡ }| j 	¡ }t|||||d ¡ }|rî|d| 7 }n
| j 	¡ }|S )N)r8  râ   rt   ro  rk  ru   r.  rw   r!  r"  r#  r$  rL   r   rg  r   rp  r   rx   rì  )rY   r4  rÕ  rÖ  r×  ) r  rá   r   r‰  r%  r#   ra  r_  r   rJ  r   r   rŽ   rˆ   rŠ   r‰   r‹   r    rF  r  r$   rÌ  rs  r‘   r
   rÏ  r•   rç  r–   r—   rç  r   )r  r‰  r(  rá   r4  rû  r7   rÝ   rD   r5   r0   r)   r*  r   rY   rÕ  rü  r¾  rÖ  r×  r   r   r   rÿ  Ç  sj    






ü




 ÿ

zNewPrinterGUI.getDeviceURIc           	      C   s  | j  ¡ }| j ¡ }| j ¡ }| j |¡ | j |¡ |r@| j}|rJ| j}|rT| j	}| j
 |¡ |sÚ| jrÚ| jD ]}| j |¡ qpd | _| j ¡  d | _| j d¡ | j tdƒ¡ t tt¡}| j}| |¡ | d¡ | j| jfD ]}| |¡ qæ| j |o
| jd k¡ |  ¡  d S r:  )r¥   rç  r£   r§   r¤   r  r¦   r_  ra  rg  r¢   r^  rü   rý   r“  r’  r©   rª   rN  ró   r   rô   rõ   r«   rö   r¨   rV  )	r  rD   Zrbtn1Zrbtn2Zrbtn3r(  r”  r0   r  r   r   r   rc    s@    







ÿÿz'NewPrinterGUI.on_rbtnNPFoomatic_toggledc                 C   s   |   ¡  d S r9   r,  r—  r   r   r   Ú#on_filechooserPPD_selection_changed)  s    z1NewPrinterGUI.on_filechooserPPD_selection_changedc                 C   sÐ   d| _ | jd k	r>| jD ]}| j |¡ qd | _| j ¡  d | _| d¡ | j}| tdƒ¡ | j	 
¡ }tdt|ƒ ƒ tƒ | _g | _| j | j d| j¡¡ | j | j d| j¡¡ | j |¡ | j d¡ d S )NTFr.  zSearching for "%s"r  r0  )rè   rü   rý   r“  r’  r  rª   rN  ró   r¨   rJ  rO   r$  r   r$   rù   Úopreq_user_search_doneÚopreq_user_search_errorr7  r«   )r  rD   r”  rY  Z
searchtermr   r   r   Ú(on_btnNPDownloadableDriverSearch_clicked,  s4    




ÿÿÿÿz6NewPrinterGUI.on_btnNPDownloadableDriverSearch_clickedc                 C   s´  | j D ]}| |¡ qd| _d | _ d | _d| _|| _|| _| j}| j}t	 
¡  zD| tdƒ¡ | d¡ t tt¡}t| jƒdkrÊt| jƒdkrœtdƒ}ntdƒ}| d ¡}	| |	d|¡ | |	dd¡ g }
| jD ]\}}|
 ||f¡ qÔ|
jt dd	„ ¡d
 | j ¡  ¡ }d}|
D ]L\}}| d ¡}	| |	d|¡ | |	d|¡ | ¡ |kr| |	¡d }q| j}| |¡ | |¡ | d¡ |  ¡  W n   tƒ  Y nX t	  ¡  d S )NTr6  rL   z -- Select from search results --z-- No matches found --r   r   c                 S   s   t  | d |d ¡S )NrL   )r@  Z	modelSortrR  r   r   r   rÕ   g  rÖ   z6NewPrinterGUI.opreq_user_search_done.<locals>.<lambda>)Úkey)!rý   r“  r6  rü   ré   rì   r>  r©   rª   r   r<  rN  ró   r  r   rô   rõ   rÁ  r$   Ú	set_valuer.   Ú	functoolsÚ
cmp_to_keyr¨   rJ  r3   r!   r«   rö   rÏ   rV  r=   r=  )r  rü   r6   r?  r”  rŒ  rY  r0   Úfirstr)   Zsorted_listÚ
printer_idZprinter_nameZsoughtZselect_indexr€  r5   r  r   r   r   r:  F  sT    







z$NewPrinterGUI.opreq_user_search_donec                 C   s*   t d|t|ƒf ƒ |  |tƒ tƒ ¡ d S r@  )rO   r$  r:  rH   rA  rB  r   r   r   r;  z  s    ÿz%NewPrinterGUI.opreq_user_search_errorc                 C   s`   |   ¡  | jd k	r\| jD ]}| j |¡ qd | _| j ¡  d | _| j d¡ | j t	dƒ¡ d S )NTr6  )
rV  rü   rý   r“  r’  r©   r  rª   rN  ró   )r  rD   r”  r   r   r   Ú/on_cmbNPDownloadableDriverFoundPrinters_changed  s    


z=NewPrinterGUI.on_cmbNPDownloadableDriverFoundPrinters_changedc                 C   s   t dƒ d | _| jdkr–| j}| ¡ }| ¡ }|rŒ| |d¡}| |d¡}|dkr”| d¡ | ¡ }|r‚| |d¡}| |d¡}q”d }d }q¤d }d }n| jd \}}|d kr¾dd„ | jD ƒ}n|g}|rÎ|| _t	 
ttj¡}d }d }|D ]¢}| j| }	|	 ¡ D ]Š}
d|
kst|
d ƒdkrDtjs2|  |
¡sDtd	|
d
  ƒ qþ| d ¡}|d kr\|}| |d|
d
 ¡ | |d|
¡ |
d rþ|}qþqè|d kršdS | j ¡ sÜ| jdkrÜ| d ¡}| |dtdƒ¡ | |dd¡ |d krê|}| j}| |¡ |d k	r| ¡  |¡ |  |¡ dS )NZfilldownloadableDriversTrL   r   r   c                 S   s   g | ]}|d  ‘qS )r   r   rŸ  r   r   r   r   ¨  s     z9NewPrinterGUI.fillDownloadableDrivers.<locals>.<listcomp>rB  zRemoved invalid driver entry %sr5   ÚrecommendedFr9  zLocal Driver) rj  rë   r6  r«   r    rF  r  rÏ   rì   r   rô   rõ   r   r  r>  r4   rÁ  rñ   rÿ   r   rO   r$   r>  r§   rç  r  ró   r²   rö   r   Zselect_iterÚ)on_tvNPDownloadableDrivers_cursor_changed)r  rD   r0   r)   rB  Zprinter_strZprinter_idsZrecommended_iterZ
first_iterr?  r«  r/   r   r   r   rÞ  Œ  s†    

ÿ

ÿþýÿ


ÿ




z%NewPrinterGUI.fillDownloadableDriversc                 C   s   |   ¡  d S r9   r,  r—  r   r   r   Ú on_rbtnNPDownloadLicense_toggledÚ  s    z.NewPrinterGUI.on_rbtnNPDownloadLicense_toggledc                 C   sÆ  d| _ | j ¡ }| j ¡ }| ¡  d}| jr<tj | j¡}nd }|D ]€}|oZtj |¡|k}| j	r|| j	j
r||r||tdƒ }n|}| ||f¡}|rD| |¡}	| j |	d d¡ | j |	d ddd¡ d}qD|sò| j t ¡ d d¡ | j dd ddd¡ d}
| j	r`| j	jr`| j	j}|d r:|d	 r:|d d
 |d	  }
n&|d rN|d }
n|d r`|d }
|
dkrš| jd k	rš|
| j7 }
| jd k	rš|
d
| j 7 }
|
 d¡s²|
 d¡r¶d}
| j |
¡ d S )NFr#  Tr£  r   ç        r   rÓ  rÔ  rM   r!  r%  r  )Úrecommended_make_selectedrB  ZgetMakesr¤   r    r÷   r|  rK  Ú	normalizerá   r  ró   r$   r!   r:   r«  r   r  rß  r}  rN   r¨   rN  )r  Zmakesr0   ÚfoundZauto_make_normrå  rD  rË   r)   r(   rX   Z
devid_dictr   r   r   r8  ß  s\    

ÿ

  ÿ



ÿzNewPrinterGUI.fillMakeListc                 C   sv   |  ¡ \}}|d k	rr| jd k	rr| ¡ }| |¡}| |d¡d | _| jobtj | j¡tj | j¡k}|| _	|  
¡  d S r  )rG  rB  r    r"   r#   ÚNPMaker|  rK  rI  rH  ÚfillModelList)r  r¤   r(   r  r0   r)   Zrecommended_maker   r   r   Úon_tvNPMakes_cursor_changed  s    
ÿÿz)NewPrinterGUI.on_tvNPMakes_cursor_changedc                 C   s  d| _ | j | j¡}| j ¡ }| ¡  d}tj | j¡tj | j	¡k}|rXtj | j
¡}|D ]€}|ortj |¡|k}| jr”| jjr”|r”|tdƒ }n|}| ||f¡}	|r\| |	¡}
| j |
d d¡ | j |
d ddd¡ d}q\|s| j t ¡ d d¡ | j dd ddd¡ | j ¡  d S )NFr#  Tr£  r   rG  )rî   rB  Z	getModelsrK  r¬   r    r÷   rK  rI  r|  r}  rá   r  ró   r$   r!   r:   r«  r   r  Úcolumns_autosize)r  Zmodelsr0   ZselectedZis_auto_makeZauto_model_normÚpmodelrD  rË   r)   r(   r   r   r   rL    sB    
ÿ
ÿÿ

  ÿzNewPrinterGUI.fillModelListc              	   C   sÜ  || _ | 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 ||¡}t| ¡ ƒ}| j}z| j ||||¡| _	W n   tƒ  || _	Y nX | jr*| jr*g }	| j	D ](}
|
| jkr|	 d|
¡ qê|	 |
¡ qê|	| _	nt
dƒ g | _	g }g }d}| j	D ]ˆ}| j |¡}t|d ƒ}
|
 dd¡}
zdt|d	 ƒ }|
|7 }
W n tk
r˜   Y nX |
|k}| jr´| jjs | j|kr | |
¡ | |¡ |d
7 }| |
tdƒ f¡}| |¡}| j ¡  |¡ | j |d ddd¡ n¤| jr’|dkr’| |
¡ | |¡ |d
7 }| |
tdƒ f¡}| |¡}| j ¡  |¡ | j |d ddd¡ n2|rœq<| |
¡ | |¡ |d
7 }| |
f¡ q<|| _	| j ¡  d S )NzID matched PPDs: %srM   r   zNo PPDs available?r$  r#  r   z [%s]zppd-natural-languagerL   r¢  Tr£  rG  ) ÚNPModelr­   r    r÷   rá   rß  r  rî   r&  Ú	NPDriversrO   r$  rB  r)  rH   rˆ  rç   r(  r=   r~  Úinsertr$   r1  rJ   r[   ÚKeyErrorró   r!   r   Zselect_pathr«  rN  )r  ZpmakerO  r0   r<  r  rB  ZppdnamesÚfilesr?  r«  Z
driverlistrQ  r¬  r,  râ   ZlpostfixZ	duplicater)   r(   r   r   r   r2  =  s     

ÿþý

ÿ

ÿ


ÿ


zNewPrinterGUI.fillDriverListc                 C   s    |r|  ¡ d }|d krNdS n0| ||¡\}}| ||¡}	|	d krFdS |	d }| j|d  }
| j |
¡}t|d ƒ}|
 d¡r’|d7 }|tdƒ7 }| 	|¡ dS )Nr   Fr$  z	foomatic:rM   z"This PPD is generated by foomatic.T)
rG  Z#convert_widget_to_bin_window_coordsZget_path_at_posrQ  rB  r1  rJ   rN   ró   r/  )r  ZtvrI   rÓ   Zkeyboard_modeZtooltipr(   Zbin_xZbin_yr®  Z
drivernamer9  Zmarkupr   r   r   r  ž  s"    

z(NewPrinterGUI.on_NPDrivers_query_tooltipc                 C   sx   |  ¡ \}}|d k	rt| ¡ }| |¡}| |d¡d }| joR| joR| j ¡ | ¡ k}|| _|  | j	|¡ |  
| j¡ d S r  )rG  r    r"   r#   rH  r}  r3   rî   r2  rK  Úon_tvNPDrivers_cursor_changedr­   )r  rD   r(   r  r0   r)   rO  Zrecommended_modelr   r   r   Úon_tvNPModels_cursor_changed³  s    
ÿþz*NewPrinterGUI.on_tvNPModels_cursor_changedc                 C   s   |   ¡  d S r9   r,  r—  r   r   r   rU  Â  s    z+NewPrinterGUI.on_tvNPDrivers_cursor_changedc                 C   sÌ  | j  d¡ | j d¡ | j d¡ | j d¡ | j d¡ | j ¡  | 	¡ }|d krZd S | 
¡ \}}|sŠ| ¡ \}}|r†| |¡}nd S | |d¡}|dkr¸| j | j¡ |  ¡  d S | j | j¡ | dtdƒ¡}| j}	|d }
dd	„ }||	|
ƒ | j  |¡ | d
tdƒ¡}| j}| j}|||d ƒ |||d ƒ | j |¡ | dtdƒ¡}| j |¡ d|kr|d }dD ] }| ¡ }d }| j d| ¡}| j d| ¡}||krü|rüz6t|| ƒ}| dd¡ | |¡ | ¡  | ¡  W n   Y nX |d krx| ¡  | ¡  qxd}d|kr¼|d D ]Š}|d r0d|d  }d}|d rd||d  }|d rŒ|r€|tdƒ }||d  }|r0|tdƒ|  }|r°|d }|| }q0|sÊtdƒ}| j |¡ d|kr| j ¡  | dtdƒ¡}| j  !¡  |¡ n
| j ¡  |d  sL|d sL| j" d¡ | j" ¡  | j ¡  nJ| j d¡ | j" ¡  | j ¡  | j ¡  | dtdƒ¡}| j  !¡  |¡ d!|krºt#|d! ƒdkrºd| _$nd"| _$|  ¡  d S )#Nr   TrL   r   ÚsupplierZOpenPrintingZmanufacturersuppliedc                 S   s   || _ |  |¡ d S r9   )rÍ   rÏ   )rD   rÐ   r   r   r   Úset_protect_activeã  s    zSNewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changed.<locals>.set_protect_activeÚlicenseZDistributableÚpatentsZfreesoftwareZshortdescriptionrÈ   Úfunctionality)ZGraphicsZLineArtZPhotoZTextzhsDownloadableDriverPerf%sz"lblDownloadableDriverPerf%sUnknownr0  Úsupportcontactsr5   r
  r\   Úlevelz, z
(%s)rb  zNo support contacts knownZlicensetextzNot specified.ZnonfreesoftwarerB  F)%r´   rN  r¶   r¹   rº   rÂ   rÏ   r¿   rB   r   rë  rG  r"   r  r³   r^  r_  rV  ra  r#   ró   rµ   r·   r¸   r/  r3   Ú__dict__r  Z	set_ranger>  r©  r  rÀ   Z
get_bufferrÁ   rÁ  rê   )r  rD   r&   r0   r)   r(   r  r«  rW  ZvendorrÐ   rX  rY  rZ  ZfreeZdescriptionr[  Zfieldr=  rá  ZhsÚunknownr\  ZsupportentryZsupportcontactZsupportcontact_extraZtermsr   r   r   rE  Å  sÌ    


ÿ





ÿ
ÿ
ÿ






z7NewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changedc              
   C   s8  d }z8| j  ¡ s t| jƒdkrV| jdkrV| j ¡  ¡ \}}| |¡d }| j	| }nä| j
 ¡ rrt | j ¡ ¡}nÈ| j}| ¡  ¡ \}}| |d¡}|dkr:d|kr:t|d ƒdkr:|d d }td| d ƒ | ¡ }t|ƒdkr:tj |¡}| ¡ }	| ¡  t ¡ $}
|
 |	¡ |
 ¡  t |
j¡}W 5 Q R X W nF tk
r„ } z$tdt|ƒ ƒ | j  ¡ rØtdƒ}td	ƒ}| j ¡  ¡ \}}| |¡d }| j	| }|  d
¡rÄtdƒd }n||| j!| j"f }nˆ| j
 ¡ rPtdƒ}| j ¡ }tdƒd }z<t#j$dd|gdt#j%t#j&t#j&d}| '¡ \}}|| (¡ 7 }W n   ‚ Y nX ntdƒ}tdƒ}t)||| j*ƒ W Y ¢d S d }~X Y nX tdt|ƒ ƒ t+|t,ƒr4| j -tdƒ¡ z.|dkrÞ| j .|¡}t |¡}t/ 0|¡ W nH tk
r   t1ƒ  tdƒ Y n& tj2k
r(   t1ƒ  tdƒ Y nX | j 3¡  |S )Nr   FrL   rB  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:rb  z/usr/bin/cupstestppdz-rvvTrf  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!   rQ  r£   r@  rÜ  r¦   rH  r²   r  rO   rZ   r   r  Zurlopenr  Úcloser  r  r  r	  r5   rF  r$  ró   rN   rK  rP  rº  r»  r¼  r½  rc  rT   rû  rz   rG   rõ   rv  ZgetServerPPDrP   Úunlinkr=   rM  r  )r  râ   r0   r)   rK  r/   r«  Zfile_to_downloadZ	ppdurlobjr  r  rX  Z	err_titleZerr_textrC  Úfilenamer¾  rµ  r¿  r]   r   r   r   rÛ  ;  s¢    
ÿþ



þ
ÿ ÿû



zNewPrinterGUI.getNPPPDc              	   C   sÒ  t dƒ d| _i | _| j}| ¡ D ]}| |¡ q"| jsftjt	dƒd}| 
|¡ | ¡  t dƒ d S | jjD ]}|jdkr€qnd| _t ¡ }| d¡ | d¡ | 
|¡ d	}t|jƒD ]Ò\}}|jd
krÎqº|d7 }t|| j| ƒ}	| |	jd	|dd¡ t ¡ }
|	jr\tj dddd¡}| d	d	d	d¡ | 
|	j¡ | |d|dd¡ | |
d|dd¡ n| |
d|dd¡ |
 |	jddd	¡ |	| j|j< qºqn| jsºtjt	dƒd}| 
|¡ | ¡  | j ¡  | j ¡  d S )NzExamining installable optionsFzNo Installable Options)rY  z No PPD so no installable optionsZInstallableOptionsTrj   r   Z
PageRegionrL   r£  g      ð?rf   ) rO   rå   rÝ   r±   Zget_childrenr%   râ   r   ZLabelró   r'  r  ZoptionGroupsr5   ZGridZset_column_spacingZset_row_spacingÚ	enumerateÚkeywordr	   ZattachZconflictIconZBoxrY  Z	Alignmentr   Zset_paddingrø   Zselectorr°   rB   r©  )r  Z	containerZchildÚlrY   Zgridr'   rK  r*  ÚoZhboxÚar   r   r   rÝ     sV    







z&NewPrinterGUI.fillNPInstallableOptionsc              
   C   sä  | j r| j  ¡  d | _ |  ¡  | jr4| j ¡  d | _| jrR| j ¡  d | _|  ¡  | jdkr|| j ¡ }| j	 ¡ }| j
 ¡ }n| j}| j}| jdkr t| jƒ}z:|D ]0}z| j ||¡ W q¤ tk
rÒ   Y q¤Y q¤X q¤W nB tjk
r } z |j\}}	|  ||	¡ W Y ¢d S d }~X Y nX nž| jdks8| jdkr¾d }
| jjrP| jj}
n|  ¡ }
| jsn|  d¡ d S | j ¡ D ]}| ¡  qxt| jƒ t ¡ r¨t  ¡  q’| j !t"dƒ| ¡ zpt#|t$ƒrâ| jj%|||
||d nH|d kr| jj%||
||d n(t& '|| j(d	 ¡ | jj%|||
||d
 W n| tjk
r‚ } z4|j\}}	t)| jƒ |  ||	¡ | j *¡  W Y ¢d S d }~X Y n(   t)| jƒ | j *¡  t+dƒ Y nX | j *¡  t)| jƒ | jdkrh| j !t"dƒ| ¡ z.t& ,| j|¡ | j -||¡ | j .||¡ W nL tjk
rX } z*|j\}}	|  ||	¡ | j *¡  W Y ¢d S d }~X Y nX | j *¡  n| jdkr | j !t"dƒ| ¡ z|  ¡ }
| jj%||
d W nL tjk
rð } z*|j\}}	|  ||	¡ | j *¡  W Y ¢d S d }~X Y nX | j *¡  n~| jdkrh|s4|  /¡  }| _|s4|  d¡ d S | j !t"dƒ| ¡ d}t#|t$ƒr¢| j0 1¡ r¶z| jj%|dd W n< tjk
r´ } z|j\}}	|  ||	¡ W 5 d }~X Y nX z| jj%||d W nL tjk
r } z*|j\}}	|  ||	¡ | j *¡  W Y ¢d S d }~X Y nX z$| j 2|¡}t 3|¡}t4 5|¡ W nb tjk
rž } z@|j\}}	|tj6krnd}n |  ||	¡ | j *¡  W Y ¢d S W 5 d }~X Y nX nº| j0 1¡ sÎt#| j7tj3ƒrÎt& 8| j7|¡ nt& '|| j(d	 ¡ | j ¡ D ]}| ¡  qêz| jj%||d W nL tjk
rZ } z*|j\}}	|  ||	¡ | j *¡  W Y ¢d S d }~X Y nX | j *¡  n| jdkr~|  d	¡ | j 9¡  | jdkr¢|  :d|¡ n2| jdkr¾|  :d| j;¡ n|  :d|| j7| jk¡ d | _i | _<d S )N)r7  r7   r8  r7  r7   r8  rØ   zadding printer %s)r,  rá   r  r  )rá   r  r  r   )râ   rá   r  r  rL   zmodifying printer %srá   rœ  râ   Fr  )r,  T)râ   r9  )r7   r8  r7  rb   rd   rc   )=rA  ra   r!  ræ   rD  r’  r  r€   rJ  r‚   r   r?  râ   r2   rž   r@  ZaddPrinterToClassrF  rM  rI  r%  rá   r   rÿ  ri  rÝ   r4   Z	writebackr@   rz   r   r;   r<   rv  ró   rG   rõ   Z
addPrinterrK  ZsetPPDPageSizerÜ   r?   r  ZfatalExceptionZactivateNewPrinterZsetPrinterLocationZsetPrinterInforÛ  r®   rç  ZgetPPDrÜ  rP   rb  ZIPP_NOT_FOUNDr;  ZcopyPPDOptionsrB   r3  rç   r6   )r  rD   r5   r  r  râ   ÚmembersÚmemberrX  Úmsgr   r*  r  rc  r   r   r   Úon_btnNPApply_clickedÖ  s6   







ÿ





  ÿ

 ÿ ÿ


















ÿ



z#NewPrinterGUI.on_btnNPApply_clicked)NNNr   NNNr   )N)rL   )FN)NN)N)F)Žr¶  r·  r¸  r   ZSignalFlagsZRUN_LASTrõ   r,  Z__gsignals__r_  ra  rg  rè  ræ  rÙ  rÚ  rj  ré  rÖ  r%  rÙ   r  r  r  r!  r%  r+  r)  r2  ra   rZ  rE  rQ  rP  rR  rS  rU  rT  r[  rf  rh  rx  r†  rƒ  r]  r  rŽ  r  r‘  r•  r˜  r™  r¯  rª  r   r¨  ri  r×  rÕ  rê  rí  rî  rï  rñ  rð  rò  r+  r3  r4  r5  rD  rV  rI  rM  rN  rV  rQ  rU  r[  re  ri  rn  r   rb  r›  r•  rƒ  rX  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-  r1  r2  r8  r3  rÿ  rc  r9  r<  r:  r;  rC  rÞ  rF  r8  rM  rL  r2  r  rV  rU  rE  rÛ  rÝ  rl  r   r   r   r   r`   Å   sT  ÿÿùò  "         ÿ
b	
	
(:1e #"PeO4 
$S*& $Hb'L+	 M &".:(4N2 ave6r`   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.
)rj  r   r   r   r   Ú	show_help  s    rm  Ú__main__rL   r   zsetup-printer=zdevid=z--setup-printerz--devidZuiZSYSTEM_CONFIG_PRINTER_UIc                  G   s   t  ¡  d S r9   )r   Z	main_quit)rI  r   r   r   Ú	on_signal¶  s    ro  rb   rc   re   r8  )rW  r<  r7   )N)Xrñ   rG  rK  r   rË  ÚsysrP   r  rÃ  Ú	tracebackrU   Zhttp.clientrÑ  rÚ   rã  rº  Ztimedopsr–  Zgi.repositoryr   r   rR   r?  r@  r³  r²  rÝ   r   r   Zguir   Zoptionwidgetsr	   r¼  ru  Zurllib.requestr   Zurllib.parseZsmburir
   Zerrordialogsr   r  ru  ræ   r^  rö  ÚgettextÚinstallrò   r   ró   r‹  r   r*   r2   r8   r?   r@   rF   rJ   r_   r`   rm  r¶  ZgetoptZ
gnu_getoptÚargvr  rI  ZGetoptErrorÚexitZsetup_printerr<  ZoptZoptargr¸  Z	ppdippstrÚ	setlocaler±  rZ  Zset_debuggingZset_debugprint_fnrO   rv  ro  rù   Úmainr   r   r   r   Ú<module>   sè   8
	


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