
    Hf                       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 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ada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 d dl Z d dl!Z"d dl#Z"d dl$m%Z% d dl& 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-j\                  e j^                  e j`                         dZ1 e2d      Z3d Z4d Z5d Z6d Z7d-dZ8d Z9d Z:d Z;d Z< G d de      Z=d Z>e?dk(  rd dl@Z@	  e@j                  ej                  dd dd d!g      \  ZCZDdZGdZHeCD ]  \  ZIZJeId"k(  reJZGeId#k(  seJZH d$ej                  d%<   d dlLZL ej                  ej                  d        eLj                           ePd        ej                  eR        e=       ZSd& ZTeSj                  d'eT       eSj                  d(eT       eSj                  d)eT       eGeSj                  d*eGeH+       neSj                  d,        ej                          yy#  daY xY w# e@j                  $ r  e>         ej                  d       Y )w xY w).    N)OpenPrintingRequest)*)Gdk)GtkTF)GObject)GLib)GtkGUI)OptionWidget)SMBURI)PhysicalDevice)domain	localedirg      .@z^The firewall may need adjusting in order to detect network printers.  Adjust the firewall now?c                 X    t         j                  j                  |       \  }}||dk(  ryy)z*Returns True is the provided URI is valid. FT)urllibparse	splittype)urischemerests      ./usr/share/system-config-printer/newprinter.pyvalidDeviceURIr   L   s+    \\++S1NVT~2    c                    | j                         }|j                         \  }}|D cg c]"  }t        j                  j	                  ||      $ }}|j                         }|D ]W  }|j                         }|j                  |      }|j                  |d      }	|j                  |	       |j                  |       Y y c c}w Nr   )get_selectionget_selected_rowsr   TreeRowReferencenew	get_modelget_pathget_itergetappendremove)
treeview_fromtreeview_to	selection
model_fromrowsrowmodel_topathiterrow_datas
             r   moveClassMembersr0   U   s    ++-I 224JAEF#C  $$Z5FDF$$&H  ||~""4(>>$*!$ 	 Gs   'B>c                     | j                         }|j                         }g }|r8|j                  |j                  |d      d          |j	                  |      }|r8|j                          |S r   )r    get_iter_firstr$   r#   	iter_nextsort)treeviewmodelr.   results       r   getCurrentClassMembersr8   c   se     E!DF
eiia(+,t$  KKMMr   c                     |sy|j                         }| j                         D ].  }|j                  r|j                  j                         |k(  s. y y)NFT)lowervalues
discoveredname)printersr=   printers      r   checkNPNamer@   m   sM    ::<D??$ !!gll&8&8&:D&@ r   c                     	 | j                         }|rP|j                  |       t        j                         r*t        j                          t        j                         r)y y y #  t                Y y xY wN)
get_window
set_cursorr   events_pendingmain_iterationnonfatalException)wincursorgdkwins      r   readyrK   u   s\    !v&$$'""% $$' s   AA% %A3c                     t        | t        j                  j                  t        j                  j
                               y rB   )rK   r   Cursorr   
CursorTypeWATCH)rH   s    r   busyrP      s#    	3

s~~3345r   c                 $    | j                          yNT)hide)widgetevents     r   on_delete_just_hiderV      s    
KKNr   c                 0    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)xs    r   
_singletonr[      s     1dtHr   c                 V   | j                  d      st        d| z         yd}	 t        j                  j	                  | t
              5 }|j                  dk(  r|j                         j                  d      }ddd       |t        d	| z         yt        j                  d
t        j                        }|j                  |      }|r/|j                  d      j                         j!                  dd      S y# 1 sw Y   xY w# t        $ r}t        d| d|       Y d}~d}~ww xY w)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 driverN)timeout   utf-8zCannot retrieve : zCannot retrieve %sz$ ((?:(?:[0-9A-F]{4})(?:\s+|$)){10})$    r   )
startswith
debugprintr   requesturlopenHTTPS_TIMEOUTstatusreaddecode	ExceptionrecompileMsearchgroupstripreplace)urlcontentrespekeyid_rems         r   download_gpg_fingerprintry      s    >>*%EKLG8^^##C#? 	64{{c!))+,,W5	6 '#-.zzA244HH Awwqz!))#b11!	6 	6  8sA6778s/   %D 	/C88D 8D=D 	D(D##D(c                   B   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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 ddZd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0dd,Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7dd3Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIddEZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQddMZRddNZSdO ZTdP ZUdQ ZVddRZWdS ZXdT ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_d[ Z`d\ Zad] Zbd^ Zcd_ Zdd` Zeda Zfdb Zgdc Zhdd Zide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm Zrdn Zsdo Ztdp Zudq Zvdr Zwds Zxdt Zydu Zzdv Z{dw Z|dx Z}dy Z~dz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)NewPrinterGUIN )destroyprinter-addedprinter-modifieddriver-download-checkeddialog-canceledr   ra                     TF)parallelusb	bluetoothhalbehhphpfaxdnssdsocketlpdscsiserialsmbnetworkc                    t         j                   j                  |        t        j                  t        j                        | _        i | _        t               | _        t               | _	        d | _
        d | _        d| _        d| _        d| _        d | _        g | _        d| _        d| _        d| _        d | _        g | _        d| _        i | _        d| _        d | _        d | _        | j7                  g dddgg ddt8        j:                         | j<                  t?        d      d	gd
d
gddgddgddgddgddgddgddgg	f| j@                  t?        d      d	gt?        d      dgt?        d      dgt?        d      dggf| jB                  t?        d      d	gddgddggf| jD                  t?        d      d	gt?        d      dgt?        d      dgt?        d      dgt?        d      dggffD ]  \  }}tG        jH                  tJ        tJ              }|D ]  }|jM                  |        |jO                  |       tG        jP                         }|jS                          |jU                  |d       |jW                  |d d!        tF        jX                  jZ                  }tF        jX                  j\                  }tF        jX                  j^                  }t?        d"      tG        jH                  tJ              | j`                  |ft?        d#      tG        jH                  tJ              | jb                  |ft?        d$      tG        jH                  tJ              | jd                  |ft?        d%      tG        jH                  tJ              | jf                  |ft?        d&      tG        jH                  tJ        tJ              | jh                  |ft?        d'      tG        jH                  tJ        tJ              | jj                  |ft?        d(      tG        jH                  tJ              | jl                  |ft?        d)      tG        jH                  tJ              | jn                  |ffD ]t  \  }	}
}}tG        jP                         }tG        jp                  |	|d!*      }|jO                  |
       |js                  |       |ju                         jw                  |       v | jx                  j{                  d+t|               | j~                  j{                  d+t|              | _@        | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       d!| _F        d | _G        d | _H        | j                  }tG        jP                         }|jU                  |d       |jW                  |d d!       t8        j                  r-| j                  | j                  fD ]  }|j                           t        j                  j                  d,      st        j                  j                  d-      rd.t8        _Q        d/| _R        n=t        j                  j                  d0      rd1t8        _Q        d2| _R        ndt8        _S        d3 }| j                  | j                  | j                  fD ]  }|j{                  d4|        | j                  | j                  | j                  | j                  fD ]  }|j{                  d5d6         | jd                  ju                         }|j                  | j                  d        | jd                  j                  | j                  d        | jd                  j{                  d7| j                         | jd                  j{                  d8| j                         | j                  j{                  d9| j                         | j                  j                  d:       tG        j                  t         j                        | _d        | j                  j                  d       t        s$| j                  j                  t?        d;             | j                  jO                  | j                         tG        jp                  t?        d<            }tG        jP                         }|jU                  |d       |j                  || j                  d        | j                  js                  |       tG        jp                  t?        d=            }tG        jP                         }|jU                  |d       |j                  || j                  d        | j                  js                  |       | j                  ju                         }|j                  | j                  d        | jx                  j                  | j                         | jl                  j                  d       | jl                  j{                  d>| j                         tG        j                         }|j                  t?        d?             |j                  d@       |j                  dA       |j                  dB       |j                  dC       |j                  dD       | j                  j                  |       tG        j                         }|j                  t?        dE             |j                  dF       | j                  j                  |       dG| _w        dH| _x        | j                          t        dI| z         y )JNF)M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hsDownloadableDriverPerfPhoto$lblDownloadableDriverPerfTextUnknown'lblDownloadableDriverPerfLineArtUnknown(lblDownloadableDriverPerfGraphicsUnknown%lblDownloadableDriverPerfPhotoUnknown#frmNPDownloadableDriverLicenseTermstvNPDownloadableDriverLicenserbtnNPDownloadLicenseYesrbtnNPDownloadLicenseNo
WaitWindowlblWait)SMBBrowseDialogtvSMBBrowserbtnSMBBrowseOk)r   r   r   )r   Defaultr   1200240048009600192003840057600115200NonenoneOddoddEveneven87zXON/XOFF (Software)softzRTS/CTS (Hardware)hardzDTR/DSR (Hardware)Ttextr   zMembers of this classOthersDevicesConnectionsMakesModelsDriverszDownloadable Drivers)r   delete-eventz/etc/apt/sources.listz/etc/apt/sources.list.ddebaptz/etc/yum.confrpmyumc                 F    t        | dd       }|| j                  |       y y )Nprotect_active)getattr
set_active)toggle_widgetactives     r   protect_togglez.NewPrinterGUI.__init__.<locals>.protect_toggle  s*    m-=tDF!((&1 "r   clickedzchange-valuec                      yrR   r|   )rZ   yzs      r   <lambda>z(NewPrinterGUI.__init__.<locals>.<lambda>  s    r   zrow-activatedzrow-expandedznotify::expandedra   zBrowsing requires pysmbc module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   r?   z+%s){r   __init__locale	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_rerunr>   recommended_model_selected_searchdialog_installdialog
getWidgetsconfigPACKAGEr   _r   r   r   r   	ListStorestrr$   	set_modelCellRendererTextclear
pack_startadd_attributeSelectionModeMULTIPLESINGLEBROWSEr   r   r   r   r   r   r   r   TreeViewColumnappend_columnr   set_moder   connectrV   r   WaitWindow_handlerr   set_show_tabsr   r   r   spinner_countopreqopreq_handlersr   DOWNLOADABLE_ONLYFREEr   r   rS   osr-   existspackagesystempackageinstallerDOWNLOADABLE_ONLYPPDr   r   r   r   r   set_select_functiondevice_select_functionset_row_separator_funcdevice_row_separator_fndevice_row_activateddevice_row_expandedr   on_expNPDeviceURIs_expandedset_expanded	TreeStoreTYPE_PYOBJECT	smb_storer   set_sensitivePYSMB_AVAILABLEset_tooltip_textr   set_cell_data_funcsmbbrowser_cell_sharesmbbrowser_cell_commentsmb_select_functionset_transient_forr   set_has_tooltipon_NPDrivers_query_tooltip
FileFilterset_nameadd_patternr   
add_filterdevice_selecteddialog_modeconnect_signalsrd   )selfrT   optsstorer+   cellrx   sbr=   r6   r5   selection_modecolumncomboboxr  slctcol
ppd_filters                      r   r  zNewPrinterGUI.__init__   s	     $'((&*<*<=u$ %#( &(#).&(-%$)!/3,%'"$*/'!"L9\ +')0eT1l  &~~m 	 V	/t --I,+ &) &) &) &)!7+!7+!7+"H-/	0 //I,+F)V,E(E*F)V,./ --I,+ss%&
 --I,+F)V,12F;016:016:	<=-'	3 V< MM3,E #c"# e$''*DLLOtT*  $2O'	3T &&$$$$&'s);q"x[#--,d.A.A1Ey\3==-t/?/?C}s}}S143F3FJwZsC0$..Cx[#--S14??1Ey\3==-t/?/?B%&c(:))1.6 	>1D%> '')D''d;Fu%""6*""$--n=#	>* 	$$n6IJ"&//"9"9>;N#P 	))%0((/%%e,//==eD 
"<<##%T4(tVQ/''AADDF  77>>12bggnn%7'#(F $)D!WW^^O,#(F $)D! +/F'	2
 @@==@@B 	7F NNI~6	7
 88;;<<99; 	2F NNN02		2 --0  $"="=tD//1M1MtT  /43L3LM  .$2J2JK 	$$&8&*&F&F	H))!, (=(=>''... 3; 1< =##T^^4   !G*-##&e$d&@&@$G''-  !I,/##&e$d&B&BDI''-  ..1  $":":DA..t/D/DE((.  $2Q2QR^^%
Aqrsw'w'z*z*z*&&z2^^%
Ao./s#&&z2!$EDL!r   c                      t        d| z         y )Nz-%s)rd   rj  s    r   __del__zNewPrinterGUI.__del__  s    EDL!r   c                 0   t        d| z         | j                  r!| j                  j                          d | _        | j                  r!| j                  j                          d | _        | j                  r"| j                  j                          d | _        y y )NzDESTROY: %s)rd   r   r}   r   r   rw  s    r   
do_destroyzNewPrinterGUI.do_destroy   sx    MD()  ((+#'D   !!)),$(D!??OO##&"DO r   c                     | j                   dk(  r4| j                  j                          | j                  j                          | xj                   dz  c_         y )Nr   ra   )rE  r   showstartrw  s    r   inc_spinner_taskzNewPrinterGUI.inc_spinner_task  sA    "LL LL!ar   c                     | xj                   dz  c_         | j                   dk(  r5| j                  j                          | j                  j                          y y Nra   r   )rE  r   rS   stoprw  s    r   dec_spinner_taskzNewPrinterGUI.dec_spinner_task  sF    a"LL LL  #r   c                 l    t        | dt        |      d|d       t        ||| j                        S )Nz: IPP error dialog (, )parent)rd   reprshow_IPP_Errorr   )rj  	exceptionmessages      r   r  zNewPrinterGUI.show_IPP_Error  s2    tT9=M7>@ 	Ay'$:O:OPPr   c                 8   |j                         r| j                  j                  |       n| j                  j                  |       |j                  r| j                  j                  |       n| j                  j                  |       | j                          y rB   )
is_changedr  adddiscardr  setDataButtonState)rj  options     r   option_changedzNewPrinterGUI.option_changed   sn    LLV$LL  (NNv&NN""6*!r   c                 b    | j                   j                  t        | j                                y rB   )r   rY  boolr  rw  s    r   r  z NewPrinterGUI.setDataButtonState.  s"    ''D,@(@Ar   c                 p   |j                  dd      }|j                  dd      }|j                  dd      }t        | j                  |      sid}t        | j                  |dz   t        |      z         s1|dz  }|dk(  rn&t        | j                  |dz   t        |      z         s1|dt        |      z   z  }|S )z-Make a suggested queue name valid and unique.rb   -/#r   ra   d   )rr   r@   r>   r5  )rj  r=   suffixs      r   makeNameUniquezNewPrinterGUI.makeNameUnique1  s    ||S#&||S#&||S#&DMM40F!4==$*sF|2KL!S= "4==$*sF|2KL C#v,&&Dr   c                 &    | j                  d       y )Nr}   )emitrw  s    r   r}   zNewPrinterGUI.destroy?  s    		9r   c
                 	   || _         | j                   s| j                  j                  d       || _        || _        || _        || _        || _        || _        || _	        |st        j                         | _        |st        j                         | _        i | _        t               | _        t               | _        d | _        d | _        d | _        d | _        | j+                         st,        	 t/        j0                  | j                  | j                  | j                        | _
        	 t=        j>                  | j                        | _         | jF                  jI                          | jJ                  jM                  d       | jJ                  jO                  d       | jP                  jM                  d       | jR                  jI                          | jT                  jW                         }|jY                          | jZ                  }|j]                  t_        j`                  tb        tb                     | jd                  jO                  d       | jf                  }|jO                  ti        d             | jj                  jO                  d       | jl                  jo                  d       |	d	k7  rK| j                   r?| j                  jq                          | j                  js                  | j                          | j                  d
k(  r| ju                          n| j                  dk(  r| jw                          n| j                  dk(  r| jy                          n`| j                  dk(  r| j{                          n@| j                  dk(  r| j}                          n | j                  dk(  r| j                          y|	d	k(  r'| j                   r| j                  js                  |       | j                  j                          | j                          y# t        j2                  $ r.}
|
j4                  \  }t7        || j                          Y d }
~
yd }
~
wt,        $ r t7        d| j                          Y yt8        $ r}
t;        |
       Y d }
~
yd }
~
ww xY w# t        jB                  $ r1}
|
j4                  \  }
}tE        |
|| j                          Y d }
~
yd }
~
ww xY w)NF)r  host
encryptionr  r  Tr   Search9100r   r?   classr   printer_with_urir!  download_driver)Br  r   set_focus_on_maprh  _device_uriorig_ppddevid_host_encryption_namecups	getServergetEncryptionr  r  r  r  fetchDevices_connppdsppdsmatch_resultprinter_finder_validInitParametersRuntimeErrorauthconn
Connection	HTTPErrorargsshow_HTTP_Errorrk   rG   cupshelpersgetPrintersr>   IPPErrorr  r   rS   r   rY  set_textr   r   r   r    r8  r   r6  r   r4  r5  r   r   r3  r   r   r  show_nowr`  _initialisePrinterMode_initialiseClassMode_initialiseDeviceMode_initialisePrinterWithURIMode_initialisePPDMode_initialiseDownloadDriverModer|  setNPButtons)rj  rh  
device_urir=   r!  r  r  r  r  xidrv   rn  rx   r6   rr  labels                   r   initzNewPrinterGUI.initB  s   {{!!22E:&%

%
*DJ#114Du!%	 $"((+	 ++D4I4I26**8<8H8HJDI	'33TYY?DM 	$$)),""00$7""++R0))40##((+ ((*<<CMM345**33R888($  ))&1))$/!8!!**,!!33T[[Ay(''*(%%()&&)!33..1&##&!22..1!8!!33V<""${ ~~ 	66DQQ, 	R- 	q!	 }} 	VVFQAq5	sB   .;P *$R R'$Q"R4R<RRS''SSc                 x    | j                   dv r| j                  d uS | j                   dk(  r| j                  dk7  S y)N)r  r   r!  r  r   T)rh  r  r  rw  s    r   r  z"NewPrinterGUI._validInitParameters  sC    DD##4//!22::##r   c                     | j                  d       | j                  j                  t        d             | j	                          | j
                  j                  | j                         y )Nr  z	New Class)_initialiseWidgetsForModer   	set_titler3  fillNewClassMembersr   set_current_pagePAGE_DESCRIBE_PRINTERrw  s    r   r  z"NewPrinterGUI._initialiseClassMode  sP    &&0'';8  # 	,,d.H.HIr   c                 D   | j                  d       | j                  j                  t        d             | j                  j                  | j                         | j                          | j                  j                  d       | j                  | j                         y )Nr?   New PrinterT)r  r   r  r3  r   r  PAGE_SELECT_DEVICEfillDeviceTabr   r  on_rbtnNPFoomatic_toggledrw  s    r   r  z$NewPrinterGUI._initialisePrinterMode  sy    &&	2''=)9: 	,,d.E.EF&&-&&(;(;<r   c                     | j                   j                  t        d             | j                  j	                  | j
                         | j                  | j                         y )NzChange Device URI)r   r  r3  r   r  r  r  r  rw  s    r   r  z#NewPrinterGUI._initialiseDeviceMode  sJ    ''+>)?@,,d.E.EFD,,-r   c                    | j                  d       | j                          | j                  j                  t	        d             | j
                  j                  | j                         | j                  j                  d       | j                  | j                         | j                  j                  d       | j                          | j                  d       y )Nr?   r  Tr   step)r  _initialiseDeviceFromURIr   r  r3  r   r  PAGE_SELECT_INSTALL_METHODr   r  r  r   _initialiseAutoVariables	nextNPTabrw  s    r   r  z+NewPrinterGUI._initialisePrinterWithURIMode  s    &&	2%%(''=)9:,,d.M.MN&&-&&(;(;<&&1148%%(q!r   c                     | j                   j                  t        d             | j                  j	                  | j
                         d| _        | j                  d       y )NzDownload Printer DriverTr   r  )r   r  r3  r   r  PAGE_DOWNLOAD_DRIVERr,  r  rw  s    r   r  z+NewPrinterGUI._initialiseDownloadDriverMode  sL    ''+D)EF,,d.G.GH#q!r   c                    | j                          | j                  j                  t        d             | j                  st        | j                  j                  dd      d         }|g}|dv r|j                  ddg       t        j                         | _        | j                  j                  t        d             | j                          t        j                  | j                  || j                   | j                   	       | j"                  j%                  | j&                         | j(                  j+                  d
       | j-                  | j(                         | j.                  j+                  d
       | j1                          y )NzChange Driver:ra   r   r   r   ippsnmpr   fetching device listinclude_schemesreply_handlererror_handlerT)r  r   r  r3  r  r5  r  splitextend	asyncconnr  r  _begin_operationr~  r  
getDeviceschange_ppd_got_devsr   r  r  r   r  r  r   r  )rj  r   schemess      r   r  z NewPrinterGUI._initialisePPDMode  s:   %%(''?);< zz$**00#q9!<=FhG11 12%.%9%9%<D"""33Q7M5NO!!$""D$:$:4;262J2J262J2JL
 	,,d.M.MN&&-&&(;(;<&&1148%%(r   c                 *   | j                   j                  | j                  |             | j                   j                          | j                  | j
                  | j                  | j                  | j                  fD ]  }|j                  d        y Nr   )	r   r  r  
grab_focusr   r   r   r   r   )rj  	mode_namerT   s      r   r  z'NewPrinterGUI._initialiseWidgetsForMode  sx    !4!4i!@A!!$)),,~~t':':**, 	!F OOR 		!r   c                 R    i }t        j                  | j                  fi || _        y rB   )r  Devicer  r   )rj  device_dicts     r   r  z&NewPrinterGUI._initialiseDeviceFromURI  s$    !(($*:*:JkJr   c                 .    d| _         d| _        d | _        y r  )	auto_make
auto_modelauto_driverrw  s    r   r  z&NewPrinterGUI._initialiseAutoVariables  s    r   c                    | j                   j                          | j                   j                          d | _         | j                          t	        |t
              ri }n|}d }d }| j                  dk7  r| j                  }nF|j                  | j                  j                        }|r|j                  }|j                  }|| _        | j                  j                  | j                         | j                  d       y )Nr   r   r  )r  _end_operationr}   r  rX   rk   r  r#   r   r   idmake_and_modelr   r  r  r  )rj  connr7   current_devicesr  mmr   s          r   r  z!NewPrinterGUI.change_ppd_got_devs  s    --0&&)!% vy) O$O::JJE$(($++//:F		**$ 	,,d.M.MNa r   c                    | j                  |       | j                  sy|j                  rd| _        t	        d       d| _        | j                  j                         | j                  k(  r| j                  d       y| j                          y)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   r  )
_getPPDs_replyr  _jockey_has_answeredr'  rd   r,  r   get_current_pager  r  )rj  r%  s     r   on_ppdsloader_finished_nextz)NewPrinterGUI.on_ppdsloader_finished_next  ss     	Z(yy**-1D*CD#//2d6U6UUNN1N%NNr   c                     |j                          }|r |j                          	 | |j                         }|r@|| _         |j                         | _	        |j                  r% |j                         | _        nd | _        d | _	         |j                          d | _        y # t        j                  $ r+}|j                  \  }}| j                  ||       Y d }~y d }~ww xY wrB   )	get_errorr}   r  r  r  r  get_ppdsr  get_ppdsmatch_resultr  r  get_installed_filesr&  r%  )rj  r%  excrv   rx   r  s         r   r  zNewPrinterGUI._getPPDs_reply5  s    "j""%J!	 #z""%DI$CJ$C$C$FD!...Lj.L.L.O+DI$(D!
! == A##Q*s   B" "C 5!CC c                    | j                   j                         }|j                          | j                  j                         }|j                          	 t	        j
                  | j                        | _        | j                  j                         D ]?  }| j                  |   j                  t        j                  z  r.|j                  |f       A y # t        j                  $ r
 i | _        Y yw xY wrB   )r   r    r8  r   r  r  r  r>   r  keystypeCUPS_PRINTER_CLASSr$   )rj  r6   r?   s      r   r  z!NewPrinterGUI.fillNewClassMembersO  s      **,##--/	'33TYY?DM }}))+ 	)G==)..1H1HHgZ(	) }} 	DM	s   $C C43C4c                     t        | j                  | j                         | j                  j	                  t        t        | j                                     |j	                  d       y NF)r0   r   r   r   rY  r  r8   rj  buttons     r   on_btnNCAddMember_clickedz'NewPrinterGUI.on_btnNCAddMember_clicked]  sL    ,,d.>.>?%%'(8(89:	<U#r   c                     t        | j                  | j                         | j                  j	                  t        t        | j                                     |j	                  d       y r  )r0   r   r   r   rY  r  r8   r  s     r   on_btnNCDelMember_clickedz'NewPrinterGUI.on_btnNCDelMember_clickedc  sL    ))4+>+>?%%'(8(89:	<U#r   c                     |j                         }|y |j                         \  }}| j                  j                  |g k7         y rB   )r   r   r   rY  rj  rT   r(   r)   r*   s        r   on_tvNCMembers_cursor_changedz+NewPrinterGUI.on_tvNCMembers_cursor_changedi  D    ((*	$668
D))$"*5r   c                     |j                         }|y |j                         \  }}| j                  j                  |g k7         y rB   )r   r   r   rY  r  s        r    on_tvNCNotMembers_cursor_changedz.NewPrinterGUI.on_tvNCNotMembers_cursor_changedq  r  r   c                    | j                   r1| j                   j                          d | _         | j                          | j                  r!| j                  j                          d | _        | j                  r1| j                  j                          d | _        | j                          | j                  j                          | j                  T| j                  D ]  }| j                  j                  |        d | _	        | j                  j                          d | _        d | _        i | _        | j                  d       y)Nr   T)r  r}   r  r%  r  cancelr   rS   rF  rG  
disconnectr   r>   r  )rj  rT   rU   handlers       r   on_NPCancelzNewPrinterGUI.on_NPCancel{  s    !!""**-%)D"!!$??OO##&"DO&&)"&D!!$""$::!.. 0

%%w/0 #'DJJ DJ		$%r   c                 &    | j                  d       y )Nr  r  rj  rT   s     r   on_btnNPBack_clickedz"NewPrinterGUI.on_btnNPBack_clicked  s    rr   c                 $    | j                          y rB   r&  r'  s     r   on_btnNPForward_clickedz%NewPrinterGUI.on_btnNPForward_clicked  s    r   c                 X   | j                  |      }|sy|d   }|d   }|d   }t        d      |z  }t        j                  | j                  ddt        j
                  j                  t        j                  j                  |      | _	        | j                  j                  t        d             | j                  j                         }t        j                         }|j                  |       |j                          || j                  _        | j                  j!                  d	| j"                         | j                  j%                          | j'                  |||      }	| j                  r;| j                  j)                          | j                  j+                          d | _	        |	S )
NFr=   repokeyidzInstalling driver %sT)r  modaldestroy_with_parentr  buttonsr   zInstalling ...response)_getDriverInstallationInfor3  r   MessageDialogr   MessageTypeINFOButtonsTypeCANCELr/  format_secondary_textget_message_areaProgressBarr  r|  _progress_barrB  _installdialog_responseshow_alldo_installdriverpackagerS   r}   )
rj  driverinstall_infor=   r,  r-  fmt
dialogareapbarrets
             r   installdriverpackagez"NewPrinterGUI.installdriverpackage  sc   66?F#F#W%&'$.!//8M8M7;QU69oo6J6J9<9O9O69	; 	1115E3FG((99;
 t		 -1)##Z1M1MN$$' **D$>$$'''*"&D
r   c           
         t        dt        |      dt        |      dt        |             t        j                  j	                         }d|d<   |rd|||g}nd||g}t        dt        |      z          d}	 t        j                  ||dt
        j                  t
        j                  	      | _	        | j                  j                  | j                  j                  }}d
}	| j                  j                  }
| j                  j                         .|j                         j!                         }t#        |      dkD  r|dk(  rd}	n|j%                  d      rO	 t'        |dd        }|dk\  r|
j)                  |dz         n%|
j+                  | dz         |
j-                          n*| j.                  j1                  |j3                  d             t5        j6                         r)t5        j8                          t5        j6                         r)|st;        j<                  d       | j                  j                         .| j                  j>                  dk7  r|	sd
}|sg | _        |S #  Y xY w#  d
}Y xY w)NzInstalling driver: z; Repo: z
; Key ID: CLC_ALLzinstall-printerdriverzRunning command: T)env	close_fdsstdinstdoutFr   done   Pra   r  r_   g?) rd   r  rI  environcopy
subprocessPopenDEVNULLPIPEprL  stderrr/  r;  pollreadlinerq   lenrc   floatset_fractionset_pulse_steppulser&  r$   rj   r   rE   rF   timesleep
returncode)rj  r=   r,  r-  new_environr  rD  rL  rV  rM  rC  line
percentages                r   r>  z%NewPrinterGUI.do_installdriverpackage  s   $K$K%L" 	# jjoo' #H+T4?D+T48D'$t*45$	%%t-7-?-?.8oo?DF
 !%tvv}}VVD&&44D&&++-')//1IMv~#.!).tABxJ)Q $ 1 1*S. A $ 3 3ZKO D $

 33::4;;w;OP((+&&) ((+JJ$+ &&++-', vv  A%d
 *,D'
#! 	Cs3   ;CI2 AI+ (A'I2 1I2 I2 +I/-I2 2I8c                    |j                  di       }t        |j                               }t        |      dk(  rt	        d       y t        |      dkD  rt	        dt        |      z         y ||d      }t        |      dk7  rt	        d       y t        |j                               d   }d}|j                  d      r|j                  d	      d   }nC|j                  d
      r$dj                  |j                  d      dd       }nt        d|z         d }d||   vr#t        j                  rI|d   dvrBt	        d       y t        ||   d         }t        j                  r|d   dvr|st	        d       y ||   j                  di       j                  | j                        }|s8t	        d| j                  dt        ||   j                  di                    y |||dS )Npackagesr   zNo packages for driverra   zMReturned more than one matching architecture, please report this as a bug: %sz=Returned more than one package, this is currently not handledr   z.debr3  z.rpmr  zUnknown package type: fingerprint)allnoarchz?Not installing driver as it does not have a GPG fingerprint URLzANot installing driver as it does not have a valid GPG fingerprintrepositorieszLocal package system z not found in )r=   r,  r-  )r#   rY   r  rY  rd   r  endswithr  join
ValueErrorr1  DOWNLOADABLE_PKG_ONLYSIGNEDry   rL  )rj  r?  pkgsarchespkgr=   r-  r,  s           r   r2  z(NewPrinterGUI._getDriverInstallationInfo   s   zz*b)diik"v;!/0v;?fimouivvwF1It9>VW499;"<<99S>!$D\\&!88CIIcN1R01D5;<< S	)11fQiGX6X\],T#Y}-EFE11fQiGX6Xaf^_ Cy}}^R044T5J5JK--d3immNB?@B C  te==r   c                 8    | j                   j                          y rB   )rU  	terminaterj  dialogr1  s      r   r<  z%NewPrinterGUI._installdialog_response1  s    r   c                    | j                   j                         }t        d|z         d}| j                  dk(  s-| j                  dk(  s| j                  dk(  s| j                  dk(  r"| j	                  |      }|| j
                  k(  rd}|st        d       y | j                         }||j                  |      |z      }d}	 |j                  | j                        d	kD  r|| j                  k(  xr |d
k\  }t        d|z         |r| j                         | _        d| _        | j                  y t        | j                  t        j                         r| j#                          n*| j                  }d | _        | j#                          || _        | j                  s&|| j                  k(  r||j                  |      dz      }|| j                  k(  r(| j                  s|d
k  r||j                  |      dz
     }t        d|z         |d
k\  r|| j$                  k(  r| j'                          |d
k\  rL|| j(                  k(  r<d }	d }
	 | j*                  j,                  rM| j*                  j.                  dvr5| j*                  j0                  d   d| j*                  j0                  d   }		 |	t        | j                  t        j                         r]| j                  j5                  d      j6                  }t8        j:                  j=                  |      \  }}|r
|r|d|}	n
|s|r||}	|	r|	}
nd}	| j?                  |	      }	| j@                  jC                  |	       |
r| jD                  jC                  |
       | j                   jG                  |       | jI                          y # t        $ r || j                  k(  xr |d
k\  }Y w xY w#  t3                Y 5xY w#  t3                Y xY w)NzNext clicked on page %dTr?   r  r!  r  Fz9Interrupting execution of nextNPTab(): Operations pendingr  r   zWill fetch ppd? %dra   zWill advance to page %d)r   r   r  httphttpsr   MFGrb   MDL	modelName)%r   r  rd   rh  _handlePrinterInstallationModeINSTALL_RESULT_OPS_PENDING_getPagesOrderForDialogModeindex
PAGE_APPLYrm  PAGE_INSTALLABLE_OPTIONSgetNPPPDr!  r$  rX   r  PPDfillNPInstallableOptionsr  fillDownloadableDriversr  r   r  r  id_dictrG   findAttrvaluer  r  ppdMakeModelSplitr  r   r  r   r  r  )rj  r  page_nr
keep_goinginstall_resultordernext_page_nr	fetch_ppdr!  r=   descrmnamemaker6   s                 r   r  zNewPrinterGUI.nextNPTab4  s   %%668-78
y(D,<,<@R,R%'4+;+;?P+P!@@$GN!@!@@ #
ST003U[[1$67 		T{{DOO,r1(DOO;I		 	(945}}DH',D$xx $((DHH---/ hh--/++4#@#@@#(\)B1)D#EL 4888,, \!:1!<=L-<=19)B)BB((+19)C)CCDE%KKNN(( -K K&*kk&9&9%&@&*kk&9&9%&@BD
	%<J$(($C HH--{;AAE"-"2"2"D"De"LKD%*.6)-u5  &&-DNN##T*%%..6,,\:Q  	T$(E(EES$RS)I	TZ%!$%!$s,   4N& A#O 'BO &O	O	OO,c                 	   g }| j                   dk(  r%| j                  | j                  | j                  g}|S | j                   dk(  r| j                  g}|S | j                   dk(  r| j
                  r| j                  | j                  g}|S | j                  r| j                  j                         s| j                  r0| j                  | j                  | j                  | j                  g}|S | j                  | j                  | j                  | j                  | j                  | j                  g}|S | j                  r?| j                  j                         s%| j                  | j                  | j                  g}|S | j                  j                         r;| j                  | j                  | j                  | j                  | j                  g}|S | j                  j                         r0| j                  | j                  | j                  | j                  g}|S | j                  | j                  | j                  | j                  | j                  g}|S | j                   dk(  r| j                  j                         r0| j                  | j                  | j                  | j                  g}|S | j                  j                         r%| j                  | j                  | j                  g}|S | j                  | j                  | j                  | j                  g}|S | j                   dk(  r| j                  g}|S | j
                  r| j                  g}|S | j                  r| j                  j                         sl| j                  r%| j                  | j                  | j                  g}|S | j                  | j                  | j                  | j                  | j                  g}|S | j                  r4| j                  j                         s| j                  | j                  g}|S | j                  j                         r0| j                  | j                  | j                  | j                  g}|S | j                  j                         r%| j                  | j                  | j                  g}|S | j                  | j                  | j                  | j                  g}|S )Nr  r  r?   r!  r   )rh  r  PAGE_CHOOSE_CLASS_MEMBERSr  r  r"  r  r(  r   
get_activer#  r  r  PAGE_CHOOSE_DRIVER_FROM_DBr   r   )rj  r  s     r   r~  z)NewPrinterGUI._getPagesOrderForDialogMode  s   w&**..ET K !22))EH C *##++..~ w //99DDF((//115522	Ep a //1177775522Eb S ''99DDF++11..N E $$//1++333311..B u **,++3311..	r a ++33--11..b U &""--/3333OO11	P E **,33OO11B s 33--OO11	t i )''Ef _ ##..\ W //99DDF((115522EP C 1177775522ED 7 ''99DDF11..2 + $$//1333311..	(  **,3311..  33--11..	 r   c                    t        | j                         | j                  j                         }| j                  j                         }| j                  }|| j
                  k(  s|| j                  k(  r|dkD  s#|| j                  k(  s|| j                  k(  r|dk(  r| j                  ||      }|| j                  k(  r| j                  j                  sm	 | j                  j                         j                         \  }}|j                  |d      d   }| j!                  |      }| j"                  j%                  |       t)        | j                         |S #  t'                Y %xY wr   )rP   r   r   r  INSTALL_RESULT_DONEr  r  r  _handlePrinterInstallationStager  r   r  r   r   get_selectedr#   r  r   r  rG   rK   )rj  r  r  r7   r6   r.   r=   s          r   r|  z,NewPrinterGUI._handlePrinterInstallationMode(  s4   d##$%%669%%669 ))000222q888222	 997DIFd555;;>>)"&//"?"?"B".,/  E4 99T1-a0D..5DNN++T2 	t$$%	)%(s   A,E E%c                 2   | j                   dk7  rV| j                  j                  }|r>|j                  d      r-t	        |dd        j                         }| j                          || j                  k(  s|| j                  k(  r| j                         n.|| j                  k(  r| j                  dk(  r| j                          d }| j                  r| j                   dk(  rp| j                   dk7  r| j                  j                  }|s| j                  }|sd }| j                   -| j                   dk7  r| j#                  |       | j$                  S d| _        || j                  k(  s|| j                  k(  r| j'                          | j)                  |||      S )Nr  r   r   r   Fr!  )rh  r   r   rc   r   sanitize_uri_installSMBBackendIfNeededr  r  _selectDeviceForInstallationr  r,  _handleDriverInstallationr"  r  r  r  _loadPPDsForDevicer}  _installHPScannerFilesIfNeeded_installPrinterFromDeviceID)rj  r  r  r   r  s        r   r  z-NewPrinterGUI._handlePrinterInstallationStageK  sf   00++//Cs~~u-#ab'*77://2d---D<[<[1[--s3111d6J6Je6S**-##t'7'75'@#44

yy T%5%59J%J''4 666$d---D<[<[1[//2//FFr   c                 T   | j                   dk(  r| j                  s{| j                  dk(  s| j                  d   dk(  rYt        j                  dt        j
                        s4t        d       	 t        j                         }|j                  ddd       y y y y y #  t                Y y xY w)NF	localhostr   r  z/usr/lib/cups/backend/smbz$No smb backend so attempting install	smbclient)r,  r'  r  rI  accessF_OKrd   installpackage
PackageKitInstallPackageNamerG   rj  pks     r   r  z(NewPrinterGUI._installSMBBackendIfNeededm  s      E)$2P2P

k)TZZ]c-A999277C>?%#..1%%q![9 D .B 3Q)%!$s   -'B B'c                     | j                          | j                         | j                  _        | j                  r1| j                  j                          d | _        | j                          | j                  r1| j                  j                          d | _        | j                          | j                  j                  s(| j                  j                  dv r| j                          d | _        t        j                  d|      }|r|j                         }t!        |d         dkD  rt#        |d   dd        }nd}	 t%        d       t&        j(                  j+                  |d   |      }|j-                  dd|d	   z         |j/                         }|j0                  d
k(  r
|d	   | _        |j3                         }t5        j6                         5 }|j9                  |       |j;                          	 t=        j>                  |j@                        }		 d d d        	 t<        jH                  }
t=        jJ                  |d   ||
      }ddg}|jM                  ||      }|jO                  dd      }|jO                  dd      }t!        |      dkD  r| jP                  jS                  |       t!        |      dkD  r|| j                  _*        y y |jY                  d      s|jY                  d      rH|j[                  d      dk7  r3| j                  j\                  r| j                  j\                  | _        y y y y # t<        jB                  tD        f$ r tG        d      w xY w# 1 sw Y   NxY w#  Y VxY w# tD        $ r Y y  tW                Y y xY w)Nr  z"ipp://(\S+?)(:\d+|)/printers/(\S+)ra   r   iw  z$Download ppd file from remote serverGETz/printers/%s.ppdr   r^   zServer's ppd file is corrupted.)r  portr  zprinter-infozprinter-location)r   requested_attributesr   dnssd:mdns:/cupsr  )/r  getDeviceURIr   r   r  r}   r  r  r!  r  r  getNetworkPrinterMakeModelr"  rl   ro   groupsrY  intrd   rw  clientHTTPConnectionre   getresponserh   ri   tempfileNamedTemporaryFilewriteflushr  r  r=   r  r  IOErrorHTTP_ENCRYPT_IF_REQUESTEDr  getPrinterAttributesr#   r   r  locationrG   rc   findinfo)rj  r   resresgr  r  ru   
ppdcontenttmpfr!  r  crattrsr  r  s                   r   r  z*NewPrinterGUI._selectDeviceForInstallationz  s   %%(++. !!""**-%)D"!!$&&)"&D!!$KK 88 ++.  $ii>D::<DDG}q DGABK(AB{{11$q'4@U$6a$@A'');;#%+/7D(!YY[
003 ItJJz*JJLI"hhtyy1	I%!;;
OO$q'*.0:< $%78..CEF / Hyy."5 99&8"=:>))22D9>A%+3DKK( & ~~x(CNN7,C'"b(T[[-=-=#';;#3#3D  .>( -D7 !MM<8 I%&GHHII I(   %!$sJ   >BM- "M 4L8M- B.M5 8%MM  M*%M- -M25	N Nc                    | j                   }|j                         j                         \  }}d }||j                  |d      }|	|dk(  sd|vry | j	                  |      }|rt        | j                        dk(  ry d | _        | j                  dk7  rp| j                  j                  sY| j                  j                  r| j                  j                  dk(  r)| j                  r| j                  | j                  _        y y y y y Nra   r   re  r  Unknownr   r   r  	get_valuerE  rY  r&  r  rh  r   r  r   r*  )rj  r5   r6   r.   r?  r7   s         r   r  z'NewPrinterGUI._handleDriverInstallation  s    //,,/<<?t__dA.F>Vq[Jf,D **F3T889Q>
 	 11;;>>;;--1K1Ky1X22)-)M)MDKK& 3 2Y " 2r   c                 h   t        | j                  d      r| j                  j                  r~t        j                  dt        j
                        sYt        j                  dt        j
                        s4t        d       	 t        j                         }|j                  ddd       y y y y y #  Y y xY w)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  rI  r  R_OKrd   r  r  r  r  s     r   r  z,NewPrinterGUI._installHPScannerFilesIfNeeded  s    T[[.1dkk6N6NII8"''BII8"''B - .#..1%%q!_= C C 7O1s   'B- -B1c                     t        d       t        j                  ||| j                  | j                  | j
                        }|| _        |j                  d| j                         |j                          y )NznextNPTab: need PPDs loaded)	device_idr  r  r  r  finished)	rd   r%  
PPDsLoaderr   r  r  rB  r  run)rj  r  r   rU  s       r   r  z NewPrinterGUI._loadPPDsForDevice  s`    12!!U.1*.*?*?(,

.2.>.>	@
 			:d>>?	r   c                    d }g | _         	 | j                  dk(  rd}d}nv| j                  rQ| j                  	d}|| _        | j                  }| j	                  |      }| j
                  j                  |       d}n| j                  j                  s2| j                  j                  r| j                  j                  dk7  s|rq| j                  j                  r| j                  j                  }no|rt        j                  |      }nWi }t        j                  j                  | j                  j                        \  |d<   |d<   d	|d
<   g |d<   d|d   d|d   d}| j                  j                  |d   |d   |d
   |d   | j                  j                   | j                  j                        }t#        dt%        |      z         | j                  j'                  t)        |j+                               | j,                  ||      }	t#        dt%        |	      z         |	| _         |	d   }||   }n`| j                  dk(  r| j.                  r| j.                  j1                  d      }
|
s| j.                  j1                  d      }
|
r|
j2                  r|
j2                  }|j5                  d      r|d d }t        j                  j                  |      }|\  }}| j                  j7                  ||      }|j9                         D ]&  \  }}t;        |j=                  d            |k(  s$|} n |rd}n_d}|| _        d}nS| j                  dk(  rd}|| _        d}n8| j                  j?                  dddg | j                  j                         \  }}d}|r0| j                  r| j                  dk(  r| jC                  ||||      S | jD                  S #  tA                Y LxY w)Nr  downloadgenericrawexactr  ry  rz  r   DESCMDMFG:;MDL:;zSuitable PPDs found: %s)r  fitzPPDs in priority order: %sr   r!  NickName	ModelName (recommended)ippd-make-and-modelGenericPrinterzGeneric Printer)#id_matched_ppdnamesrh  r"  r!  r  r   r  r   r  r   r  r  parseDeviceIDr  r  getPPDNamesFromDeviceIDr   rd   r  orderPPDNamesByPreferencerY   r  r&  r  r  r  rk  getInfoFromModelitemsr[   r#   getPPDNameFromDeviceIDrG    _installPrinterOrSearchForDriverr  )rj  r  r  r  ppdnamerh   r=   r  r  ppdnamelistattrr  mfgmdlr  r6   r  r!  r  s                     r   r  z)NewPrinterGUI._installPrinterFromDeviceID  s   #% Y	!#44$"%% 88##G&DH++**D1''. ++..;;--;;--:;;>>"kk11G)77?G G'2'7'7**DKK,F,FG%WU^U^%'GEN%'GEN0707@E ii++WU^-4U^-4U^-4U^-1[[__-1[[-G-GI  5S	AB"ii--tCHHK/@/3/J/J5<# . G  84;LLM+6(%a.W""e+}}--j9==11+>DDJJ JJE~~'78 %ds(--??GF$*MT5  9955tUCD%)ZZ] "	T&(+-A(BD!" '*G!" $F#G&DH&F!!U*" $(II**I,5,=,.,0KKOO	= " # %%)9)9U)B88%&RY[_`` '''	! s   L!O -A)O O"c                 L   	 |dk7  rr| j                   j                  |      }t        |d         }t        j                   j	                  |      \  }}	|| _        |	| _        || _        | j                  ||	       |dk(  s|dk(  r*| j                  dk7  rd| _
        |dk(  r| j                  }nd| _
        | j                  dk7  r|| j                  dk(  rl|rit        |      dkD  rZ|j                  d	      dk\  sE|j                  d
      dk\  s0|j                  d      dk\  s|j                  d      dk\  s|j                  d      dk\  s|j                  d      dk\  s|j                  d      dk\  s|j                  d      dk\  st        d       t        d|z         d| _        d| _        t#        d      }
t%        j&                  | j(                  ddt$        j*                  j,                  t$        j.                  j0                  |
      | _        | j2                  j5                  t#        d             t7               | _        | j2                  j;                  d| j<                         | j2                  j?                          g | _         | j@                  jC                  | j8                  j;                  d| jD                               | j@                  jC                  | j8                  j;                  d| jF                               d| _$        | j8                  jK                  |       | jL                  S | j                  dk(  s*| j                  dk7  r+| jP                  s|| jR                  k7  r| jU                          | jV                  S #  tO                Y cxY w)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/  message_typer0  r   zSearching for driversr1  r  errorr  ),r  getInfoFromPPDNamer[   r  r  r  r  r  fillDriverListrh  r#  r  r'  rY  r  rd   _searchdialog_canceledr3  r   r3  r   r4  r5  r6  r7  r.  r8  r   rF  rB  _searchdialog_responser=  rG  r$   opreq_id_search_doneopreq_id_search_erroropreq_user_searchsearchPrintersr}  rG   r"  r  fillMakeListr  )rj  r  r  rh   r  r  ppddict
make_modelr  r6   rA  s              r   r  z.NewPrinterGUI._installPrinterOrSearchForDrivera  s)   D	!*$))66@'1E)FG
$$66
C u!%"'#* ##D%07"f&;  E)(,%19";;G(-%$$-22e;c%j1nN3q8N3q8M2a7M2a7M2a7M2a7G,1G,1  YZ ?% GH59D227D/K.C),):):#44",0%(__%9%9 # 6 6 *"D& &&<<124 "5!7DJ&&.."D$?$?A&&//2*,D'''..

**& 5578 ''..

**# 6689 .3D*JJ--u5  ::: %!!%66))g9R9R.R '''	! s   L=N N#c                 6   | j                   j                  d       | j                  j                  t	        d             g | _        d| _        d| _        d| _        t        | j                         t        j                  | j                  j                         y NTr  F)r   rY  r   r  r3  r&  r'  r(  r)  rK   r   r   idle_addrF  r!  rt  s      r   r   z$NewPrinterGUI._searchdialog_response  sv     	**88$?00991X;G&(#)-&(-%$)!t$$% 	tzz(()r   c                    | j                   D ]  }|j                  |        t        j                          	 d| _        d | _         d | _        | j                  j                          | j                  j                          d | _        t        |      dk  rNt        | j                         d| _        | j                  dk(  r| j                  d        n| j                          n|| _        || _        d| _        	 | j                  j%                          | j'                          | j)                         sNt        | j                         d| _        | j                  dk(  r| j                  d        nC| j                          n2| j                  dk(  r| j                  d       n| j                          t        j,                          y #  t+                | j                          Y 3xY w# t        j,                          w xY w)NFra   r  Tr   r  )rG  r"  r   threads_enterr  rF  r.  rS   r}   rY  rK   r   r(  rh  r$  r  r+  downloadable_driversr|  r  r  rG   threads_leave)rj  rF  r>   driversr#  s        r   r  z"NewPrinterGUI.opreq_id_search_done  s   ** 	'Gg&	' 	,	!%*D""&DDJ##&&&)!%D H~!t,,-05-##'88$$T*NN%-5*,3)04-&))..0%%'779t4458=5++/@@ ,,T2 NN-++/@@ NN1N5 NN-  &%(NN%  s   CG* :B:G	 	G'%G* *H c                 |    t        d|t        |      fz         | j                  |t               t	                      y Nz$OpenPrinting request failed (%d): %s)rd   r  r  rY   dictrj  rF  rh   errs       r   r  z#NewPrinterGUI.opreq_id_search_error  s9    :f>BCj>J J 	K!!5$&$&9r   c                    | j                   }|j                         j                         \  }}d }||j                  |d      }|	|dk(  sd|vry | j	                  |      rt        | j                        dk  ry d | _        | j                  dk7  rp| j                  j                  sY| j                  j                  r| j                  j                  dk(  r)| j                  r| j                  | j                  _        y y y y y r  r  )rj  r5   r6   r.   r?  s        r   &_installSelectedDriverFromOpenPrintingz4NewPrinterGUI._installSelectedDriverFromOpenPrinting  s    //,,/<<?t__dA.FNfkZv-E ((&1D//0A5 	00KKNN[[//++4488 * 5 # 1r   c                    | j                   j                         }| j                  dk(  r| j                  j	                          | j
                  j	                          | j                  j                          	 | j                         }t        |      }| j                  j                  |       y | j                  dk(  r@|| j                  k(  r| j                  s@t        d       | j
                  j	                          | j                  j                          y | j
                  j                          | j                  j	                          y || j                  k(  r5| j
                  j	                          | j                  j                          y | j
                  j                          | j                  j	                          || j                   k(  r| j                  j	                          | j
                  j                          d}| j"                  j%                         r@| j&                  }|j)                         }|r"|j+                         j-                  |d      rd}| j
                  j                  t/        | j0                  j%                         xr | j2                  j5                         d   d uxs | j6                  j9                         xs |             y | j                  j                          | j                  dk(  rz| j                  j	                          | j
                  j	                          | j                  j                          | j;                         }| j                  j                  |       y || j<                  k(  rTd}	 | j                         }t        |      }| j
                  j                  |       | j                  j	                          n| j                  j                          | j
                  j                          | j                  j	                          || j@                  k(  r)| j                  j                          | j                  d	k(  s| j                  d
k(  r{| j
                  j	                          | j                  j                          | j                  j                  tC        | jD                  | jF                  jI                                      | j                  dk(  r| j                  j	                          | j                  d
k(  r>| jJ                  s| jL                  r&| j                  s| j                  j	                          || j                   k(  rd}| j"                  j%                         r@| j&                  }|j)                         }|r"|j+                         j-                  |d      rd}| j
                  j                  t/        | j0                  j%                         xs | j6                  j9                         xs |             | j                  d
k(  r| j                  j	                          || jN                  k(  rO| jP                  jS                         jU                         \  }}| j
                  j                  t/        |             || jV                  k(  rk| j
                  j	                          | j                  j                          | j                  j                  t/        tY        | jZ                                     || j                  k(  r5| j                  d
k(  r&| jL                  r| j                  j	                          || j\                  k(  r,| j;                         }| j
                  j                  |       y y # t        $ r d}Y 5w xY w#  t?                Y &xY w)Nr   Fr!  zNo installable optionsra   Tr   r  r?   r  r  )/r   r  rh  r   rS   r   r   r|  r  r   AttributeErrorrY  r  r$  rd   r  r  r   r  r   get_active_iterr    r  r  r   r   
get_cursorr   get_filename_is_driver_license_acceptedr  rG   r  r@   r>   r   get_textr"  r#  r  r   r   r  r  r8   r   r  )	rj  nrr   validdownloadable_selectedrr  r.   acceptedr6   s	            r   r  zNewPrinterGUI.setNPButtons  s-     113x'NN!""$OO  "''*&, OO))51u$T__$//  89%%**-OO((+  %%**-OO((+t444!!&&($$&!!&&($$&T444##%!!&&((-%66AAD#HHH#336D 2 2 5 ? ?q I04-!!//,,779 D224Q7tC.++88:. .	1/ 0
 ##%00NN!""$OO  "779HOO))(3 (((E%''*&, ++E2NN"NN! +++NN!9,$$(::!!&&($$&--t~~/F/F/HIK7* ##&#55))//"&":":##&000$)!22==@DD//2H..1;;T1E,0)++D##..0 &##002&%-' ( #55##%000**88:GGIKE4++DJ7///""$OO  "OO))+D,<,<=>@...#55))##&***779H++H5 +k " x%!$s   9^; _ ;_
	_
_c                 :   | j                   j                         }|| j                  k(  r| j                  j	                         S | j
                  }|j                         j                         \  }}|s&|j                         \  }}|r|j                  |      }|d uS rB   )
r   r  r  r   r  r   r   r  r  r"   )rj  current_pager5   r6   r.   r-   rq  s          r   r  z)NewPrinterGUI._is_driver_license_accepted  s    >>OOQ422200;;>>//,,/<<?t#..0LD&~~t,4r   c                    |j                         }|}|j                  dd      }|j                  dd      }|j                  dd      }||k7  r|j                  |       | j                  dk(  r0| j                  j                  t        | j                  |             y | j                  j                  t        | j                  |             y )Nr  r   r  rb   r?   )	r  rr   r  rh  r   rY  r@   r>   r   )rj  rT   r   new_texts       r   on_entNPName_changedz"NewPrinterGUI.on_entNPName_changed  s     ##C,##C,##C,>OOH%y(OO))DMM846 ++DMM846r   c                     t        d        j                          g d} j                  }|dk(  r* fd}t        j                   j
                  |||       y  fd}t        j                   j
                  |||       y )NfetchDevices)r   r  
driverlessbjnpr   Fc                 *    j                  | |      S rB   )local_devices_replyrZ   r  current_urirj  s     r   r  z,NewPrinterGUI.fetchDevices.<locals>.<lambda>  s    !%!9!91a;F"H r   )exclude_schemesr  r  c                 *    j                  | |      S rB   )network_devices_replyr-  s     r   r  z,NewPrinterGUI.fetchDevices.<locals>.<lambda>  s    !%!;!;Q=H"J r   r  )rd   r~  error_getting_devicesr  r  r  )rj  r   r.  network_schemesr  r  s   ` `   r   r(  zNewPrinterGUI.fetchDevices  s    N#  O22eHM ""D$:$:4C2?2?A
JM ""D$:$:4C2?2?Ar   c                     t        dt        |      z         | j                          | j                  j	                          | j                  j                          d | _        y )NzError fetching devices: %s)rd   r  r  r  r  r}   )rj  r  r  s      r   r2  z#NewPrinterGUI.error_getting_devices  sL    04:=> --0&&)!%r   c                 n    | j                          | j                  d|       | j                  ||       y )NTr   r.  )r  r(  add_devices)rj  r  r7   r.  s       r   r,  z!NewPrinterGUI.local_devices_reply  s5      	4[A 	&+.r   c                      j                   j                           j                   j                          d  _         d}i }|j                         D ]  \  }}|j	                  d      s|||<   d}  |j                         D ]  }||=   j                  ||       t        |      dkD  r;t        j                  |      } j                          |j                   fd        j                           j                          y )NTzdnssd://Fno_morer   c                 (    j                  |       S rB   )dnssd_resolve_reply)devicesr.  rj  s    r   r  z5NewPrinterGUI.network_devices_reply.<locals>.<lambda>  s    "&":":K<C#E r   r  )r  r  r}   r  rc   r  r7  rY  dnssdresolveDNSSDHostNamesResolverr~  resolver  check_firewall)	rj  r  r7   r.  r:  need_resolvingr   r   resolvers	   `  `     r   r1  z#NewPrinterGUI.network_devices_reply  s   --0&&)!% !<<? 	 KC~~z*&,s#	 
 "&&) 	Cs	 	&+w?!##::NKH!!$ -E F 	 r   c                 l    | j                  ||d       | j                          | j                          y )NTr9  )r7  r  rB  )rj  r.  r=  s      r   r<  z!NewPrinterGUI.dnssd_resolve_reply  s/    ';= r   c                 v   t         j                  j                         }d|d<   d|d<   dddd|z   g}t        |d	z   t	        |      z          	 t        j                  ||d
t
        j                  t
        j                  t
        j                        }|j                         \  }}d}|j                         j                  d      D ]U  }|j                  d      dk(  rt        j                  d|      }	|	r|	j                         }
	 t!        |
d         }|dk\  sU n |dk  ry |dk(  ryy#  Y y xY w#  d}Y #xY w)NrG  rH  r   DISPLAYzhp-infoz-xz-i-dr`   T)rI  rJ  rK  rL  rV  r  
zfax-typez(\d+)r   r   zMFG:HP;MDL:Fax 2;DES:HP Fax 2;zMFG:HP;MDL:Fax;DES:HP Fax;)rI  rO  rP  rd   r  rQ  rR  rS  rT  communicaterj   r  r  rl   ro   r  r  )rj  faxurira  r  rU  rL  rV  faxtyperb  r  r  s              r   get_hpfax_device_idz!NewPrinterGUI.get_hpfax_device_id  s8   jjoo' #H!#I4tf}5FTMDJ./	  $K4(2(:(:)3)3:A  !}}/VV
 MM$**D1 	Dyy*%+))Xt,Czz|!!$q'lG !|	 a<\3/-	! Gs   AD+ D2+D/2D8c                    dddd|g}t        |dz   t        |      z          	 t        j                  |dt        j                  t        j
                  t        j
                        }|j                         \  }}|j                  dk7  ry 	 |j                         j                         }|j                  d	d
      }t        |      dk  ry |d
   }|dk(  ry |S #  Y y xY w)Nzhp-queryz-kz	scan-typerH  r`   TrJ  rK  rL  rV  r   =ra   r   0)rd   r  rQ  rR  rS  rT  rJ  r`  rj   rq   r  rY  )	rj  r   r  rU  rL  rV  	scan_typefieldsr  s	            r   get_hplip_scan_type_for_uriz)NewPrinterGUI.get_hplip_scan_type_for_uri&  s    D+tS9C$Jd+,
	  $$(2(:(:)3)3:A  !}}/VV||q  ! MM$**-	#q)<!q	C<	s   A&C Cc                    |dk(  rd}n
|dk(  rd}nd}d||g}t        |dz   t        |      z          d }	 t        j                  |dt        j                  t        j
                  t        j
                        }|j                         \  }}|j                  d	k7  ry 	 |j                         j                         }|S #  Y y xY w)
Nprintz-cfaxz-fz
hp-makeurir`   TrO  r   )
rd   r  rQ  rR  rS  rT  rJ  r`  rj   rq   )	rj  r  modemodr  r   rU  rL  rV  s	            r   !get_hplip_uri_for_network_printerz/NewPrinterGUI.get_hplip_uri_for_network_printer@  s    7?$CU]$Ccc4(D4K$t*,-
	  $$(2(:(:)3)3:A  !}}/VV||q  ! mm$$'
	s   A&B= =Cc           	         d}|| j                   }||j                  j                  d      }|dk7  r|dz  }|j                  |d j                  d      }|dk(  r|j                  |d j                  d      }|dk(  r|j                  |d j                  d      }|dk(  rt        |j                        }|j                  |||z    }|rd|g}t	        |d	z   t        |      z          d}	 t        j                  |d
t        j                  t        j                  t        j                        }|j                         \  }}	|j                  dk7  rd}|/	 |j                  d      j                         }
t        j                   |
      }t        |      }|dk  r|j#                  g d       |dd }d}n|dkD  r|dd }d}|dk(  r
|\  }}}}}}n|dk(  r	|\  }}}}}n|dk(  r|\  }}}}|dk(  rBt	        d       t$        j&                  j)                        \  }}d|d|d|d|d	|_        nt	        dz         ||_        t%        j,                  |j*                        |_        |_        |_        |dk(  r|_        ||fS #  Y ;xY w# t        $ r% |j                  dd      j                         }
Y Hw xY w)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  r   r  r  ?z/usr/lib/cups/backend/snmpr`   TrO  r   r_   z
iso-8859-1ignore)encodingerrorsr   )r   r   r   r   r   r   zNo Device ID from snmp backendr  r  z;DES:rb   r  zGot Device ID: %s)r   r   r  rY  rd   r  rQ  rR  rS  rT  rJ  r`  rj   rq   UnicodeDecodeErrorprobe_printerwordsepr  r  r  r  r  r  r  r   r  r  )rj  r  r   r   rn  rv   r  rL  rU  rV  rb  wordsndevice_classr   r  r  device_locationmkmds                       r   r  z(NewPrinterGUI.getNetworkPrinterMakeModelV  s    >[[F<

'ABwQJJqrN''-7

12 3 3S 9A7

12 3 3S 9A7VZZ 0Azz!AaC(0$7Dtd4j01F
$$dd,6,>,>-7__-7__> $%==#3 <<1$!F
 ![!=='288;D
 &--t4Kq5LL-0!"1IEAU!"1IEA69>7\39o!V(-&\39!V@E=\36  @A*//))>: R>@">@"!FFI  3i ?@ )FI!,!:!:FII!F(6%"6&5FOc{a
 * [ "==<=QWWZD[s   ,A(J
 J 
J*K ?K c                    d| _         t        j                  t        t        j
                  t              }t        j                  di dt        d      i}t        |      }|g| _        |j                  d |j                         |dg      }|j                  d t        d      d dg      }dt        d	      d
}t        j                  di |}|j                  ||d   t        |      dg      }	|j                  ||	g d       dt        d      d
}
t        j                  di |
}|j                  ||
d   t        |      dg      }|j                  |	|g d       || _        |	| _        || _        d| _        | j&                  j)                  |       | j*                  j-                  d       | j.                  j1                          | j&                  j3                  d      }| j&                  j5                  t        j6                         |d       || _        d | _        t=        d       | j?                          y )Nr  r   device-infoz	Enter URIFr+   zNetwork Printerr   zFind Network Printer)device-classrk  )r   NTWindows Printer via SAMBAr   zFetching devices)r   r   )r   ) rg  r   rV  r5  r   rW  r  r  r  r3  r   r=  r$   get_infoinsert_afterdevices_uri_iterdevices_find_nw_iterdevices_network_iterdevices_network_fetchedr   r6  r   r  r   rS   
get_columnrD   TreePathr.  firewallrd   start_fetching_devices)rj  r.  r6   other	physotheruri_iternetwork_iternetwork_dictr   find_nw_itersmbdev_dictsmbdevfind_smb_iterrq  s                 r   r  zNewPrinterGUI.fillDeviceTab  s1   !s&44#% ""I-;)HI"E*	!{<<I,>,>,A,5u,>< ?||T2C0D040507| 8 *3()*@(AD$$@<@||\*6}*E*8'*BE*K $ L 	L,<LM(1'()D'EH##:k:l*5m*D*8&*A5*J % K 	L-=MN ($0!$0!',$""E*""B'!!$!!,,a0##S\\^VUC&&'##&r   c           
         | j                   }d}	 |j                         }|j                         }|xr |}t        dz   }|s3|dt	        d      z   dz   z  }|j                  t        j                         |s3|dt	        d      z   dz   z  }|j                  t        j                         |st        d|z         t        j                  | j                  ddt        j                  j                  t        j                  j                   t	        d      	      }|j#                  |       |j%                  t	        d
      t        j&                  j(                  t	        d      t        j&                  j*                         |j-                  d| j.                         |j1                          |rt        d       y y # t2        j4                  t6        f$ r t9                Y 4w xY w)NT

- z%Allow all incoming IPP Browse packetsrI  zAllow all incoming mDNS trafficz,Asking for permission to adjust firewall:
%sAdjust Firewallr  Do It Laterr1  z"Firewall all OK, no changes needed)rx  check_ipp_client_allowedcheck_mdns_allowedTEXT_adjust_firewallr3  add_servicefirewallsettingsIPP_CLIENT_SERVICEMDNS_SERVICErd   r   r3  r   r4  QUESTIONr6  NONEformat_secondary_markupadd_buttonsResponseTypeNOYESrB  adjust_firewall_responser|  dbusDBusExceptionrk   rG   )rj  datafallowedipp_allowedmdns_allowedsecondary_textru  s           r   on_firewall_readzNewPrinterGUI.on_firewall_read  s   MM	!447K//2L"3|G1F:N4#$%L#M$N#'$( ) /BBC4#$%F#G$HJN$O P/<<=K*+ ,**43H3H26D9<9Q9Q47OO4H4H234E2F	H
 ..?""Am$4c6F6F6I6I$%&7$8#:J:J:N:NP
D,I,IJ <=  ""I. 	! 	!s   FF9 9#GGc                    |j                          |t        j                  j                  k(  r_| j                  j                         }|s)| j                  j                  t        j                         | j                  j                          t        d       t        j                         | _        | j                  j                  t        d             | j!                  d       y )Nz7Fetching network devices after firewall dialog responser  Tro  )r}   r   r  r  rx  check_ipp_server_allowedr  r  IPP_SERVER_SERVICEr  rd   r  r  r  r  r3  r(  )rj  ru  r1  ipp_server_alloweds       r   r  z&NewPrinterGUI.adjust_firewall_response  s    s''+++!%!G!G!J%))+;+N+NOMM"MN!*!5!5!8//3I1JK4(r   c                     t        j                         | _        | j                  j                  t	        d             | j                  d| j                         | `y )Nr  Fr6  )r  r  r  r  r3  r(  r.  rw  s    r   ry  z$NewPrinterGUI.start_fetching_devices	  sL    !*!5!5!8//3I1JK5d6F6FGr   c           
      p   |ro||v r|j                  |      }nY|j                  dd      |v r$|j                  dd      }|j                  |      }n!|rt        j                  |      }d|_        nd }t        |j                               }|D ]3  }|j                  dk(  s|j                  j                  dd      |_        5 d }t        t        ||            }t        t        |      dz
        D ]  }t        |dz   t        |            D ]  }||   }	||   }
|	j                  dk(  s|
j                  dk(  r,|	j                  |
j                  k(  sF|	j                  sd|	_        Z|
j                  sd|
_        nt        |	j                        t        |
j                        k  rd|	_        d|
_          |D cg c]  }|j                  dvs| }}g }|D ]  }t        d	|j                  z         t        |d
      rt        d|j                  z         t        |d      rt        d|j                   z         t#        |      }t        dt%        |      z         	 | j&                  j)                  |      }t        d|z         | j&                  |   j+                  |       t        dt%        |      |t%        | j&                  |         fz         t        d        | j&                  j1                          |rUt#              }	 | j&                  j)                  |      }| j&                  |   j+                  |       | j&                  |   }nd }| j2                  j5                         }| j6                  }| j8                  }|D ]  }d }	 | j&                  j)                  |      }| j&                  |   }|j;                         }|d   j<                  dk(  }|j?                         }||k(  r|tA        d      z  }||dg}|rz|d   j                  |d   j                  k7  rG|jC                  |||      }||k(  r|jE                  |      }| j2                  jG                  |d       n|j/                  ||      }n|jE                  |      }|jI                         }|jE                  |      |k7  r>|jK                  |d      }||kD  rn&|jM                  |      }|jE                  |      |k7  r>|jC                  d ||      }||k(  s|jE                  |      }| j2                  jO                  |d       | j2                  jQ                  d      }| j2                  jS                  ||d        d}|rm| jT                  j5                         }|jI                         }d}|r>|jK                  |d      }||j                  k(  r|}y |jM                  |      }|dz  }|r=y y | jV                  s| j2                  jQ                  d      }| j2                  jS                  tY        jZ                         |d       | jT                  jQ                  d      }| jT                  jS                  ||d       y y c c}w # t,        $ rG | j&                  j/                  |       |j/                  |       t        dt%        |      z         Y w xY w# t,        $ r0 | j&                  j/                  |       |j/                  |       Y w xY w# t,        $ r t        dt%        |      z         Y w xY w)Nz:9100r   zCurrent devicer   c                 b    | j                   dk(  r	d| _         | S | j                   dk(  rd| _         | S )Nzhp:/no_device_foundr   zhpfax:/no_device_foundr   r  r   s    r   replace_genericz2NewPrinterGUI.add_devices.<locals>.replace_generic!	  s8    zz22!
 M 77$
Mr   ra   delete)	r   r   r   r   r   r   rw  r*  r  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   r   
 (Current)Frl        ?)	row_align).poprr   r  r  r  rY   r;   r  r   maprangerY  r  rd   r  r  r  r   r  r=  r  
add_devicerm  r$   r4   r   r    rt  rs  get_devicesrf  rp  r3  insert_beforer!   
expand_rowr2   r  r3   scroll_to_cellrv  rD   r   rg  r   rw  )rj  r=  r.  r:  currentr   r  ijdevice1device2rZ   
newdevicesphysicaldevicecurrent_devicer6   r}  r  	newdevicedevsr   r  r+   r.   network_pathphysdevdevice_select_pathrq  connection_select_pathdevs                                 r   r7  zNewPrinterGUI.add_devices	  s   g%!++k2$$gr2g=)117B?!++k2%,,k:/"w~~'( 	>F{{h&#ZZ//"=
	>	 sOW56 W)* 	/AAE3=1 /!!*!!*;;(*gkkX.E;;'++-#JJ&.%jj&.wzz*S'**-==&.&./	/  & B 7A *A1 B B 
 	gF2VZZ?@+1FNNBC,3fooEF+V4N7$~:NNO
gLL&&7G!KLQ**F3Y!.11d4<<?6KLM N01	g( 	+W5N3LL&&7Q**G4!%a
 "N  **-0000# 0	PIFLL&&	2a
 %%(D1g**i7G??%D','vu%C7;;$q',,. ..l47 / 9D /',~~|'D((33\5I !<<3<?D  %~~|<++.nnd+|;#ootQ7G' ??D1D nnd+|; **D$C*@'%*^^T%:"  //1C;> 0 @))44a8  ++-?Oa0	Pd "#''114E''*DAootQ/#'')-.*-Q  %%%%00!4F''G ((33Q7F**,BFER &SB(  g##^4!!>2NQUVdQeefg  3##^4!!>23  n	?+ ,sE   =Y=Y="BZA[ *\A[[5\\ \54\5c                    t         ryt        d       	 t        j                         }|j	                  ddd       	 dd lada t        d	       y# t
        $ r/}t        d       t        dj                  |             Y d }~yd }~ww xY w# t        $ r/}t        d       t        dj                  |             Y d }~yd }~ww xY w)
NTz3No SMB client library present so attempting installr   zpython3-smbcz.Error during installation/setup of SMB client.z{}FzSMB client setup failed.z-SMB client successfully installed and set up.)	rZ  rd   r  r  r  r  formatpysmbModuleNotFoundError)rj  r  rv   s      r   install_python3_smbc_if_neededz,NewPrinterGUI.install_python3_smbc_if_needed	  s     IJ	**-B!!1a8	 O 	CD  	HIt{{1~&	 # 	23t{{1~&	s.   'A B	 	B%BB		C%B<<Cc                 d   | j                   }|j                          t        | j                          G d d      } |       }t        j
                  j                  |_        t        d      |_	        d|_
        |j                  d|g       t        j                         r)t        j                          t        j                         r)d}t               rd}t	        j                   | j                        }t        j
                  j#                  ||j$                        }d}	 |j'                         dkD  r4	 |j)                  d	      j+                         }|j'                         dkD  r4|j                          |rl|D ]g  }
|
j                  t        j
                  j>                  t        j
                  j@                  fv sD|j                  d|
g      }|j                  |      }i tC        | jD                  jG                               }|jI                         \  }}}}}tK        |      dkD  r G d d      } |       }t        j
                  j@                  |_        ||_	        d|_
        |j                  d|g      }|j                  |      }|jM                  |      }| jN                  jQ                  |d       tS        | j                         |jU                         E| j                  jW                          tY        t        d      t        d      | jZ                         yy# t,        $ r}|j/                  |       Y d}~d}~ww xY w# t0        $ rF}|j2                  \  }}	|t4        j6                  k7  rt9        d
t;        ||	f      z         Y d}~2d}~w t=                Y DxY w)zInitialise the SMB tree store.c                       e Zd Zy))NewPrinterGUI.browse_smb_hosts.<locals>.XN__name__
__module____qualname__r|   r   r   Xr  	  s    r   r  zScanning...r   Nr   
   debugauth_fnsmb://Runtime error: %sr  c                       e Zd Zy)1NewPrinterGUI.browse_smb_hosts.<locals>.FakeEntryNr  r|   r   r   	FakeEntryr  	  s    r   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  ).rX  r8  rP   r   r  smbcPRINTER_SHARE	smbc_typer3  r=   commentr$   r   rE   rF   get_debuggingAuthContextContextcallbackperform_authenticationopendirgetdentsrk   failedr  r  errnoENOENTrd   r  rG   	WORKGROUPSERVERr   r   r  separaterY  r!   r   r  rK   r2   rS   show_info_dialogr   )rj  rl  r  dummyr  	smbc_authctxentriesrv   rn  entryr.   r  specified_urirp   r  shareuserpasswordr  toplevelr-   s                         r   browse_smb_hostszNewPrinterGUI.browse_smb_hosts	  s   T!!"	 	**22}%
TE7#  #!   # E%%t';';<	jj  *3*<*< ! >	!2259)!kk84==@G 2259 	  ,??uzz';';',zz'8'8': : <<w7Dd+A	, DNN$;$;$>?/</E/E/H,eT8:>  |H!&!2!2H HM!H<<z2Dd#A >>4(D(($2d""#"*  %%(a 12 !1 2 &*%:%:< +K ! )$$a(() 	AVVFQELL /$A-?@	! sB   $M 8L+ M +	M4MM MM 	N/;NN/c                 p    | j                   j                  |      }| j                   j                  |       S )z9Don't allow this path to be selected unless it is a leaf.)rX  r"   iter_has_child)rj  r(   r6   r-   path_selectedr  r.   s          r   r_  z!NewPrinterGUI.smb_select_function
  s.    ~~&&->>00$777r   c                 l    |j                  |d      }d}||j                  }|j                  d|       y Nr   r   r   )r  r=   set_property)rj  rq  rm  r6   r.   r  r  r  s           r   r]  z#NewPrinterGUI.smbbrowser_cell_share
  s6    q)JJE65)r   c                 l    |j                  |d      }d}||j                  }|j                  d|       y r  )r  r  r  )rj  rq  rm  r6   r.   r  r  r  s           r   r^  z%NewPrinterGUI.smbbrowser_cell_comment!
  s6    q)mmG67+r   c                 V   | j                   }|j                  |      }|j                  |d      }|rB|j                  t        j
                  j                  k(  r| j                  j                          y|j                  |      r|j                  |       y| j                  |||       y)z*Handle double-clicks in the SMB tree view.r   N)rX  r"   r  r  r  r  r  r   r  row_expandedcollapse_rowon_tvSMBBrowser_row_expanded)rj  viewr-   rq  rl  r.   r  s          r   on_tvSMBBrowser_row_activatedz+NewPrinterGUI.on_tvSMBBrowser_row_activated(
  s    ~~t$q)U__

(@(@@''*d#t$--tT4@r   c                 R
   |j                         }|j                  |d      }|y|j                  t        j                  j
                  k(  r	 | j                  ry	 t        | j                         d|j                  z  }d}t               rd}t        j                  | j                        }t        j                  j                  ||j                        }	g }
	 |j                         dkD  r4	 |	j                  |      j!                         }
|j                         dkD  r4|j5                  |      r5|j7                  |d      }|j9                  |       |j5                  |      r5|
D ]  }|j                  t        j                  j:                  t        j                  j<                  fv r|j?                  ||g      }|j                  t        j                  j:                  k(  s~|j?                        } |jA                  |d       | `tC        | j                         y|j                  t        j                  j:                  k(  r	 | j                  ry	 t        | j                         d|j                  z  }d}t               rd}t        j                  | j                        }t        j                  j                  ||j                        }	g }	 |j                         dkD  r4	 |	j                  |      j!                         }|j                         dkD  r4|j5                  |      r5|j7                  |d      }|j9                  |       |j5                  |      r5|D ]Q  }|j                  t        j                  j<                  k(  s+|j?                  ||g      }t/        t1        |             S |jA                  |d       | `tC        | j                         yy#  d| _        Y xY w# t"        $ r}|j%                  |       Y d}~
d}~ww xY w# t&        $ rF}|j(                  \  }}|t*        j,                  k7  rt/        dt1        ||f      z         Y d}~Hd}~w t3                Y ZxY w#  d| _        Y /xY w# t"        $ r}|j%                  |       Y d}~d}~ww xY w# t&        $ rY}|j(                  \  }}|t*        jD                  k7  r,|t*        jF                  k7  rt/        dt1        ||f      z         Y d}~d}~w t3                Y xY w)z1Handler for expanding a row in the SMB tree view.r   Nra   z	smb://%s/r  r  r  )$r    r  r  r  r  r  expanding_rowrP   r   r=   r  r  r  r  r  r  r  rk   r  r  r  r  r  rd   r  rG   r  iter_nth_childr%   r  r  r$   r  rK   EACCESEPERM)rj  r  r.   r-   r6   r  r   r  r  r  r  rv   rn  r  re  sharesr  s                    r   r  z*NewPrinterGUI.on_tvSMBBrowser_row_expanded7
  s_   !q)=??ejj222
'%% &
 $&&'

*CE))4+?+?@I**$$E.7.@.@ % BCG$669A=-"%++s"3"<"<"?  669A= &&-(($2a  &&- ! )??uzz'8'8',zz'?'?'A AdUG4A??ejj&7&77a(A) OOT1%"4''(__

 1 11'%% &
 $&&'

*CE))4+?+?@I**$$E.7.@.@ % BCF$669A=-!$c!2!;!;!>  669A= &&-(($2a  &&-   .??ejj&>&>>dUG4Ae-.
 OOT1%"4''(S 2Q'%&" % -!((!,,- EA$ 3dQFm CD$!#,'%&" % -!((!,,- EA$ekk)9 3dQFm CD$!#s   O* P! 0O9 P! R  R7 0R R7 *	O69	PPP! PP! !	Q=*;Q++Q= 	R	R4R/)R7 /R44R7 7	T& ATT&c                     | j                   j                  |       t        r|s(| j                   j                  t	        d      dz         y y )Nz#Verification requires the %s modulepysmbc)r   rY  rZ  r[  r3  )rj  ons     r   set_btnSMBVerify_sensitivityz*NewPrinterGUI.set_btnSMBVerify_sensitivity
  sJ    '',b.. 3> 1?AI1J K ')r   c                    t         j                  t         j                  z   dz   }| j                  ||       |j	                         }t        |      j                         \  }}}}}|r| j                  j                  |       |r| j                  j                  |       |s|rIt        |||      j                         }|j                  |       | j                  j                  d       n8| j                  j	                         dk(  r| j                  j                  d       | j                  t        |             | j!                          y )Nz	_-./:%[]@r  rp   r  r  Tr   )stringascii_lettersdigitsentry_changedr  r   r  r   r  r   get_urir   r  r   r  r  r  )	rj  entallowed_charsr   rp   r  r  r  r  s	            r   on_entSMBURI_changedz"NewPrinterGUI.on_entSMBURI_changed
  s   ,,V]]:;F3.llo/53/?/H/H/K,eT8(($/(((38D>FFICLL**40  )),2""--d3))495r   c                 $   | j                   j                         }|y |j                         \  }}d}|r;|j                  |d      }|r'|j                  t
        j                  j                  k(  }| j                  j                  |d uxr |       y )NFr   )
r   r   r  r  r  r  r  r  r   rY  )rj  rT   r(   rl  r.   is_sharer  s          r   on_tvSMBBrowser_cursor_changedz,NewPrinterGUI.on_tvSMBBrowser_cursor_changed
  s    %%335	,,.tOOT1-E ??ejj.F.FF))$d*:*GxHr   c           
      *   	 | j                         sy| j                  j                  d       	 t        j                         }|j
                  st        j                         }|j                         }t        dz   }|sBt        j                  | j                  ddt        j                  j                  t        j                  j                  t!        d            }|dt!        d      z   z  }|j#                  |       |j%                  t!        d	      t        j&                  j(                  t!        d      t        j&                  j*                         |j-                         }|j/                          |t        j&                  j*                  k(  r/|j1                  t        j2                         |j5                          | j>                  jA                          | jC                          y# t6        j8                  t:        f$ r t=                Y Pw xY w)
<Check whether the needed SMB client library is available andNFr  Tr  r  r  z*Allow all incoming SMB/CIFS browse packetsr  )"r  r   rY  r  	FirewallDrunningSystemConfigFirewallcheck_samba_client_allowedr  r   r3  r   r4  r  r6  r  r3  r  r  r  r  r  r  r}   r  SAMBA_CLIENT_SERVICEr  r  r  rk   rG   r   r|  r  )rj  r  r  r  r  ru  r1  s          r   on_btnSMBBrowse_clickedz%NewPrinterGUI.on_btnSMBBrowse_clicked
  s   "224))%0	! !**-A99$99<225G1F:N**43H3H26D9<9Q9Q47OO4H4H123D1E	G
 4#$ &6 $7$7 8 ..?""Am$4c6F6F6I6I$%&7$8#:J:J:N:NP!::=!s//333MM#3#H#HIGGJ 	!!#	 ""I. 	! 	!s   FG, ,#HHc                    | j                   j                         j                         \  }}d}|r;|j                  |d      }|r'|j                  t
        j                  j                  k(  }|r|s| j                  j                          y |j                  |      }|j                  |      }|j                  |d      }|j                  |d      }	|r|j                  |d      j                  }
nd}
t        |
|	j                  |j                        j                         }| j                  j                  d       | j                   j                  d       | j"                  j                  |       | j                  j                          y )NFr   r   r  )r   r   r  r  r  r  r  r  r   rS   iter_parentr=   r   r  r   r  r   r   )rj  r  rl  r.   r  r  parent_iterdomain_iterr  r  rp   r   s               r   on_btnSMBBrowseOk_clickedz'NewPrinterGUI.on_btnSMBBrowseOk_clicked
  s@   ''557DDFtOOT1-E ??ejj.F.FF8  %%'''.''5q)Q/OO[!499EEE99!JJ((/
 	 	$$b)$$b)%!!#r   c                 8    | j                   j                          y rB   )r   rS   )rj  rT   r  s      r   on_btnSMBBrowseCancel_clickedz+NewPrinterGUI.on_btnSMBBrowseCancel_clicked  s    !!#r   c                 $    | j                          y rB   )r  r  s     r   on_btnSMBBrowseRefresh_clickedz,NewPrinterGUI.on_btnSMBBrowseRefresh_clicked	  s    r   c                 V    | j                   j                  |j                                y rB   )r   rY  r  r'  s     r   on_rbtnSMBAuthSet_toggledz'NewPrinterGUI.on_rbtnSMBAuthSet_toggled  s    %%f&7&7&9:r   c                    	 | j                         sy| j                  j                         }t        |      j	                         \  }}}}ddd}| j
                  j                         }|r4| j                  j                         | j                  j                         d}	d}
t        | j                         	 d}t               rd}|rZfd}t        j                  j                  ||      }	 d	|_        |j#                  d
|d|t$        j&                  d      }d	}	nt        j(                  | j                        }t        j                  j                  ||j*                        }|j-                         dkD  r>	 |j#                  d
|d|t$        j&                  d      }d	}	|j-                         dkD  r>|	sd	}
t=        | j                         |	r+t?        tA        d      tA        d      | j                         y|
s1tA        d      }|r|}tC        tA        d      || j                         yy# t         $ r Y Ow xY w# t.        $ r}|j1                  |       Y d}~d}~ww xY w# t2        $ r4}|j4                  \  }}t7        dt9        ||f      z         |}Y d}~d}~w t;                Y xY w)r  Nr  r   Fr   r  c                     fS rB   r|   )svrshrwgunpwrp   passwdr  s        r   do_authz6NewPrinterGUI.on_btnSMBVerify_clicked.<locals>.do_auth)  s    !400r   r  Tr  r  i  )	workgroupr  r7  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   r  r   r  r   r  r   r   rP   r   r  r  r  r  optionUseKerberosr  openrI  O_RDWRr  r  r  rk   r  r  r  rd   r  rG   rK   r  r3  show_error_dialog)rj  r  r   r  r  urU  reasonauth_set
accessiblecanceledr  r8  r  r  r  rv   rn  r   rp   r7  r  s                      @@@r   on_btnSMBVerify_clickedz%NewPrinterGUI.on_btnSMBVerify_clicked  s   "224nn%%(%+%5%>%>%A"eQ&&113&&//2D((114F
d##$*	 E1jj((w(G,0C)
 HHtU; ii0!
 "--t/D/D9>486<>	 jj((2;2D2D ) F669A=-HHtU&C&(ii8%)
	  669A= "#H 	t$$%a 67 AB%)%:%:< :;Dq!;<d&*&;&;=	 O & ( % -!((!,,-
  	VVFQ3dQFmCDF	 sm    8I: 9I  BI: )I 5I: 	I: 	II: II: 	I7I2-I: 2I77I: :	K*J22Kc                     |j                         }|}|D ]0  }||vs|j                  |d      }t        dt        |      z         2 ||k7  r|j	                  |       yy)zARemove all chars from entry's text that are not in allowed_chars.r   zremoved disallowed character %sN)r  rr   rd   r  r  )rj  r  r  origtextr%  chars         r   r  zNewPrinterGUI.entry_changed\  sk    >># 	MD=(#++D"5=dKL	M XNN8$ r   c                     t         j                  t         j                  z   dz   }| j                  ||       | j	                          y )Nz_-./:%[]()@?=&+r  r  r  r  r  rj  r  r  s      r   on_entNPTDevice_changedz%NewPrinterGUI.on_entNPTDevice_changedg  s8    ,,V]]:;LL3.r   c                     t         j                  t         j                  z   dz   }| j                  ||       | j	                          y )N_-.:%[]rH  rI  s      r   "on_entNPTJetDirectHostname_changedz0NewPrinterGUI.on_entNPTJetDirectHostname_changedl  s7    ,,V]]:9D3.r   c                 d    | j                  |t        j                         | j                          y rB   )r  r  r  r  rj  r  s     r   on_entNPTJetDirectPort_changedz,NewPrinterGUI.on_entNPTJetDirectPort_changedq  s"    3.r   c                     |j                         }|j                  |      \  }}}}|j                         }|j                  |||||       y rB   )
get_parentquery_child_packingget_expandedset_child_packing)rj  rT   UNUSEDr  expandfillpadding	pack_types           r   rT  z)NewPrinterGUI.on_expNPDeviceURIs_expandedu  sU     ""%%996B		)$$'  &&$")9	6r   c                 &    |j                  |d      S )Nr   )r  )rj  r6   r.   r  s       r   rQ  z%NewPrinterGUI.device_row_separator_fn  s    a((r   c                 n    |j                  |      r|j                  |       y |j                  |d       y r  )r  r  r  )rj  r  r-   rq  s       r   rR  z"NewPrinterGUI.device_row_activated  s,    d#t$OOT5)r   c                 0   | j                   }|j                         }|sy |j                  | j                        }|j	                  |      sy | j
                  y | j                  dkD  rt        d       y | j                  D ]N  }|j                         D ]9  }|j                  dk(  s|j                  |j                  k7  s-t        d         y  P 	 | j                  dk(  s| j                  d   dk(  rzt        j                         | _        | j
                  j                   st        j"                         | _        t        d       | j
                  j%                  | j&                         y y # t(        j*                  t,        f$ r t/                Y y w xY w)	Nr   z3Skipping firewall adjustment: discovery in progressr   z4Skipping firewall adjustment: network printers foundr  r  zExamining firewallr>  )r   r    r!   rt  r  rx  rE  rd   r=  r  rf  r   r  r  r  r  r   r!  ri   r  r  r  rk   rG   )rj  r  r6   r  r  r   s         r   rB  zNewPrinterGUI.check_firewall  sc   !~~t'@'@A  ,/==$! 0 1 || 	G!--0 ''94JJ&++- !9 :	
	!

k)

1$ 0 : : =}},,$4$I$I$LDM01""$2G2G"H % ""I. 	! 	!s   BE/ /#FFc                     |j                         }|r|sy |j                  | j                        }||k(  r| j                          y y rB   )r    r!   rt  rB  )rj  r  r.   r-   r6   r  s         r   rS  z!NewPrinterGUI.device_row_expanded  sC    !D~~t'@'@A<"  r   c                     | j                   j                         }|j                  |      }|j                  |d      y| j	                  | j                   |d       y)z
        Allow this path to be selected as long as there
        is a device associated with it.  Otherwise, expand or collapse it.
        ra   NTF)r   r    r"   r  rR  )rj  r(   r6   r-   rV  r.   s         r   rO  z$NewPrinterGUI.device_select_function  sU    
   **-~~t$??D!$0!!4#3#3T4@r   c                    g | _         d| _        d| _        d| _        g | _        | xj
                  dz  c_        |j                         \  }}|y |j                         }|j                  |      }|j                  |d      }|y d}|j                         D ]  }|j                  dk(  rt        d      |_        $|j                  dk(  rt        d      |_        D|j                  dk(  rit        |d	      rL|j                  j!                         j#                  d
      dkD  r t        d      dz   t        d      z   |_        t        d      |_        |j                  dk(  rt        d      |_        |j                  dk(  rt        d      |_        |j                  dk(  r!t        d      dz   t        d      z   |_        ,|j                  dk(  rt        d      |_        M|j                  dk(  rt        d      |_        n|j                  dk(  rt$        j&                  j)                  |j                        \  }	}
t$        j&                  j+                  |
      \  }}
t$        j&                  j-                  |
      \  }}
|dk7  r"|d   dk(  r|dd  }t        d      |z  |_        t        d      |_        &|j                  dk(  rt        d      |_        G|j                  d k(  rt$        j&                  j)                  |j                        \  }	}
t$        j&                  j+                  |
      \  }}
t$        j&                  j-                  |
      \  }}
|dk7  r#|d   dk(  r|dd  }|j/                  d!      r|d"d  }d#|j0                  v r
d$}d|_        nd}|dk7  rd%t        d&      z   d'z   ||fz  |_        *d%t        d&      z   |z  |_        B|j                  d(k(  s|j                  d)k(  rt        d*      |_        r|j                  d+k(  s|j                  d,k(  r;t$        j&                  j)                  |j                        \  }	}
t$        j&                  j+                  |
      \  }}
t$        j&                  j-                  |
      \  }}
|dk7  r|d   dk(  r|dd  }|d-k(  rEt        d.      |_        |j0                  dk7  s9|xj                  d'|j0                  z  z  c_        ]d }|j#                  d/      dk7  rd&}n-|j#                  d0      dk7  rd1}n|j#                  d2      dk7  rd3}|t        d4      |z  |_        t        d5      |_        d}|j                  |_         t5        j6                  t8        t:        j<                        }| j>                  jA                  |       tC        |d6d       dk7  rFd}d}d}d}d }d7d8i}|jD                  r|jD                  }|j                         D ]  }|j                  dk(  r"d}| jG                  |j                        rd} nZ|j                  d9v sD||j                  d:v rrt$        j&                  j)                  |j                        \  }	}
t$        j&                  j+                  |
      \  }}
|"t$        j&                  jI                  |      \  }}|sd}|j                  j/                  d;      xs |j                  j/                  d<      xr |j                  jK                  d=      }|jL                  r|jL                  d>k(  r|s| jO                  ||?       |j0                  |d@<   |jL                  |dA<   |jP                  |dB<   |jR                  |dC<    |sn|rk|shjL                  ra|jL                  d>k(  sR|jL                  j!                         j/                  d      s)|jL                  j!                         j/                  dD      rt        |dE      r|jT                  r|jT                  }n|}| jW                  |dF      }|rtY        jZ                  |fi |}d|_        |j]                  |       | jG                  |j                        rd}| jW                  |d
      }|ra| j_                  |      }||dB<   t        d      |d@<   tY        jZ                  |fi |}t        d      dz   dz   |_        |j]                  |       |rd|_0        d|_1        tC        |dGd       _0        d}|j                         D ]$  }|je                  |j                  |f       |dz  }& | j>                  jg                  d      }| j>                  ji                  t5        jj                         |d       |r| jl                  jo                          y | jl                  jq                          y )HNFra   Tr   zParallel Portr   zSerial Portr   r   rW  r  Fax - USBr   	Bluetoothr   z%HP Linux Imaging and Printing (HPLIP)r   r   z Hardware Abstraction Layer (HAL)r   zAppSocket/HP JetDirectr   r   r   r  zLPD/LPR queue '%s'zLPD/LPR queuer   rn  r  z	printers/	   r)  zDriverless z%sIPPz (%s)rw  rx  HTTPr   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_hpliprm  r   )r   r   r  r   rh  r  r  r  r  r  )r  r   rk  zdevice-make-and-modelz	device-idzdevice-locationhewlettdnssd_hostnamerV  r  )9r&  r'  r(  r)  r+  rg  r  r    r"   r  r  r  r3  	menuentryr  r   r:   r  r   r   r   	splithost
splitqueryrc   r  r)  r   r4  r5  r   rW  r   r6  r
  _network_hostrT  	splitportrk  r   r  r  r  rs  rZ  r  r  r  rM  r  rq  r$   rv  rD   rw  r   r=  rS   )rj  rT   r-   rq  r6   r.   r  	show_urisr   r   r   hostportqueuedrvlessr=   	cupsqueueprotocolhp_drivabler  
is_network
remotecupsr  r  r  	hpliphosthplipurir  rK  faxdevidfaxdevre  s                                  r   on_tvNPDevices_cursor_changedz+NewPrinterGUI.on_tvNPDevices_cursor_changed  s   &(#).&(-%$)!%'"!((+f<  #~~t$$2!	$003 T	.F{{j(#$_#5 (#$]#3 %FE*JJ$$&++E2R7'(x%'7!E('BF$'(xF$+#$[> $#$%L#M '#$U8e#3=>$? %#$%G#H (#$%=#> %!'!7!7!D#)<<#9#94#@ 4 & 7 7 >B;Qx3 %ab	()*>(?*/)0F$ ()'9F$%#$%@#A %!'!7!7!D#)<<#9#94#@ 4 & 7 7 >B;Qx3 %ab	''4 %ab	6;;.+G(,F% GB;)-%7)B)0%(8)9F$ *.%G(CF$&&++*@#$V9 '6;;&+@!'!7!7!D%||55t<t$*LL$;$;T$B!D?y|s': )!"I&'()I'JF${{b(((Gfkk,AA(#Hyy)R/#(;/25#(#56"<#8+,-.M,N.6-7( :; ( "	#):: iT	.l s&446%%u- NOT:dBK LJJD*I7K++%33(447 I;;$&"&K 77D'+[[$MM|7O(O)/)?)?)L+1<<+A+A4+H(4#/+1<<+A+A8+LLT4%)
'-zz'<'<X'F (F'-zz'<'<W'E'C&,jj&9&9'&B # !' 5 5"11Y>% ;;CI < K5;[[M2@F@N $$;<3999K09?$56?IB :j))%%2%%++.994@%%++.999E^-=>"11 . = =I $IAA9CJL%,,hF+FC$KCM"--s3 77D'+ "CCYEJLF#'#;#;V#D3;K056uXM2!,!3!3V!K{!K+,U8e+;C,D(&116:.2++/N(%~~tL $003 	FLL6++V45FA	 $$//3&&F  )),  %%(r   c                    |j                         \  }}|y |j                         }|j                  |      }|j                  |d      }|| _        | j
                  j                  d       | j                  j                  |j                  | j                        }| j                  j                  |       t        d|j                  z         d}|j                  }	|j                  j                  dd      d   }
|| j                   k(  rI|j                  dk(  rt#        d      }n|j                  dk(  rqt%        |d	      rX|j                  j'                         j)                  d
      dkD  r,t#        d      dz   t#        d      z   |_        t#        d      }nt#        d      }n|j                  dk(  rt#        d      }nt|j                  dk(  rt#        d      }nX|j                  dk(  rt#        d      }n<|j                  dk(  rt#        d      }n |j                  dk(  s|j                  dk(  rt,        j.                  j1                  |j                        \  }}t,        j.                  j3                  |      \  }}t,        j.                  j5                  |      \  }}|dk7  r|d   dk(  r|dd  }|dk(  rt#        d      }nod }|j)                  d      dk7  rd}n-|j)                  d       dk7  rd!}n|j)                  d"      dk7  rd#}|t#        d$      |z  }nt#        d%      }n|j                  }| j
                  j                  |       n|j                  d&k(  rt,        j.                  j1                  |j                        \  }}d}d'}|d&k(  r~t,        j.                  j3                  |      \  }}t,        j.                  j7                  ||(      \  }}t        d)|d*t9        |             |j:                  dk7  r|j:                  }n|}| j<                  j                  |       | j>                  j                  tA        |             n|j                  d+k(  r[|jB                  sb|j                  j                  d,d      }tE        |      dkD  r|d   }nd} |j                  d-      }i }|D ]  }|j                  d.      \  }}|||<    | jF                  d/f| jH                  d0f| jJ                  d1f| jL                  d2ffD ]  \  }}||v r|j                         }|jO                         }d}|rI|j                  |d      d   }tA        |      tA        ||         k(  rn|jQ                  |      }|dz  }|rI|r|jS                  |       |jS                  d       |jS                  d        n|j                  d3k(  r| jT                  j                  d       | jV                  j                  d       | jV                  jY                  d        | jZ                  j]                  d4       tE        |j                        d5kD  r|j                  d5d  }|j)                  d      }|dk7  r||dz   d  }|d | }nd}| jT                  j                  |       | jV                  j                  |       |}| jZ                  j]                  d6       n|j                  d7k(  r7| j^                  j                  d       | j`                  j]                  d4       n|j                  d7k(  rp| jb                  j                  d       | jd                  j                  d       | j^                  j                  |j                  d5d         | jg                  d6       n1|j                  r%| jh                  j                  |j                         	 tE        |      dk(  r`| j                  jj                  d8k(  rG| jl                  d9k(  s| jl                  d   dk(  rto        jp                         }|d   }n| jl                  }| jr                  j                  |       | jw                          y #  tu                Y xY w):Nra   r   z!Selected connection type. URI: %sr  r  r   z)A printer connected to the parallel port.r   r   rW  ra  rb  rc  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.r   z"A printer connected via Bluetooth.r   zUHPLIP software driving a printer, or the printer function of a multi-function device.r   zUHPLIP software driving a fax machine, or the fax function of a multi-function device.r   z?Local printer detected by the Hardware Abstraction Layer (HAL).r   rh  r   r  r  ri  rj  rf  rk  rl  rm  rn  ro  rp  r   i#  )defportzsocket: host is z
, port is r   r]  +rP  baudbitsparityflowr   Fr   Tr   directr  )<r  r    r"   r  r   r   r  new_printer_device_tabsr#   r  r  r   r  rd   r   r  r  r3  r  r:   r  rt  r   r   r   ru  rv  
splitnportr  r  r   r   r5  is_classrY  r   r   r   r   r2   r3   r  r   r   set_completionr   rY  r   r   r   r   r  r   rf  r  rI  unamer   rG   r  )rj  rT   r-   rq  r6   r.   r   pager  r  rs   r   r   r   r=   r}  r~  r  r  rz  partsr  option_dictr  r  r  r  r?   r>  s                                r    on_tvNPDeviceURIs_cursor_changedz.NewPrinterGUI.on_tvNPDeviceURIs_cursor_changed  s^   ((+f<  #~~t$q)##,,b1++//d>U>UV((.6CD{{jjsA&r*4--- {{j(DE%FE*JJ$$&++E2R7'(x%'7!E('BF$ . /D ABD+=>$ O P' K L% = >'6;;&+@!'!7!7!D%||55t<t$*LL$;$;T$B!D?y|s': )!"I&=>D#Hyy)R/#(;/25#(#56"<#8+ !@AHL !=>zz''00$7[[("#\\33VZZ@NVTDD!#)<<#9#94#@ 4%||66$6Ot@DdM N??b(%H#H((1148$$--sDz:[[("??

((a0;?#AhG G''--, % .F"(,,s"3KD%(-K%.
 **F3**F3,,h7**F3	%5 -LFD
 {* & 0 0 2$335"$)IId1$5a$8E"E{c;t3D.EE %#(??4#8D!GB #  "--b1"--q1))!,+-0 [[%'',(("-..5--u5FJJ!#zz!"~IIsO7"1q56lG8D G""++T2##,,g6##1148ZZ5 NN##B'++E2[[E!(("-(("-NN##FJJqrN3--t4zz!!**6::6	!H~"t{{'?'?8'KJJ+-JJqMS(A tH#zzH ''2 		! s   B	a2 2b c                     |j                         }| j                  j                  t        |      dkD         | j	                          y r   )r  r   rY  rY  r  )rj  r  r  s      r   on_entNPTLpdHost_changedz&NewPrinterGUI.on_entNPTLpdHost_changed@  s6    <<>))3>A+=>r   c                 $    | j                          y rB   r  rO  s     r   on_entNPTLpdQueue_changedz'NewPrinterGUI.on_entNPTLpdQueue_changedE      r   c                    	 | j                   j                         }t        j                  |      	| j                  j                  dt        d      z   dz   t        d      z          | j                  j                  | j                         | j                  j                          t        | j                         	fd}| j                  j                  | j                         | j                  j                  d|      }	j                         }| j                  j                  |       | j                  j                  dt               | _        | j                  j#                          t%        j&                  t(              }|D ]  }|j+                  |g        t%        j,                         }|j/                  |       |j1                  d       |j3                  d       | j4                  j7                  |       y )Nz"<span weight="bold" size="larger">r  z	</span>

zSearching for printersc                 &    j                          yrR   )r}   )rT   rU   servers     r   r  z5NewPrinterGUI.on_btnNPTLpdProbe_clicked.<locals>.stopS  s    NNr   r  r   )r   r  rb  	LpdServerr   
set_markupr3  r   r`  r   r  rP   r"  rC  rB  proberV   rS   r   r4  r5  r$   EntryCompletionr6  set_text_columnset_minimum_key_lengthr   r  )
rj  r  r  r  signalr>   r6   r?   
completionr  s
            @r   on_btnNPTLpdProbe_clickedz'NewPrinterGUI.on_btnNPTLpdProbe_clickedH  s   %%..0((2!E!";"02?"@!"#;!<"= 	> 	))4+@+@A  #doo	 	""D$;$;<((.$?<<>""F+"&//"9"9>;N#Ps# 	%GLL7)$	% ((+
e$""A&))1-**J7r   c                    |j                         }|j                  d      dk7  r|j                  d       t        d|z         | j                  j                  |       | j
                  j                         }|j                  | j                        }| j
                  j                  |d       | j                  j                  dd       | j                  j                  d       y t        j                  t        j                  z   dz   }| j                  ||       |j                         }| j                   j#                  t%        |      dkD         | j&                  j)                          | j+                          y )	Nr  r  r   zURI detected (%s) -> Enter URIF)r-   start_editingr   rL  )r  r  r  rd   r   r   r    r!   rr  rD   select_regionset_positionr  r  r  r  r   rY  rY  r   rS   r  )rj  r  r   r6   r-   r  rn  s          r    on_entNPTNetworkHostname_changedz.NewPrinterGUI.on_entNPTNetworkHostname_changedj  s,   ||99c?b LL"84?@&&-$$..1E>>4#8#89D''d7< ( >++Q2**B/,,V]]:9D3.LLO))37Q;7##((+r   c                      j                   j                         } fd} j                  j                  d        j                   j                  d       d _         j
                  j                           j                  j                          t        j                         } j                          |j                  ||       | _        y )Nc                 `    j                   y t        j                  j                  |        y rB   )r  r   r
  found_network_printer_callback)
new_devicerj  s    r   found_callbackz?NewPrinterGUI.on_btnNetworkFind_clicked.<locals>.found_callback  s&    ""*MM4>>
Kr   Fr   )r   r  r   rY  network_foundr   rS   r   r=  rb  PrinterFinderr~  r  r  )rj  r  r  r  finders   `    r   on_btnNetworkFind_clickedz'NewPrinterGUI.on_btnNetworkFind_clicked  s    ))225	L 	))51""00%8##((+$$--0,,/ T>*$r   c                 2   t        j                          |r| xj                  dz  c_        t        |      }	 | j                  j                  |      }| j                  |   j                  |       | j                  j                         \  }}|rh| j                  j                         }|j                  |      }|j                  |d      | j                  |   k(  r| j                  | j                         nd | _        | j/                          | j0                  j3                          | j4                  j7                  d       | j8                  j7                  d       | j                  dk(  rD| j:                  j=                  dt?        d      z   dz          | j:                  jA                          t        jB                          y # t        $ r d|_        | j                  j                  |       | j                  j!                          | j                  j                         }|j#                  d | j$                  |j'                         |dg      }| j                  dk(  r.|j)                  |      }| j                  j+                  |d d       Y w xY w)	Nra   TFrl  r   z<i>z%No printer was found at that address.z</i>)"r   r  r  r   r=  r  r  r   r  r    r"   r  r  rm  rq  r$   r4   r  rs  rp  r!   rD   r  r  r   rS   r   rY  r   r   r  r3  r|  r  )rj  r  r  r  r-   rq  r6   r.   s           r   r  z,NewPrinterGUI.found_network_printer_callback  s:   !# *-CDLL&&, Q**J7!%!1!1!<!<!?v ,,669E >>40Da0DLLOC::D<L<LM #'D!!$((--0&&44d;--t4!!Q&++6689 ;E 9F9F IO9O P ++0035  D$(!##S)!!$((225**D$2K2K14#u0M + O %%* >>40D$$//tUCDs   C G CJJc                    | j                   dv r| j                  j                  S | j                  j                  }| j                  j                  || j                        }|}|| j                  k(  r| j                  j                  }|S |dk(  rJ| j                  j                         }| j                  j                         }|r|d|z   z  }|r|d|z   z  }|S |dk(  rJ| j                  j                         }| j                  j                         }|r|d|z   z  }|r|d|z   z  }|S |dk(  rg }| j                  df| j                  d	f| j                  d
f| j                   dffD ]U  \  }}	|j#                         }
|j%                         }|
j'                  |d      }|dk7  s> |j(                  |	dz   |z          W dj+                  |      }| j                  j                  j-                  d      d   }|r|dz   |z   }|S |dk(  r| j.                  j                         }t1        |      j3                         \  }}}}}d}d}| j4                  j7                         r4| j8                  j                         }| j:                  j                         }t1        |||||      j=                         }|r|d|z   z  }|S | j>                  j                         }|S )N)r  r!  r   r\  r  r   r  r   r  r  r  r  ra   r   rP  r  r]  r   r   r  )rp   r  r  r  r  ) rh  r   r   r  r  r#   r  r  r   r  r   r   r   r   r   r   r   r    r  r  r$   rl  r  r   r   r  r   r  r   r   r  r   )rj  r  r  r   r  r  r?   r  rT   r=   r6   r.   r  r   rp   r  r>  rU  r  r  s                       r   r  zNewPrinterGUI.getDeviceURI  s   ::;;??"{{++//t7N7NO4---[[__FZ Y X//88:D++446D%$,&cDj(FL K U]%%..0D))224G%$,&cGm+F> = XG&&/&&/(((3&&/	!1 	8
 ((+--/$2R<"GNN4#:#67	8 hhw'Gkkoo++C03F#/  U]..)),C)/S)9)B)B)E&UD%ADH""--0**336..77:D#h88?
 %#+%  &&//1Fr   c                 B   | j                   j                         }| j                  j                         }| j                  j                         }| j                  j                  |       | j                  j                  |       |r| j                  }|r| j                  }|r| j                  }| j                  j                         |s| j                  r| j                  D ]  }| j                  j                  |        d | _        | j                  j                          d | _        | j                   j                  d       | j"                  j%                  t'        d             t)        j*                  t,        t,              }| j.                  }|j1                  |       |j                  d       | j2                  | j.                  fD ]  }|j                  |        | j                   j                  |xr | j                  d u        | j5                          y r	  )r   r  r   r   r   rY  r   r  r  r  r   r  rF  rG  r"  r!  r   r   r  r3  r   r4  r5  r   r6  r   r  )	rj  rT   rbtn1rbtn2rbtn3r  r#  r6   rr  s	            r   r  z'NewPrinterGUI.on_rbtnNPFoomatic_toggled  s   ##..0))+33>>@$$U+))%0--D**D22D++T2.. 0

%%w/0 #'DJJ DJ..<<dC44==q{KMM3,E@@H&""E*99@@B 	(F  '	( 	**M59djjD&8:r   c                 $    | j                          y rB   r  r'  s     r   #on_filechooserPPD_selection_changedz1NewPrinterGUI.on_filechooserPPD_selection_changed#  r  r   c                 6   d| _         | j                  T| j                  D ]  }| j                  j                  |        d | _        | j                  j	                          d | _        |j                  d       | j                  }|j                  t        d             | j                  j                         }t        dt        |      z         t               | _        g | _        | j                  j                  | j                  j                  d| j                                | j                  j                  | j                  j                  d| j"                               | j                  j%                  |       | j&                  j                  d       y )NTFr  zSearching for "%s"r  r  )r'  rF  rG  r"  r!  rY  r   r  r3  r   r  rd   r  r   r$   rB  opreq_user_search_doneopreq_user_search_errorr  r   )rj  rT   r#  r  
searchterms        r   (on_btnNPDownloadableDriverSearch_clickedz6NewPrinterGUI.on_btnNPDownloadableDriverSearch_clicked&  sJ   )-&::!.. 0

%%w/0 #'DJJ DJe$88+'77@@C
(4+<<=(+
 ""JJ
 $ ; ;=	> 	""JJ $ < <>	? 	

!!:.11??Gr   c                 0   | j                   D ]  }|j                  |        d| _        d | _         d | _        d| _        || _        || _        | j                  }| j                  }t        j                          	 |j                  t        d             |j                  d       t        j                  t         t               }t#        | j
                        dk7  rft#        | j
                        dkD  rt        d      }nt        d      }|j%                  d       }	|j'                  |	d|       |j'                  |	dd       g }
| j
                  D ]  \  }}|
j%                  ||f        |
j)                  t+        j,                  d       	       | j.                  j1                         j3                         }d}|
D ]d  \  }}|j%                  d       }	|j'                  |	d|       |j'                  |	d|       |j3                         |k(  sQ|j5                  |	      d   }f | j6                  }|j9                  |       |j;                  |       |j                  d       | j=                          t        j@                          y #  t?                Y #xY w)
NTr  ra   z -- Select from search results --z-- No matches found --r   r   c                 :    t        j                  | d   |d         S )Nra   )r  	modelSort)rZ   r  s     r   r  z6NewPrinterGUI.opreq_user_search_done.<locals>.<lambda>a  s    DNNTUVWTXZ[\]Z^D_ r   )key)!rG  r"  r  rF  r(  r+  r  r   r   r   r  r  r3  rY  r   r4  r5  rY  r$   	set_valuer4   	functools
cmp_to_keyr   r  r:   r!   r   r6  r  r  rG   r  )rj  rF  r>   r  r#  r  r  r6   firstr.   sorted_list
printer_idprinter_namesoughtselect_indexr  r=   rr  s                     r   r  z$NewPrinterGUI.opreq_user_search_done@  sJ   ** 	'Gg&	' "&"
(,%%-"$+!3388!	 NNAhK(  $'MM3,ED../14223a7@AE67E||T*q%0q"-K,0,F,F @(
L""Z$>?@ )"6"67_"`a77@@CIILFL' <D||T*q$/q"-::=F*#(>>4#8#;L< @@H&.""D)  		 s   :FJ A%J Jc                 |    t        d|t        |      fz         | j                  |t               t	                      y r  )rd   r  r  rY   r  r  s       r   r  z%NewPrinterGUI.opreq_user_search_errort  s9    :f>BCj>J J 	K##UDFDF;r   c                 d   | j                          | j                  | j                  D ]  }| j                  j                  |        d | _        | j                  j	                          d | _        | j
                  j                  d       | j                  j                  t        d             y y )NTr  )
r  rF  rG  r"  r!  r   rY  r   r  r3  )rj  rT   r#  s      r   /on_cmbNPDownloadableDriverFoundPrinters_changedz=NewPrinterGUI.on_cmbNPDownloadableDriverFoundPrinters_changedy  s    ::!.. 0

%%w/0 #'DJJ DJ..<<dC44==q{K "r   c                 d   t        d       d | _        | j                  dk(  r| j                  }|j	                         }|j                         }|rv|j                  |d      }|j                  |d      }|dk(  rd|j                  d       |j                         }|r%|j                  |d      }|j                  |d      }nd }d }nd }d }n| j                  d   \  }}|| j                  D cg c]  }|d   	 }}n|g}|r|| _        t        j                  t        t        j                        }d }d }	|D ]  }| j                  |   }
|
j                         D ]  }d|vst!        |d         dk  r3t"        j$                  s| j'                  |      st)        d|d   z         K|j+                  d       }|	|}	|j-                  |d|d          |j-                  |d|       |d	   s|}  |	y
| j.                  j1                         sO| j2                  dk7  r@|j+                  d       }|j-                  |dt5        d             |j-                  |dd       ||	}| j6                  }|j9                  |       ||j;                         j=                  |       | j?                  |       yc c}w )NfilldownloadableDriversTra   r   r   r  zRemoved invalid driver entry %sr=   recommendedFr  zLocal Driver) rV  r*  r  r   r    r  r  r  r+  r   r4  r5  r   rW  r  r;   rY  r1  rM  r2  rd   r$   r  r   r  rh  r3  r   r6  r   select_iter)on_tvNPDownloadableDrivers_cursor_changed)rj  rT   r6   r.   r  printer_strrZ   printer_idsrecommended_iter
first_iterr  r?  r5   s                r   r  z%NewPrinterGUI.fillDownloadableDrivers  s   ()/3,!!T)>>F$$'E)),D"__dA6
#ootQ7#%%q)!114D%*__dA%>
&+ootQ&?%)
&*!
"&*&@&@&C#J *.)C)CDA1Q4DKD%,K3>D0s&446
% 	,J//
;G!..+ ,6)(A-00996B A &v!/ 0||T*%!%Jq&.9q&1-('+$!,	,( 22==?00<<&DOOT1a&78OOT1a(#)//E"'""%113CD66x@a Es   -J-c                 $    | j                          y rB   r  r'  s     r    on_rbtnNPDownloadLicense_toggledz.NewPrinterGUI.on_rbtnNPDownloadLicense_toggled  s    r   c                    d| _         | j                  j                         }| j                  j	                         }|j                          d}| j                  r*t        j                  j                  | j                        }nd }|D ]  }|xr" t        j                  j                  |      |k(  }| j                  r'| j                  j                  r|r|t        d      z   }n|}|j                  ||f      }|st|j                  |      }	| j                  j                  |	d d       | j                  j                  |	d ddd       d} |sN| j                  j                  t!        j"                         d d       | j                  j                  dd ddd       d}
| j                  rZ| j                  j$                  rD| j                  j$                  }|d   r|d	   r|d   d
z   |d	   z   }
n|d   r|d   }
n
|d   r|d   }
|
dk(  r9| j                  -|
| j                  z  }
| j&                  |
d
| j&                  z   z  }
|
j)                  d      s|
j)                  d      rd}
| j*                  j-                  |
       y )NFr  Tr  r           r   ry  rz  rb   r  r  r  )recommended_make_selectedr  getMakesr   r    r8  r  r  	normalizer   r   r3  r$   r!   rD   r  r   rw  r  r  rc   r   r  )rj  makesr6   foundauto_make_normr  r  r   r.   r-   ro   
devid_dicts               r   r  zNewPrinterGUI.fillMakeList  s=   ).&		""$((*>>(--77HN!N 	D) O&++55t<N {{t{{99ka 011<<t.D~~d+))4u=--dD.2C>	  NN%%s||~tUCNN))!T4cB ;;4;;..,,J% Z%6#E*S0:e3DDE"#E*E"#E*R<DNN6dnn$F*#//i(i(F**33V<r   c                    |j                         \  }}|| j                  |j                         }|j                  |      }|j	                  |d      d   | _        | j                  xrS t        j                  j                  | j                        t        j                  j                  | j
                        k(  }|| _	        | j                          y y y r  )r  r  r    r"   r#   NPMaker  r  r  r  fillModelList)rj  r   r-   rq  r6   r.   recommended_makes          r   on_tvNPMakes_cursor_changedz)NewPrinterGUI.on_tvNPMakes_cursor_changed  s     ++-f		 5''*E>>4(D))D!,Q/DK $ !I + 0 0 : :DNN K + 0 0 : :DKK H!I  .>D*  !6r   c                    d| _         | j                  j                  | j                        }| j                  j                         }|j                          d}t        j                  j                  | j                        t        j                  j                  | j                        k(  }|r)t        j                  j                  | j                        }|D ]  }|xr" t        j                  j                  |      k(  }| j                  r'| j                  j                  r|r|t        d      z   }n|}|j                  ||f      }	|st|j                  |	      }
| j                  j!                  |
d d       | j                  j#                  |
d ddd       d} |sN| j                  j!                  t%        j&                         d d       | j                  j#                  dd ddd       | j                  j)                          y )NFr  Tr  r   r  )r-  r  	getModelsr  r   r    r8  r  r  r  r  r   r   r3  r$   r!   rD   r  r   rw  columns_autosize)rj  modelsr6   selectedis_auto_makeauto_model_normpmodelr  r   r.   r-   s              r   r  zNewPrinterGUI.fillModelList  s   */'$$T[[1))+#((22DKK@#((22DNNCD)..88$//JO 	 F' +&++55v>*+  {{t{{99k"2 33<<v0D~~d+**D$>..tT/3S#?	   OO&&eDOO**1dD#sC((*r   c                    || _         | j                  j                         }|j                          | j                  r| j                  j
                  }nd }| j                  rw| j                  j                  ra| j                  rU| j                  rI| j                  j                  }| j                  | _	        t        dt        | j                        z         n| j                  r|dz   |z   }| j                  j                  ||      }t        |j                               }| j                   }	 | j                  j#                  ||||      | _	        | j&                  rl| j                  r`g }	| j                  D ]5  }
|
| j&                  k(  r|	j)                  d|
       %|	j+                  |
       7 |	| _	        nt        d       g | _	        g }g }d}| j                  D ]  }| j                  j-                  |      }t/        |d         }
|
j1                  dd      }
	 dt/        |d	         z  }|
|z  }
|
|v }| j                  r| j                  j                  s| j&                  |k(  r|j+                  |
       |j+                  |       |d
z  }|j+                  |
t5        d      z   f      }|j7                  |      }| j                  j9                         j;                  |       | j                  j=                  |d ddd       +| j                  r|dk(  r|j+                  |
       |j+                  |       |d
z  }|j+                  |
t5        d      z   f      }|j7                  |      }| j                  j9                         j;                  |       | j                  j=                  |d ddd       |r|j+                  |
       |j+                  |       |d
z  }|j+                  |
f        || _	        | j                  j?                          y #  t%                || _	        Y xY w# t2        $ r Y w xY w)NzID matched PPDs: %srb   r   zNo PPDs available?r  r  r   z [%s]zppd-natural-languagera   r  Tr  r  ) NPModelr   r    r8  r   r  r   r-  r  	NPDriversrd   r  r  r  rY   r  r&  r  rG   r  insertr$   r  r[   rr   KeyErrorr3  r!   r   select_pathr  r  )rj  pmaker  r6   r  r   r  ppdnamesfilesr  r?  
driverlistr  r  r  r!  lpostfix	duplicater.   r-   s                       r   r  zNewPrinterGUI.fillDriverList7  s     **,;;KK''EEKKDKK66++$$![[77N "55DN-dnn0EEFYY #S[61N99--eV<DDIIL)H//E*!%!D!DXEJESEJ"L DKK"nn 0F!1!1162/	0 ") ,-DN
	~~ &	)G))..8C%9!:;F^^$4b9F"Z5K1L%MM(" *,I[[T[[%?%?  G+!!6*  '*Q||f&'o'6 &8 9~~t,  ..0<<TB  //dD#sKa!!6*  '*Q||f&'(8&9': &< =~~t,  ..0<<TB  //dD#sK!!6*  '*QfZ(M&	)P #))+*!$!)8  s   0#P P4P14	Q Qc                 r   |r|j                         d   }|0y|j                  ||      \  }}|j                  ||      }	|	y|	d   }| j                  |d      }
| j                  j                  |
      }t        |d         }|
j                  d      r|dz  }|t        d      z  }|j                  |       y)Nr   Fr  z	foomatic:rb   z"This PPD is generated by foomatic.T)
r  #convert_widget_to_bin_window_coordsget_path_at_posr  r  r  r[   rc   r3  r  )rj  tvrZ   r  keyboard_modetooltipr-   bin_xbin_yrD  
drivernamer  markups                r   rb  z(NewPrinterGUI.on_NPDrivers_query_tooltip  s    ==?1%D|AA!QGLE5$$eU3C{q6D^^DG,
))..z:W%9:;!!;/cMFa<==F6"r   c                    |j                         \  }}||j                         }|j                  |      }|j                  |d      d   }| j                  xr9 | j
                  xr+ | j
                  j                         |j                         k(  }|| _        | j                  | j                  |       | j                  | j                         y y r  )r  r    r"   r#   r  r  r:   r-  r  r  on_tvNPDrivers_cursor_changedr   )rj  rT   r-   rq  r6   r.   r  recommended_models           r   on_tvNPModels_cursor_changedz*NewPrinterGUI.on_tvNPModels_cursor_changed  s    ((*f$$'E>>4(DYYtQ'*F "&!?!? "M!%"M!%!6!6!9V\\_!L  /@D+V4..t/?/?@ r   c                 $    | j                          y rB   r  r'  s     r   r  z+NewPrinterGUI.on_tvNPDrivers_cursor_changed  r  r   c                 
   | j                   j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       | j
                  j                  d       | j                  j                          |j                         }|y |j                         \  }}|s(|j                         \  }}|r|j                  |      }ny |j                  |d      }|dk(  r6| j                  j                  | j                          | j#                          y | j                  j                  | j$                         |j'                  dt)        d            }| j*                  }	|d   }
d } ||	|
       | j                   j                  |       |j'                  d	t)        d
            }| j,                  }| j.                  } |||d           |||d          | j                  j                  |       |j'                  dt)        d            }| j                  j1                  |       d|v r|d   }dD ]  }|j3                         }d }| j4                  j'                  d|z        }| j4                  j'                  d|z        }||v rT|rR	 t7        ||         }|j9                  dd       |j;                  |       |j=                          |j                          ||j                          |j=                           d}d|v rd|d   D ]\  }|d   s	d|d   z   }d}|d   r||d   z   }|d   r|r|t)        d      z   }||d   z   }|s@|t)        d      |z  z   }|r|dz   }||z   }^ |st)        d      }| j                  j                  |       d|v r_| j                  j?                          |j'                  dt)        d            }| j@                  jC                         j                  |       n| j                  j                          |d   sU|d   sP| jD                  j                  d       | jD                  j                          | j
                  j                          n| j
                  j                  d       | jD                  j?                          | j
                  j?                          | j                  j?                          |j'                  dt)        d            }| j@                  jC                         j                  |       d |v rtG        |d          dkD  rd| _$        nd!| _$        | j#                          y #  Y uxY w)"Nr   Tra   r   supplierOpenPrintingmanufacturersuppliedc                 4    || _         | j                  |       y rB   )r	  r  )rT   r  s     r   set_protect_activezSNewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changed.<locals>.set_protect_active  s    $*F!v&r   licenseDistributablepatentsfreesoftwareshortdescriptionr   functionality)GraphicsLineArtPhotoTextzhsDownloadableDriverPerf%sz"lblDownloadableDriverPerf%sUnknownr  supportcontactsr=   rb  rs   levelr  z
(%s)rI  zNo support contacts knownlicensetextzNot specified.nonfreesoftwarer  F)%r   r  r   r   r   r   r  r   rS   r   r  r  r"   r  r   r  r  r  r  r#   r3  r   r   r   r  r:   __dict__r  	set_ranger  r=  r|  r   
get_bufferr   rY  r)  )rj  rT   r(   r6   r.   r-   rq  r?  r  vendorr  r  r  r  freedescriptionr  fieldr  r  hsunknownr!  supportentrysupportcontactsupportcontact_extratermss                              r   r  z7NewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changed  s   ,,55r:++44b9//88"=33<<bA$$//600558((+	,,/t!,,.LD&~~t,$*Q;33DDdF`F`a//@@$BYBYZ::j!N*;<::./	' 	FF+,,55x@**Y/(:;;;55GVI%67D&"89++44g>jj!3QvY?//::KHf$"?3MA (kkn]]&&(Du(LM--++-Q/4.5 6-'!$'s);$<ELL!S1LL%0KKN#LLO =GGJ$$''(* & &'8 9 K'%*\&-A%AN+-(#E*/C(/00,#G,/3G!D'3Q0/C(102,+)7hK*>>*?*.=.DO*9N*J#K$  ;<O33<<oNF"4499<JJ}a0@.ABE..99<EEuM4499<'(	1B))44d;))..1((--0((33T:))..1((--04499<JJ}a0@.ABE..99<EEuMVF6N 3a 7(,D%(-D%k! s   6AU77U<c                 
   d }	 | j                   j                         st        | j                        dkD  r_| j                  dk(  rP| j
                  j                         j                         \  }}|j                  |      d   }| j                  |   }nu| j                  j                         r/t        j                  | j                  j                               }n,| j                  }|j                         j                         \  }}|j!                  |d      }|dk7  rd|v rt        |d         dkD  r|d   d   }t#        d|z   dz          |j%                         }t        |      dkD  rt&        j(                  j+                  |      }|j-                         }	|j/                          t1        j2                         5 }
|
j5                  |	       |
j7                          t        j                  |
j8                        }d d d        t#        dtA        |      z          t[        |t\              r| j                  j_                  tC        d             	 |dk7  rE| j                  ja                  |      }t        j                  |      }tc        jd                  |       | j                  jk                          |S # 1 sw Y   xY w# t:        t&        j<                  j>                  f$ r}t#        dtA        |      z          | j                   j                         rtC        d      }tC        d	      }| j
                  j                         j                         \  }}|j                  |      d   }| j                  |   }|jE                  d
      rtC        d      dz  }n||| jF                  | jH                  fz  }n| j                  j                         rtC        d      }| j                  j                         }tC        d      dz   }	 tK        jL                  dd|gdtJ        jN                  tJ        jP                  tJ        jP                        }|jS                         \  }}||jU                         z  }n#   xY wtC        d      }tC        d      }tW        ||| jX                         Y d }~y d }~ww xY w# t:        $ r tg                t#        d       Y ;t        jh                  $ r tg                t#        d       Y ew xY w)Nr   Fra   r  zppd file to download []zRuntimeError: zDatabase errorz4The '%s' driver cannot be used with printer '%s %s'.
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:rI  z/usr/bin/cupstestppdz-rvvTrO  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)6r   r  rY  r&  r)  r   r   r  r!   r  r   r  r  r   r  r   r  rd   rq   r   re   rf   ri   closer  r  r  r  r=   r  r  r  r  r3  rc   r  r  rQ  rR  rS  rT  rJ  rj   r=  r   rX   r5  r  getServerPPDrI  unlinkrG   r  r  )rj  r!  r6   r.   r  r5   r?  file_to_download	ppdurlobjr  r  rv   	err_titleerr_textr  filenamerU  rL  rV  r  s                       r   r  zNewPrinterGUI.getNPPPD5  sB   K	$$//1334q8))U2"..<<>KKMt^^D)!,nnR(**,hht22??AB  77&447DDGt$2Q;6V#3F6N+a/+1&>!+<("$<?O$OQT$TU+;+A+A+C( 01A5(.(>(>?O(PI)2)9J%OO-!)!<!<!? :4 $

: 6 $

&*hhtyy&9:j 	7T#Y&'c3II&&.(9:
I%<		..s3A((1+CIIaL II$$'
O: :
 fll445 .	(4834""--/./	 : ;#//==?+|~ t^^D)!,+$$l3  ; <12C #fdkk4<<%HHC**,kN	..;;= # $&*+ #((+A+18+=480:0B0B1;1;BA ()}}'7$VV6==++C 45	12y#t/D/DE].	r   O!#MN== I!#GHIsd   F=K AJ<K A
R: <KK $R7,DR2A-Q:9R2:Q==0R22R7:T'TTc           	         t        d       d| _        i | _        | j                  }|j	                         D ]  }|j                  |        | j                  sLt        j                  t        d            }|j                  |       |j                          t        d       y | j                  j                  D ]  }|j                  dk7  rd| _        t        j                         }|j                  d       |j!                  d       |j                  |       d	}t#        |j                        D ]9  \  }}|j$                  d
k(  r|dz  }t'        || j                  |       }	|j)                  |	j*                  d	|dd       t        j,                         }
|	j.                  r|t        j0                  j3                  dddd      }|j5                  d	d	d	d       |j                  |	j.                         |j)                  |d|dd       |j)                  |
d|dd       n|j)                  |
d|dd       |
j7                  |	j8                  ddd	       |	| j                  |j$                  <   <  | j                  s@t        j                  t        d            }|j                  |       |j                          | j:                  j=                          | j:                  j?                          y )NzExamining installable optionsFzNo Installable Options)r  z No PPD so no installable optionsInstallableOptionsTr   r   
PageRegionra   r  g      ?r   ) rd   r$  r  r   get_childrenr%   r!  r   Labelr3  r  r|  optionGroupsr=   Gridset_column_spacingset_row_spacing	enumeratekeywordr
   attachconflictIconBoxr  	Alignmentr   set_paddingr9  selectorr   rS   r=  )rj  	containerchildlrp   gridr*   r  r  ohboxas               r   r  z&NewPrinterGUI.fillNPInstallableOptions  s[   34#( ++	++- 	$EU#	$ xx		": ;<AMM!FFH:; XX** 	1Ezz11'+D$88:D##A&  #MM$D'6 1
F>>\1	 48ANNAr1a8wwy77))3S#>AMM1aA.EE177OKK1b!Q/KKaQ2KKaQ2

E5!</0V^^,#1	18 ''		": ;<AMM!FFH$$))+$$--/r   c                    | j                   r1| j                   j                          d | _         | j                          | j                  r!| j                  j                          d | _        | j                  r1| j                  j                          d | _        | j                          | j                  dv rO| j                  j                         }| j                  j                         }| j                  j                         }n| j                  }| j                  }| j                  dk(  r<t        | j                        }	 |D ]  }	 | j                  j!                  ||       ! n| j                  dk(  s| j                  dk(  rd }
| j*                  j,                  r| j*                  j,                  }
n| j/                         }
| j                  s| j1                  d       y | j2                  j5                         D ]  }|j7                           t9        | j:                         t=        j>                         r)t=        j@                          t=        j>                         r)| j                  jC                  tE        d      |z         	 tG        |tH              r!| j                  jK                  |||
       ne| | j                  jK                  ||
       nCtM        jN                  || jP                  d	          | j                  jK                  |||

       | j                  jU                          tS        | j:                         | j                  dv r| j                  jC                  tE        d      |z         	 tM        jX                  | j                  |       | j                  j[                  |       | j                  j]                  |       | j                  jU                          n| j                  dk(  rq| j                  jC                  tE        d      |z         	 | j/                         }
| j                  jK                  ||
       | j                  jU                          n| j                  dk(  r|s+| j_                         x}| _        |s| j1                  d       y | j                  jC                  tE        d      |z         d}tG        |tH              r| j`                  jc                         r	 | j                  jK                  |d       	 | j                  jK                  ||       	 | j                  je                  |      }t        jf                  |      }ti        jj                  |       n| j`                  jc                         sEtG        | jn                  t        jf                        r!tM        jp                  | jn                  |       n#tM        jN                  || jP                  d	          | j2                  j5                         D ]  }|j7                           	 | j                  jK                  ||       | j                  jU                          n | j                  dk(  r| j1                  d	       | j:                  js                          | j                  dv r| ju                  d|       nV| j                  dk(  r| ju                  d| jv                         n*| ju                  d|| jn                  | j                  k7         d | _        i | _<        y # t"        $ r Y w xY w# t        j$                  $ r+}|j&                  \  }}	| j)                  ||	       Y d }~y d }~ww xY w# t        j$                  $ rZ}|j&                  \  }}	tS        | j:                         | j)                  ||	       | j                  jU                          Y d }~y d }~w tS        | j:                         | j                  jU                          tW        d       Y xY w# t        j$                  $ rE}|j&                  \  }}	| j)                  ||	       | j                  jU                          Y d }~y d }~ww xY w# t        j$                  $ rE}|j&                  \  }}	| j)                  ||	       | j                  jU                          Y d }~y d }~ww xY w# t        j$                  $ r,}|j&                  \  }}	| j)                  ||	       Y d }~d }~ww xY w# t        j$                  $ rE}|j&                  \  }}	| j)                  ||	       | j                  jU                          Y d }~y d }~ww xY w# t        j$                  $ ra}|j&                  \  }}	|t        jl                  k(  rd}n1| j)                  ||	       | j                  jU                          Y d }~y Y d }~d }~ww xY w# t        j$                  $ rE}|j&                  \  }}	| j)                  ||	       | j                  jU                          Y d }~y d }~ww xY w)N)r  r?   r  r  r?   r  r  zadding printer %s)r  r   r  r  )r   r  r  r   )r!  r   r  r  ra   zmodifying printer %sr   r  r!  Fr  )r  T)r!  r  )r?   r  r  r~   r   r   )=r  r}   r  r%  r  r!  rh  r   r  r   r   r  r!  r8   r   r  addPrinterToClassr  r  r  r  r   r   r  r  r  r;   	writebackrP   r   r   rE   rF   r  r3  rX   r5  
addPrinterr  setPPDPageSizer  rK   r  fatalExceptionactivateNewPrintersetPrinterLocationsetPrinterInfor  r   r  getPPDr  rI  r7  IPP_NOT_FOUNDr  copyPPDOptionsrS   r  r&  r>   )rj  rT   r=   r  r  r!  membersmemberrv   msgr   r  r  r<  s                 r   on_btnNPApply_clickedz#NewPrinterGUI.on_btnNPApply_clicked  s,   !!""**-%)D"!!$??OO##&"DO&&)"&D!!$GG>>**,D))224H((113D::Dhhw&,T-=-=>G
% !F!		33FDA! *  $66C{{kkoo'')88r" ,,--/ #  "# $''($$'""% $$'II&&*=(>(EF#c3'II((s #$ ) C[II((c.2X ) G  ..sDMM!4DEII((3s.2X ) G II$$&4(()GGII&&*@(AD(HI..		4@		,,T8<		((t4 II$$')II&&*@(AD(HI'')		$$T#$6 II$$'&!%0dhNN2&II&&*@(AD(HI C#s#))4464		,,T5,AII((s(;#yy//5H((8,CIIh' //::<txx8..t}}cB..sDMM!4DE #ll113 'F$$&'II((3(7 II$$'!22NN1""$GGII-!22II0$2M2MNII)4$((1JKs ( ! ! == 66C##As+N == 66Ct,,-##As+		((*#t,,-		((*" == 66C##As+		((+	 == 66C##As+		((+	2  == 4#$66C++As334
 }}  vvHQ''3/II,,/	 }}  vvHQD..."++As3		003	 , }}  vvHQ''3/II,,/	s   ]	 \9$]	 B^
 A`7 3-b c- +d/ 	Af
 h 9	]]	 ]]	 	^!^^
`4A_22?`47b
;b

bc*%;c%%c*-d, !d''d,/f;ff
g>Ag99g>i;ii)NNNr   NNNr   rB   )ra   )FN)NN)F)r  r  r  r   SignalFlagsRUN_LASTr5  r  __gsignals__r  r  r  r  r  r  r  r  r  r}  r  r  rx  rz  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*  rE  r>  r2  r<  r  r~  r|  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r&  r(  r2  r,  r1  r<  rM  rT  rZ  r  r  r  r  ry  r7  r  r  r_  r]  r^  r  r  r  r  r  r$  r)  r+  r-  r/  rC  r  rJ  rM  rP  rT  rQ  rR  rB  rS  rO  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb  r  r  r  r  r  rd  r|   r   r   r{   r{      s    %00994D$00994#H$00994!"%& %,$7$7$@$@$#O$00994D
L !"!" !J 
 !& 
"a"F	"# !Q
B AEDE`DJ=.
"")4!K 
!204)$$66:&P8t/>bbJM^!F GD%N4`N4	c(JM(^* 2!h:98A6F 6 A2&/8
"0H4,Qf('T$>L)_SF<F<P8
*,A`)DK&I& P$<$ ;K=Z	%

6 )*)!V#J)XcJ
8D,%&+\6t&PH42h<
LL\
0=d
!+@_,B*AtlaJ20lwr   r{   c                      t        d       y )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.
)rV  r|   r   r   	show_helpri    s    	 
1 
2r   __main__ra   r   zsetup-printer=zdevid=z--setup-printerz--deviduiSYSTEM_CONFIG_PRINTER_UIc                  ,    t        j                          y rB   )r   	main_quit)r  s    r   	on_signalro    s    r   r~   r   r   r  )r  r  r?   rB   )Wr1  r  r  r   r  sysrI  r  r^  rl   http.clientrw  r  r  rQ  timedopsr  gi.repositoryr   r   r  r  r  rZ  r  r   r   guir	   optionwidgetsr
   r  rb  urllib.requestr   urllib.parsesmburir   errordialogsr   r  r  r%  r?  r  gettextinstallr2  r   rg   r3  r  r   r0   r8   r@   rK   rP   rV   r[   ry   r{   ri  r  getopt
gnu_getoptargvrk  r  GetoptErrorexitsetup_printerr  optoptargrO  	ppdippstr	setlocalerH  r  set_debuggingset_debugprint_fnrd   re  ro  rB  mainr|   r   r   <module>r     sb  2    3  / / /         O  !   &   #   )       v~~1A1A B ) *  6@ZCF ZCxF2 z&V&&b)9)1)34
d ME V##"MIE	 .2BJJ)*FfmmR(INN4!K!!:.A II	*II!9-II ), 	"}EJ		CHHKI OKOXK  !s   H6 &I  6H= (I,+I,