
    Kc                       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T d dlZd dlmZ d dlmZ d dlZd dlZ	 d dladan	#  daY nxY wd dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlT d dl Z d dl!Z"d dl#Z"d dl$m%Z% d dl&T d dl'm'Z' d dl(Z(d dl)Z)d dl*Z*d dl+Z+d dl,Z,d dl-Z- e-j.        e j/        e j0                   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    rOd dl@Z@	  e@jA        ejB        dd         dd d!g          \  ZCZDn*# e@jE        $ r  e>              ejF        d           Y nw xY wdZGdZHeCD ]\  ZIZJeId"k    reJZGeId#k    reJZHd$ejK        d%<   d dlLZL ejM        ejN        d            eLjO                      ePd            ejQ        eR            e=            ZSd& ZTeSU                    d'eT           eSU                    d(eT           eSU                    d)eT           eGeSO                    d*eGeH+           neSO                    d,            ejV                     dS dS ).    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                 ^    t           j                            |           \  }}||dk    rdS dS )z*Returns True is the provided URI is valid.N FT)urllibparse	splittype)urischemerests      ./usr/share/system-config-printer/newprinter.pyvalidDeviceURIr   L   s2    \++S11NVT~2u4    c                 ~  	 |                                  }|                                \  	}	fd|D             }|                                }|D ]k}|                                }	                    |          }	                    |d          }|                    |           	                    |           ld S )Nc                 P    g | ]"}t           j                            |          #S  )r   TreeRowReferencenew).0row
model_froms     r   
<listcomp>z$moveClassMembers.<locals>.<listcomp>X   s,    FFF#C $$Z55FFFr   r   )get_selectionget_selected_rows	get_modelget_pathget_itergetappendremove)
treeview_fromtreeview_to	selectionrowsmodel_tor    pathiterrow_datar!   s
            @r   moveClassMembersr3   U   s    ++--I 2244JFFFFFFFD$$&&H    ||~~""4((>>$**!!!$   r   c                    |                                  }|                                }g }|rF|                    |                    |d          d                    |                    |          }|F|                                 |S Nr   )r%   get_iter_firstr)   r(   	iter_nextsort)treeviewmodelr1   results       r   getCurrentClassMembersr<   c   s      E!!DF
 %eiia((+,,,t$$  % KKMMMMr   c                     |sdS |                                 }|                                 D ])}|j        s |j                                         |k    r dS *dS )NFT)lowervalues
discoveredname)printersrA   printers      r   checkNPNamerD   m   sb    ::<<D??$$  ! 	gl&8&8&:&:D&@&@554r   c                    	 |                                  }|rP|                    |           t          j                    r*t          j                     t          j                    &d S d S d S #  t                       Y d S xY wN)
get_window
set_cursorr   events_pendingmain_iterationnonfatalException)wincursorgdkwins      r   readyrO   u   s    !! 	&v&&&$'' &"%%% $'' & & &	& 	&& &s   A$A, ,A?c                 ~    t          | t          j                            t          j        j                             d S rF   )rO   r   Cursorr   
CursorTypeWATCH)rL   s    r   busyrT      s+    	3
s~34455555r   c                 .    |                                   dS NT)hide)widgetevents     r   on_delete_just_hiderZ      s    
KKNNN4r   c                 @    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                    |                      d          st          d| z             dS d}	 t          j                            | t
                    5 }|j        dk    r'|                                                    d          }ddd           n# 1 swxY w Y   n,# t          $ r}t          d| d|           Y d}~nd}~ww xY w|t          d	| z             dS t          j        d
t          j                  }|                    |          }|r;|                    d                                                              dd          S dS )a  Get GPG fingerprint from URL.

    Check that the URL is HTTPS with a valid and trusted server
    certificate, read it, extract the GPG fingerprint from it, and return
    it. Return None if the URL is invalid, not trusted, or the fingerprint
    can't be found.
    zhttps://z0Not a https fingerprint URL: %s, ignoring 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_fingerprintr}      s    >>*%% EKLLLtG8^##C#?? 	64{c!!))++,,W55	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6  8 8 8
sssAA6777777778 '#-...tzA24HHH  A 2wwqzz!!))#b1114s;   &B 3BB BB BB 
C(CCc                      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/ Z3d0 Z4d1 Z5d2 Z6d3 Z7dd4Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z?d< Z@d= ZAd> ZBd? ZCd@ ZDdA ZEdB ZFdC ZGdD ZHdE ZIddFZJdG ZKdH ZLdI ZMdJ ZNdK ZOdL ZPdM ZQddNZRddOZSdP ZTdQ ZUdR ZVddSZWdT ZXdU ZYdV ZZdW Z[dX Z\dY Z]dZ Z^d[ Z_d\ Z`d] Zad^ Zbd_ Zcd` Zdda Zedb Zfdc Zgdd Zhde Zidf Zjdg Zkdh Zldi Zmdj Zndk Zodl Zpdm Zqdn Zrdo Zsdp Ztdq Zudr Zvds Zwdt Zxdu Zydv Zzdw Z{dx Z|dy Z}dz Z~d{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )NewPrinterGUINr   )destroyprinter-addedprinter-modifieddriver-download-checkeddialog-canceledr   re                     TF)parallelusb	bluetoothhalbehhphpfaxdnssdsocketlpdscsiserialsmbnetworkc                    t           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 | _        |                     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| j!        t?          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t?          d          dggffD ]\  }}tG          j$        tJ          tJ                    }|D ]}|&                    |           |'                    |           tG          j(                    }|)                                 |*                    |d           |+                    |d d!           tF          j,        j-        }tF          j,        j.        }tF          j,        j/        }t?          d"          tG          j$        tJ                    | j0        |ft?          d#          tG          j$        tJ                    | j1        |ft?          d$          tG          j$        tJ                    | j2        |ft?          d%          tG          j$        tJ                    | j3        |ft?          d&          tG          j$        tJ          tJ                    | j4        |ft?          d'          tG          j$        tJ          tJ                    | j5        |ft?          d(          tG          j$        tJ                    | j6        |ft?          d)          tG          j$        tJ                    | j7        |ffD ]\  }	}
}}tG          j(                    }tG          j8        |	|d!*          }|'                    |
           |9                    |           |:                                ;                    |           | j<        =                    d+t|                     | j?        =                    d+t|                    | _@        | jA        B                    d           | jC        B                    d           | jD        B                    d           | jE        B                    d           d!| _F        d | _G        d | _H        | jI        }tG          j(                    }|*                    |d           |+                    |d d!           t8          jJ        r%| jK        | jL        fD ]}|M                                 t          jO        P                    d,          st          jO        P                    d-          rd.t8          _Q        d/| _R        n?t          jO        P                    d0          rd1t8          _Q        d2| _R        ndt8          _S        d3 }| jT        | jK        | jL        fD ]}|=                    d4|           | jU        | jV        | jW        | jX        fD ]}|=                    d5d6            | j2        :                                }|Y                    | jZ        d            | j2        [                    | j\        d            | j2        =                    d7| j]                   | j2        =                    d8| j^                   | j_        =                    d9| j`                   | j_        a                    d:           tG          jb        t           jc                  | _d        | je        f                    d           t          s'| je        h                    t?          d;                     | ji        '                    | jd                   tG          j8        t?          d<                    }tG          j(                    }|*                    |d           |j                    || jk        d            | ji        9                    |           tG          j8        t?          d=                    }tG          j(                    }|*                    |d           |j                    || jl        d            | ji        9                    |           | ji        :                                }|Y                    | jm        d            | j<        n                    | jo                   | j6        p                    d           | j6        =                    d>| jq                   tG          jr                    }|s                    t?          d?                     |t                    d@           |t                    dA           |t                    dB           |t                    dC           |t                    dD           | ju        v                    |           tG          jr                    }|s                    t?          dE                     |t                    dF           | ju        v                    |           dG| _w        dH| _x        | y                                 t          dI| z             d S )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                 Z    t          | dd           }||                     |           d S d S )Nprotect_active)getattr
set_active)toggle_widgetactives     r   protect_togglez.NewPrinterGUI.__init__.<locals>.protect_toggle  s<    m-=tDDF!((&11111 "!r   clickedzchange-valuec                     dS rV   r   )r^   yzs      r   <lambda>z(NewPrinterGUI.__init__.<locals>.<lambda>  s    D r   zrow-activatedzrow-expandedznotify::expandedre   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   rC   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_rerunrB   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   connectrZ   r   WaitWindow_handlerr   set_show_tabsr   r   r   spinner_countopreqopreq_handlersr   DOWNLOADABLE_ONLYFREEr   r   rW   osr0   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_signalsrh   )selfrX   optsstorer    cellr|   sbrA   r:   r9   selection_modecolumncomboboxr  slctcol
ppd_filters                      r   r  zNewPrinterGUI.__init__   s
     $'''(&*<==uu$ %#( &(#).&(-%$)!/3,%'"$*/'!"L9 L9 L9\ +')0 0 0eT1 T1l  &~m 	 V	/ V	/ V	/t -I,,+ &) &) &) &)!7+!7+!7+"H-/	0 /I,,+F))V,E((E*F))V,./ -I,,+ss%&
 -I,,+F))V,122F;0116:0116:	<=-'	3 '	3 V< M3,,E # #c""""e$$$'**DLLOOOtT***  $2222 &$$&''s););q"x[[#-,,d.A1Ey\\3=--t/?C}s}S1143FJwZZsC00$.Cx[[#-S114?1Ey\\3=--t/?B%&&c(:(:)1.6 	> 	>1D%> '))D'd;;;Fu%%%""6***""$$--n==== 	$$n6IJJJ"&/"9"9>;N#P #P 	))%000((///%%e,,,/==eDDD 
"<#%%T4(((tVQ///' 	ADF  7>>122 
	/bgnn%7' 7' 
	/#(F $)D!!W^^O,, 	/#(F $)D!! +/F'	2 	2 	2
 @=@B 	7 	7F NNI~66668;<9; 	2 	2F NNN002 2 2 2 --00  $"=tDDD//1MtTTT  /43LMMM  .$2JKKK 	$$&8&*&F	H 	H 	H))!,,, (=>>''... 	=.. 3; 1< 1< = = =##T^444  !G**--#&&e$$$d&@$GGG''--- !I,,//#&&e$$$d&BDIII''--- ..11  $":DAAA..t/DEEE((...  $2QRRR^%%
Aqrrsssw'''w'''z***z***z***&&z222^%%
Ao..///s###&&z222!$EDL!!!!!r   c                 *    t          d| z             d S )Nz-%s)rh   rm  s    r   __del__zNewPrinterGUI.__del__  s    EDL!!!!!r   c                    t          d| z             | j        r | j                                         d | _        | j        r | j                                         d | _        | j        r"| j                                         d | _        d S d S )NzDESTROY: %s)rh   r   r   r   r   rz  s    r   
do_destroyzNewPrinterGUI.do_destroy   s    MD())) 	( ((+++#'D   	)!)),,,$(D!? 	#O##&&&"DOOO	# 	#r   c                     | j         dk    r2| j                                         | j                                         | xj         dz  c_         d S )Nr   re   )rH  r   showstartrz  s    r   inc_spinner_taskzNewPrinterGUI.inc_spinner_task  sR    ""L   L!!!ar   c                     | xj         dz  c_         | j         dk    r4| j                                         | j                                         d S d S Nre   r   )rH  r   rW   stoprz  s    r   dec_spinner_taskzNewPrinterGUI.dec_spinner_task  sZ    a""L   L      #"r   c                 z    t          | dt          |          d|d           t          ||| j                  S )Nz: IPP error dialog (, )parent)rh   reprshow_IPP_Errorr   )rm  	exceptionmessages      r   r  zNewPrinterGUI.show_IPP_Error  sR    tttT9=M=M=M=M7>ww@ 	A 	A 	Ay'$:OPPPPr   c                 8   |                                 r| j                            |           n| j                            |           |j        r| j                            |           n| j                            |           |                                  d S rF   )
is_changedr!  adddiscardr"  setDataButtonState)rm  options     r   option_changedzNewPrinterGUI.option_changed   s     	)LV$$$$L  ((( 	+Nv&&&&N""6***!!!r   c                 `    | j                             t          | j                              d S rF   )r   r\  boolr"  rz  s    r   r  z NewPrinterGUI.setDataButtonState.  s,    ''D,@,@(@AAAAAr   c                    |                     dd          }|                     dd          }|                     dd          }t          | j        |          ssd}t          | j        |dz   t          |          z             s4|dz  }|dk    rn(t          | j        |dz   t          |          z             4|dt          |          z   z  }|S )z-Make a suggested queue name valid and unique.rf   -/#r   re   d   )rv   rD   rB   r8  )rm  rA   suffixs      r   makeNameUniquezNewPrinterGUI.makeNameUnique1  s    ||S#&&||S#&&||S#&&DM400 	'F!4=$*sF||2KLL !S== "4=$*sF||2KLL  C#v,,&&Dr   c                 0    |                      d           d S )Nr   )emitrz  s    r   r   zNewPrinterGUI.destroy?  s    		9r   r   c
                 h	   || _         | j         s| j                            d           || _        || _        || _        || _        || _        || _        || _	        |st          j                    | _        |st          j                    | _        i | _        t                      | _        t                      | _        d | _        d | _        d | _        d | _        |                                 st,          	 t/          j        | j        | j        | j                  | _
        n~# t          j        $ r)}
|
j        \  }t7          || j                    Y d }
~
dS d }
~
wt,          $ r t7          d| j                    Y dS t8          $ r}
t;          |
           Y d }
~
dS d }
~
ww xY w	 t=          j        | j
                  | _         n># t          j!        $ r,}
|
j        \  }
}tE          |
|| j                    Y d }
~
dS d }
~
ww xY w| j#        $                                 | j%        &                    d           | j%        '                    d           | j(        &                    d           | j)        $                                 | j*        +                                }|,                                 | j-        }|.                    t_          j0        tb          tb                               | j2        '                    d           | j3        }|'                    ti          d                     | j5        '                    d           | j6        7                    d           |	d	k    r?| j         r8| j        8                                 | j        9                    | j                    | j        d
k    r| :                                 n| j        dk    r| ;                                 n| j        dk    r| <                                 na| j        dk    r| =                                 nA| j        dk    r| >                                 n!| j        dk    r| ?                                 dS |	d	k    r!| j         r| j        9                    |           | j        @                                 | A                                 dS )NF)r  host
encryptionr  r  Tr   Search9100r   rC   classr#  printer_with_urir$  download_driver)Br  r   set_focus_on_maprk  _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_Errorro   rK   cupshelpersgetPrintersrB   IPPErrorr  r   rW   r   r\  set_textr   r   r   r%   r;  r   r9  r   r7  r8  r   r   r6  r   r   r  show_nowrc  _initialisePrinterMode_initialiseClassMode_initialiseDeviceMode_initialisePrinterWithURIMode_initialisePPDMode_initialiseDownloadDriverModer  setNPButtons)rm  rk  
device_urirA   r$  r  r  r  r  xidrz   rq  r|   r:   ru  labels                   r   initzNewPrinterGUI.initB  s   { 	;!22E:::&%

%
 	+**DJ 	5#144Duu!%	 $"((++ 		 +D4I26*8<8HJ J JDII ~ 	 	 	6DQQ,,,55555 	 	 	R---55 	 	 	q!!!55555		'3TY??DMM} 	 	 	VFQAq555555555	 	$)),,,"00$777"++R000))4000#((+++ ((**<CM344555*33R8888($$$ ))&111))$///!888!**,,,!33T[AAAy((''****((%%(((())&&))))!333..1111&&##&&&&!222..1114!888!33V<<<""$$$tsB   3+D F.E"F7	F FFF= =G8!G33G8c                 V    | j         dv r	| j        d uS | j         dk    r| j        dk    S dS )N)r  r#  r$  r  r   T)rk  r  r  rz  s    r   r  z"NewPrinterGUI._validInitParameters  s@    DDD#4//!222:##tr   c                     |                      d           | j                            t          d                     |                                  | j                            | j                   d S )Nr  z	New Class)_initialiseWidgetsForModer   	set_titler6  fillNewClassMembersr   set_current_pagePAGE_DESCRIBE_PRINTERrz  s    r   r  z"NewPrinterGUI._initialiseClassMode  sg    &&000'';888  ### 	,,d.HIIIIIr   c                 L   |                      d           | j                            t          d                     | j                            | j                   |                                  | j        	                    d           | 
                    | j                   d S )NrC   New PrinterT)r  r   r  r6  r   r  PAGE_SELECT_DEVICEfillDeviceTabr   r  on_rbtnNPFoomatic_toggledrz  s    r   r  z$NewPrinterGUI._initialisePrinterMode  s    &&	222''=)9)9::: 	,,d.EFFF&&---&&(;<<<<<r   c                     | j                             t          d                     | j                            | j                   |                     | j                   d S )NzChange Device URI)r   r  r6  r   r  r  r  r  rz  s    r   r  z#NewPrinterGUI._initialiseDeviceMode  sY    ''+>)?)?@@@,,d.EFFFD,-----r   c                    |                      d           |                                  | j                            t	          d                     | j                            | j                   | j        	                    d           | 
                    | j                   | j        	                    d           |                                  |                     d           d S )NrC   r  Tr   step)r  _initialiseDeviceFromURIr   r  r6  r   r  PAGE_SELECT_INSTALL_METHODr   r  r  r   _initialiseAutoVariables	nextNPTabrz  s    r   r  z+NewPrinterGUI._initialisePrinterWithURIMode  s    &&	222%%(((''=)9)9:::,,d.MNNN&&---&&(;<<<&114888%%(((q!!!!!r   c                     | j                             t          d                     | j                            | j                   d| _        |                     d           d S )NzDownload Printer DriverTr   r  )r   r  r6  r   r  PAGE_DOWNLOAD_DRIVERr/  r  rz  s    r   r  z+NewPrinterGUI._initialiseDownloadDriverMode  s^    ''+D)E)EFFF,,d.GHHH#q!!!!!r   c                    |                                   | j                            t          d                     | j        st          | j                            dd          d                   }|g}|dv r|                    ddg           t          j
                    | _        | j                            t          d                     |                                  t          j        | j        || j        | j        	           | j                            | j                   | j                            d
           |                     | j                   | j                            d
           |                                  d S )NzChange Driver:re   r   r   r   ippsnmpr   fetching device listinclude_schemesreply_handlererror_handlerT)r  r   r  r6  r  r8  r  splitextend	asyncconnr  r  _begin_operationr  r  
getDeviceschange_ppd_got_devsr   r  r  r   r  r  r   r  )rm  r   schemess      r   r  z NewPrinterGUI._initialisePPDMode  s}   %%(((''?););<<< z 	L$*00#q99!<==FhG111 1222%.%9%<%<D""33Q7M5N5NOOO!!$$$"D$:4;262J262JL L L L
 	,,d.MNNN&&---&&(;<<<&114888%%(((((r   c                    | j                             |                     |                     | j                                          | j        | j        | j        | j        | j        fD ]}|                    d           d S Nr   )	r   r  r  
grab_focusr   r   r   r   r   )rm  	mode_namerX   s      r   r  z'NewPrinterGUI._initialiseWidgetsForMode  s    !4!4i!@!@AAA!!$$$),~t':*, 	! 	!F OOR    		! 	!r   c                 B    i }t          j        | j        fi || _        d S rF   )r  Devicer  r#  )rm  device_dicts     r   r  z&NewPrinterGUI._initialiseDeviceFromURI  s(    !($*:JJkJJr   c                 0    d| _         d| _        d | _        d S r  )	auto_make
auto_modelauto_driverrz  s    r   r  z&NewPrinterGUI._initialiseAutoVariables  s    r   c                    | j                                          | j                                          d | _         |                                  t	          |t
                    ri }n|}d }d }| j        dk    r| j        }n6|                    | j        j	                  }|r|j
        }|j        }|| _        | j                            | j                   |                     d           d S )Nr   r   r  )r  _end_operationr   r  r\   ro   r  r(   r#  r   idmake_and_modelr   r  r  r  )rm  connr;   current_devicesr  mmr#  s          r   r  z!NewPrinterGUI.change_ppd_got_devs  s    --000&&)))!%   vy)) 	% OO$O:JEE$(($+/::F %	*$ 	,,d.MNNNa     r   c                 &   |                      |           | j        sdS |j        rd| _        t	          d           d| _        | j                                        | j        k    r| 	                    d           dS | 	                                 dS )a  
        This method is called when the PPDs loader has finished
        loading PPDs in preparation for the next screen the user will
        see, having clicked 'Forward'.  We are creating a new queue,
        and dialog_mode is either "printer" or "printer_with_uri".
        NTz-Loaded PPDs this time; try nextNPTab again...r   r  )
_getPPDs_replyr  _jockey_has_answeredr*  rh   r/  r   get_current_pager  r  )rm  r(  s     r   on_ppdsloader_finished_nextz)NewPrinterGUI.on_ppdsloader_finished_next  s     	Z(((y 	F* 	2-1D*CDDD#//22d6UUUNN1N%%%%%NNr   c                     |j                     }|rO |j                     	 |# t          j        $ r+}|j        \  }}|                     ||           Y d }~d S d }~ww xY w |j                    }|r7|| _         |j                    | _	        |j
        r |j                    | _        nd | _        d | _	         |j                     d | _        d S rF   )	get_errorr   r  r  r  r  get_ppdsr  get_ppdsmatch_resultr  r	  get_installed_filesr)  r(  )rm  r(  excrz   r|   r  s         r   r  zNewPrinterGUI._getPPDs_reply5  s   "j"%% 	J!!!	=   A##Q***
 #z"%% 	)DI$CJ$C$F$FD!. P.Lj.L.O.O+DI$(D!
s   $ A AAc                    | j                                         }|                                 | j                                        }|                                 	 t	          j        | j                  | _        n# t          j        $ r
 i | _        Y nw xY w| j        	                                D ]7}| j        |         j
        t          j        z  s|                    |f           8d S rF   )r   r%   r;  r   r  r  r  rB   r  keystypeCUPS_PRINTER_CLASSr)   )rm  r:   rC   s      r   r  z!NewPrinterGUI.fillNewClassMembersO  s     **,,#--//	'3TY??DMM} 	 	 	DMMM	 }))++ 	) 	)G=).1HH )gZ(((	) 	)s   A; ;BBc                     t          | j        | j                   | j                            t          t          | j                                       |                    d           d S NF)r3   r   r   r   r\  r  r<   rm  buttons     r   on_btnNCAddMember_clickedz'NewPrinterGUI.on_btnNCAddMember_clicked]  sc    ,d.>???%%'(899::	< 	< 	<U#####r   c                     t          | j        | j                   | j                            t          t          | j                                       |                    d           d S r  )r3   r   r   r   r\  r  r<   r  s     r   on_btnNCDelMember_clickedz'NewPrinterGUI.on_btnNCDelMember_clickedc  sc    )4+>???%%'(899::	< 	< 	<U#####r   c                     |                                 }|d S |                                \  }}| j                            |g k               d S rF   )r#   r$   r   r\  rm  rX   r-   r!   r.   s        r   on_tvNCMembers_cursor_changedz+NewPrinterGUI.on_tvNCMembers_cursor_changedi  U    ((**	F$6688
D))$"*55555r   c                     |                                 }|d S |                                \  }}| j                            |g k               d S rF   )r#   r$   r   r\  r  s        r    on_tvNCNotMembers_cursor_changedz.NewPrinterGUI.on_tvNCNotMembers_cursor_changedq  r   r   c                 \   | j         r4| j                                          d | _         |                                  | j        r | j                                         d | _        | j        r4| j                                         d | _        |                                  | j                                         | j        K| j	        D ]}| j        
                    |           d | _	        | j                                         d | _        d | _        i | _        |                     d           dS )Nr   T)r  r   r  r(  r  cancelr   rW   rI  rJ  
disconnectr#  rB   r  )rm  rX   rY   handlers       r   on_NPCancelzNewPrinterGUI.on_NPCancel{  s,   ! 	%"**---%)D"!!$$$? 	#O##&&&"DO 	%&&)))"&D!!$$$""$$$:!. 0 0
%%w////"&DJ   DJ		$%%%tr   c                 0    |                      d           d S )Nr  r  rm  rX   s     r   on_btnNPBack_clickedz"NewPrinterGUI.on_btnNPBack_clicked  s    rr   c                 .    |                                   d S rF   r)  r*  s     r   on_btnNPForward_clickedz%NewPrinterGUI.on_btnNPForward_clicked  s    r   c                 @   |                      |          }|sdS |d         }|d         }|d         }t          d          |z  }t          j        | j        ddt          j        j        t          j        j        |          | _	        | j	        
                    t          d                     | j	                                        }t          j                    }|                    |           |                                 || j	        _        | j	                            d	| j                   | j	                                         |                     |||          }	| j	        r9| j	                                         | j	                                         d | _	        |	S )
NFrA   repokeyidzInstalling driver %sT)r  modaldestroy_with_parentr  buttonsr   zInstalling ...response)_getDriverInstallationInfor6  r   MessageDialogr   MessageTypeINFOButtonsTypeCANCELr2  format_secondary_textget_message_areaProgressBarr  r  _progress_barrE  _installdialog_responseshow_alldo_installdriverpackagerW   r   )
rm  driverinstall_inforA   r/  r0  fmt
dialogareapbarrets
             r   installdriverpackagez"NewPrinterGUI.installdriverpackage  s   66?? 	5F#F#W%&''$.!/8M7;QU69o6J9<9O69	; ; ; 	1115E3F3FGGG(99;;
  t		 -1)##Z1MNNN$$''' **D$>> 	'$$'''''***"&D
r   c           
         t          dt          |          dt          |          dt          |                     t          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	                                        Z|                                                                }t#          |          dk    r|dk    rd}	n|                    d          rl	 t'          |dd                    }|dk    r|
                    |dz             n-|
                    | dz             |
                                 n4#  Y n0xY w| j                            |                    d                     t5          j                    r&t5          j                     t5          j                    &|st;          j        d           | j	                                        Z| j	        j        dk    r|	sd
}n	#  d
}Y nxY w|sg | _        |S )NzInstalling driver: z; Repo: z
; Key ID: CLC_ALLzinstall-printerdriverzRunning command: T)env	close_fdsstdinstdoutFr   done   Pre   r  rc   g?) rh   r  rL  environcopy
subprocessPopenDEVNULLPIPEprO  stderrr2  r>  pollreadlineru   lenrg   floatset_fractionset_pulse_steppulser)  r)   rn   r   rI   rJ   timesleep
returncode)rm  rA   r/  r0  new_environr  rG  rO  rY  rP  rF  line
percentages                r   rA  z%NewPrinterGUI.do_installdriverpackage  s   
$KKKK$KKKK%LLL" 	# 	# 	# joo'' #H 	9+T4?DD+T48D'$t**4555$	%t-7-?.8o? ? ?DF
 !%tv}VVD&4D&++--'))//11IIMMv~~#.. R!).tABBxJ)Q $ 1 1*S. A A A A $ 3 3ZKO D D D $

! D3::4;;w;O;OPPP(++ *&))) (++ * %J$$$+ &++--', v A%%d%	CCC 	.*,D'
s'   C
I4 A#G I4 GB/I4 4I:c                    |                     di           }t          |                                          }t          |          dk    rt	          d           d S t          |          dk    r!t	          dt          |          z             d S ||d                  }t          |          dk    rt	          d           d S t          |                                          d         }d}|                    d          r|                    d	          d         }nX|                    d
          r1d                    |                    d          dd                   }nt          d|z             d }d||         vr(t          j        r|d         dvrt	          d           d S nDt          ||         d                   }t          j        r|d         dvr|st	          d           d S ||                              di                                | j                  }|sCt	          d| j        dt          ||                              di                                d S |||dS )Npackagesr   zNo packages for driverre   zMReturned more than one matching architecture, please report this as a bug: %sz=Returned more than one package, this is currently not handledr   z.debr6  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 )rA   r/  r0  )r(   r]   r  r\  rh   r  endswithr  join
ValueErrorr4  DOWNLOADABLE_PKG_ONLYSIGNEDr}   rO  )rm  rB  pkgsarchespkgrA   r0  r/  s           r   r5  z(NewPrinterGUI._getDriverInstallationInfo   sk   zz*b))diikk""v;;!/0004v;;??fimouivivvwww4F1It99>>VWWW4499;;"<< 	=99S>>!$DD\\&!! 	=88CIIcNN1R4011DD5;<<< S	))1 fQiGX6X6X\]]]t,T#Y}-EFFE1 fQiGX6X6Xaf6X^___t Cy}}^R0044T5JKK 	J---d3immNB??@@@B C C C 4 te===r   c                 8    | j                                          d S rF   )rX  	terminaterm  dialogr4  s      r   r?  z%NewPrinterGUI._installdialog_response1  s    r   c                    | j                                         }t          d|z             d}| j        dk    s!| j        dk    s| j        dk    s| j        dk    r"|                     |          }|| j        k    rd}|st          d           d S |                                 }||                    |          |z            }d}	 |                    | j                  d	k    r|| j        k    o|d
k    }n!# t          $ r || j
        k    o|d
k    }Y nw xY wt          d|z             |r|                                 | _        d| _        | j        d S t          | j        t          j                  r|                                  n)| j        }d | _        |                                  || _        | j        s)|| j
        k    r||                    |          dz            }|| j
        k    r+| j        s$|d
k     r||                    |          dz
           }t          d|z             |d
k    r|| j        k    r|                                  |d
k    rI|| j        k    r=d }	d }
	 | j        j        r5| j        j        dvr'| j        j        d         d| j        j        d         }	n#  t3                       Y nxY w	 |	vt          | j        t          j                  rW| j                            d          j        }t8          j                            |          \  }}|r
|r|d|}	n
|s|r||}	n#  t3                       Y nxY w|	r|	}
nd}	|                     |	          }	| j         !                    |	           |
r| j"        !                    |
           | j         #                    |           | $                                 d S )NzNext clicked on page %dTrC   r  r$  r  Fz9Interrupting execution of nextNPTab(): Operations pendingr  r   zWill fetch ppd? %dre   zWill advance to page %d)r   r   r  httphttpsr   MFGrf   MDL	modelName)%r   r
  rh   rk  _handlePrinterInstallationModeINSTALL_RESULT_OPS_PENDING_getPagesOrderForDialogModeindex
PAGE_APPLYrp  PAGE_INSTALLABLE_OPTIONSgetNPPPDr$  r'  r\   r  PPDfillNPInstallableOptionsr  fillDownloadableDriversr  r#  r  r  id_dictrK   findAttrvaluer  r  ppdMakeModelSplitr  r   r  r   r  r  )rm  r  page_nr
keep_goinginstall_resultordernext_page_nr	fetch_ppdr$  rA   descrmnamemaker:   s                 r   r  zNewPrinterGUI.nextNPTab4  s\   %6688-7888
y((D,<@R,R,R%''4+;?P+P+P!@@$GGN!@@@ #
 	STTTF0033U[[11$67 		T{{DO,,r11(DO;I		 	T 	T 	T$(EES$RS)III	T 	(94555 	F}}DH',D$x $(DH-- --//// h--///+ F4#@@@#(\)B)B1)D#EL 4888, 915 \!:!:1!<=L-<===199)BBB((+++199)CCCDE%KN B( -K K K&*k&9%&@&@&@&*k&9%&@&@BD%!$$$$$	%<J$($C$C< H--{;;AE"-"2"D"De"L"LKD% 6 6*.$$6 6 6)-uu5%!$$$$$ ! &&--DN##T*** 7%..666,,\:::s,   /C4 4DD$AJ& &J8<A8L5 5Mc                    g }| j         dk    r| j        | j        | j        g}n$| j         dk    r
| j        g}n| j         dk    rJ| j        r| j        | j        g}n| j        rd| j        	                                sK| j
        r| j        | j        | j        | j        g}n| j        | j        | j        | j        | j        | j        g}n| j
        r/| j        	                                s| j        | j        | j        g}nK| j        	                                r"| j        | j        | j        | j        | j        g}n| j        	                                r| j        | j        | j        | j        g}n| j        | j        | j        | j        | j        g}n| j         dk    r| j        	                                r| j        | j        | j        | j        g}ny| j        	                                r| j        | j        | j        g}nJ| j        | j        | j        | j        g}n.| j         dk    r
| j        g}n| j        r
| j        g}n| j        rV| j        	                                s=| j
        r| j        | j        | j        g}n| j        | j        | j        | j        | j        g}n| j
        r(| j        	                                s| j        | j        g}n|| j        	                                r| j        | j        | j        | j        g}nH| j        	                                r| j        | j        | j        g}n| j        | j        | j        | j        g}|S )Nr  r  rC   r$  r#  )rk  r  PAGE_CHOOSE_CLASS_MEMBERSr  r  r%  r  r+  r   
get_activer&  r  r  PAGE_CHOOSE_DRIVER_FROM_DBr   r   )rm  r  s     r   r  z)NewPrinterGUI._getPagesOrderForDialogMode  s   w&&*.EE
 !222)EE **# 5+. / 09DDFF0( /152	EE /17752EE ' 9DDFF +1.
 $//11 +331. **,, +31.	 +3-1. &&"--// 33O1	 **,, 3O1 3-O1	 ))'EE # .. / *9DDFF*( 152EE 17752EE ' 9DDFF 1. $//11 331.	 **,, 31. 3-1.	 r   c                    t          | j                   | j                                        }| j                                        }| j        }|| j        k    s|| j        k    r|dk    s|| j        k    s|| j        k    r|dk    r|                     ||          }|| j	        k    r| j
        j        s	 | j                                                                        \  }}|                    |d          d         }|                     |          }| j                            |           n#  t'                       Y nxY wt)          | j                   |S r5   )rT   r   r   r
  INSTALL_RESULT_DONEr  r  r  _handlePrinterInstallationStager  r#  r  r   r#   get_selectedr(   r  r   r  rK   rO   )rm  r  r  r;   r:   r1   rA   s          r   r  z,NewPrinterGUI._handlePrinterInstallationMode(  s[   d#$$$%6699%6699 )000222q888222		 997DIIFd555;> ))"&/"?"?"B"B".,//  E4 99T1--a0D..55DN++T2222)%(((((t$%%%s   4A9D. .E c                    | j         dk    ra| j        j        }|rS|                    d          r>t	          |dd                                                    }|                                  || j        k    s|| j        k    r| 	                    |           n*|| j
        k    r| j        dk    r|                                  d }| j        r| j         dk    rS| j         dk    r| j        j        }|s| j        }|sd }| j        (| j         dk    r|                     ||           | j        S d| _        || j        k    s|| j        k    r|                                  |                     |||          S )Nr  r   r   r   Fr$  )rk  r#  r   rg   r   sanitize_uri_installSMBBackendIfNeededr  r  _selectDeviceForInstallationr  r/  _handleDriverInstallationr%  r  r  r  _loadPPDsForDevicer  _installHPScannerFilesIfNeeded_installPrinterFromDeviceID)rm  r  r  r   r  s        r   r  z-NewPrinterGUI._handlePrinterInstallationStageK  s   000+/C 3s~~u-- 3#abb'***77:://222d---D<[1[1[--s3333111d6Je6S6S**---# 	7t'75'@'@#444 #
 y T%59J%J%J''444 66$d---D<[1[1[//222//FFFr   c                 P   | j         dk    r| j        s| j        dk    s| j        d         dk    rwt          j        dt          j                  sVt          d           	 t          j                    }|	                    ddd           d S #  t                       Y d S xY wd S d S d S d S )NF	localhostr   r  z/usr/lib/cups/backend/smbz$No smb backend so attempting install	smbclient)r/  r*  r  rL  accessF_OKrh   installpackage
PackageKitInstallPackageNamerK   rm  pks     r   r  z(NewPrinterGUI._installSMBBackendIfNeededm  s     E))$2P)
k))TZ]c-A-A9927CC .B>???%#.11%%q![99999%!$$$$$$ *)))-A-A-A-As   *B
 
Bc                    |                                   |                                 | j        _        | j        r4| j                                         d | _        |                                  | j        r4| j                                         d | _        |                                  | j        j	        s"| j        j
        dv r|                                  d | _        t          j        d|          }|rf|                                }t!          |d                   dk    rt#          |d         dd                    }nd}	 t%          d           t&          j                            |d         |          }|                    dd|d	         z             |                                }|j        d
k    r|d	         | _        |                                }t5          j                    5 }|                    |           |                                 	 t=          j        |j                   }	n)# t<          j!        tD          f$ r tG          d          w xY w	 d d d            n# 1 swxY w Y   n#  Y nxY w	 t<          j$        }
t=          j%        |d         ||
          }ddg}|&                    ||          }|'                    dd          }|'                    dd          }t!          |          dk    r| j(        )                    |           t!          |          dk    r|| j        _*        d S d S # tD          $ r Y d S  tW                       Y d S xY w|,                    d          s|,                    d          r:|-                    d          dk    r| j        j.        r| j        j.        | _        d S d S d S d S )Nr  z"ipp://(\S+?)(:\d+|)/printers/(\S+)re   r   iw  z$Download ppd file from remote serverGETz/printers/%s.ppdr   rb   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%  rp   rs   groupsr\  intrh   rz  clientHTTPConnectionri   getresponserl   rm   tempfileNamedTemporaryFilewriteflushr  r  rA   r  r  IOErrorHTTP_ENCRYPT_IF_REQUESTEDr  getPrinterAttributesr(   r   r  locationrK   rg   findinfo)rm  r   resresgr  r  ry   
ppdcontenttmpfr$  r  crattrsr  r  s                   r   r  z*NewPrinterGUI._selectDeviceForInstallationz  s)   %%(((++.. ! 	%"**---%)D"!!$$$ 	%&&)))"&D!!$$$ 	/K 888 ++...  $i>DD 3	4::<<DDG}}q  DGABBK((ABBB{11$q'4@@U$6a$@AAA''));#%%+/7D(!YY[[
033 ItJJz***JJLLLI"hty11 M<8 I I I%&GHHHI 	I I I I I I I I I I I I I I I
%!;
O$q'*.0:< < < $%78..CEF / H Hyy."55 99&8"==::>>)22D999>>A%%+3DK((( &%   %!$$$$$$~~x(( 	4CNN7,C,C 	4'""b((T[-=(#';#3D    )(	4 	4((s\   B'I2 +*I&H0/I&0&II&I2 &I**I2 -I*.I2 2I6:B<L: :
MMc                    | j         }|                                                                \  }}d }||                    |d          }|
|dk    sd|vrd S |                     |          }|rt          | j                  dk    rd S d | _        | j        dk    rB| j	        j
        s8| j	        j        r| j	        j        dk    r | j        r| j        | j	        _        d S d S d S d S d S Nre   r   rh  r  Unknownr   r#   r  	get_valuerH  r\  r)  r  rk  r#  r  r  r-  )rm  r9   r:   r1   rB  r;   s         r   r  z'NewPrinterGUI._handleDriverInstallation  s   /,,//<<??t__dA..F>Vq[[Jf,D,DF **F33 	T899Q>>
& 	 111;> 2;- 2151Ky1X1X2 2Y)-)MDK&&&	 21111X1X1X1Xr   c                 X   t          | j        d          r| j        j        rt          j        dt          j                  sgt          j        dt          j                  sJt          d           	 t          j                    }|	                    ddd           d S #  Y d S xY wd S d S d S d S )Nhp_scannablez/etc/sane.d/dll.d/hpaioz/etc/sane.d/dll.d/hplipz+No HPLIP sane backend so attempting installr   zlibsane-hpaio)
hasattrr#  r  rL  r  R_OKrh   r  r  r  r  s     r   r  z,NewPrinterGUI._installHPScannerFilesIfNeeded  s    T[.11 
	dk6N 
	I8"'BB
	I8"'BB
	  - . . .#.11%%q!_=====
	 
	 
	 
	 
	 
	 
	 
	s   0*B B!c                     t          d           t          j        ||| j        | j        | j                  }|| _        |                    d| j                   |                                 d S )NznextNPTab: need PPDs loaded)	device_idr  r  r  r  finished)	rh   r(  
PPDsLoaderr   r  r  rE  r  run)rm  r  r   rX  s       r   r  z NewPrinterGUI._loadPPDsForDevice  sr    1222!U.1*.*?(,
.2.>	@ @ @
 			:d>???	r   c                 2   d }g | _         	 | j        dk    rd}d}n3| j        rJ| j        	d}|| _        | j        }|                     |          }| j                            |           d}n| j        j        s| j        j	        r| j        j	        dk    s|rg| j        j        r| j        j
        }nj|rt          j        |          }nSi }t          j                            | j        j	                  \  |d<   |d<   d	|d
<   g |d<   d|d         d|d         d}| j                            |d         |d         |d
         |d         | j        j        | j        j	                  }t#          dt%          |          z             | j                            t)          |                                          | j        ||          }	t#          dt%          |	          z             |	| _         |	d         }||         }nP| j        dk    r | j        r| j                            d          }
|
s| j                            d          }
|
r|
j        r|
j        }|                    d          r
|d d         }t          j                            |          }|\  }}| j                            ||          }|                                D ]/\  }}t;          |                    d                    |k    r|} n0|rd}nPd}|| _        d}nD| j        dk    rd}|| _        d}n-| j                            dddg | j        j                  \  }}d}n#  tA                       Y nxY w|r+| j        r| j        dk    r| !                    |||||          S | j"        S )Nr  downloadgenericrawexactr  r|  r}  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_ppdnamesrk  r%  r$  r  r   r  r#  r  r  r  r  parseDeviceIDr  r  getPPDNamesFromDeviceIDr   rh   r  orderPPDNamesByPreferencer]   r  r)  r  r  r  rn  getInfoFromModelitemsr_   r(   getPPDNameFromDeviceIDrK    _installPrinterOrSearchForDriverr  )rm  r  r  r  ppdnamerl   rA   r  r  ppdnamelistattrr  mfgmdlr  r:   r  r$  r  s                     r   r  z)NewPrinterGUI._installPrinterFromDeviceID  s$   #% Y	!#444$"% S# 8##G&DH+**D11''... +. I#;-I#;-:: ;;> @"k1GG 
@)7??GG G'2'7**DK,FGG%WU^U^%'GEN%'GENN0707@E i++WU^-4U^-4U^-4U^-1[_-1[-GI I  5S		ABBB"i--tCHHKK/@/@/3/J5<# . G G  84;L;LLMMM+6(%a.W"e+++}--j99 ?=11+>>D "DJ " JE~~'788 , %dsd(-??GGF$*MT5  955tUCCD%)ZZ]] " "	T&(+-A(B(BD D!" " '*G!E	"
  '$FF#G&DH&FF!U**" $(I**I,5,=,.,0KO	= = " #	!      	a%	a)-)9U)B)B88%&RY[_``` ''s   MM M"c                 D   	 |dk    r|| j                             |          }t          |d                   }t          j                             |          \  }}	|| _        |	| _        || _        |                     ||	           |dk    s|dk    r!| j	        dk    rd| _
        |dk    r| j        }nd| _
        | j	        dk    r| j        dk    ry|rvt          |          dk    rb|                    d	          dk    sH|                    d
          dk    s.|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    st          d           t          d|z             d| _        d| _        t#          d          }
t%          j        | j        ddt$          j        j        t$          j        j        |
          | _        | j                            t#          d                     t7                      | _        | j                            d| j                   | j                                         g | _         | j         !                    | j                            d| j"                             | j         !                    | j                            d| j#                             d| _$        | j        %                    |           | j&        S n#  tO                       Y nxY w| j	        dk    s| j	        dk    r&| j(        s|| j)        k    r| *                                 | j+        S )Nr  r  r  z	exact-cmdr$  Tr   FzMFG:generic;zMFG:Generic;zMFG:unknownzMFG:UnknownzMDL:unknownzMDL:UnknownzMFG:;zMDL:;z7nextNPTab: No exact driver match, querying OpenPrintingznextNPTab: Searching for "%s"	Searchingr  r1  r2  message_typer3  r   zSearching for driversr4  r  errorr  ),r  getInfoFromPPDNamer_   r  r  r  r  r  fillDriverListrk  r&  r  r*  r\  r  rh   _searchdialog_canceledr6  r   r6  r   r7  r8  r9  r:  r1  r;  r   rI  rE  _searchdialog_responser@  rJ  r)   opreq_id_search_doneopreq_id_search_erroropreq_user_searchsearchPrintersr  rK   r%  r  fillMakeListr  )rm  r  r  rl   r  r  ppddict
make_modelr  r:   rD  s              r   r  z.NewPrinterGUI._installPrinterOrSearchForDrivera  s   D	!*$$)66@@'1E)FGG
$66
CC u!%"'#* ##D%0007""f&;&; E))(,%199";G(-%$--2e;; <!%jj1nnN33q88N33q88M22a77M22a77M22a77M22a77G,,11G,,11  YZZZ ?% GHHH59D227D/K..C),):#4",0%(_%9 # 6 *" *" *"D& &<<1224 4 4 "5!7!7DJ&.."D$?A A A&//222*,D''..
**& 57 78 8 8 '..
**# 68 89 9 9 .3D*J--u555  ::	!     %%!%666) 7.59R.R.R ''s   MM
 
Mc                 $   | j                             d           | j                            t	          d                     g | _        d| _        d| _        d| _        t          | j
                   t          j        | j        j                   d S NTr  F)r   r\  r   r  r6  r)  r*  r+  r,  rO   r   r   idle_addrI  r$  rw  s      r   r  z$NewPrinterGUI._searchdialog_response  s     	*88$???0991X;;GGG&(#)-&(-%$)!t$%%% 	tz()))))r   c                 :   | j         D ]}|                    |           t          j                     	 d| _        d | _         d | _        | j                                         | j                                         d | _        t          |          dk     rSt          | j                   d| _        | j        dk    r|                     d            n|                                  n|| _        || _        d| _        	 | j                                         |                                  |                                 sQt          | j                   d| _        | j        dk    r|                     d            nK|                                  n6| j        dk    r|                     d           n|                                  n)#  t+                       |                                  Y nxY wt          j                     d S # t          j                     w xY w)NFre   r  Tr   r  )rJ  r%  r   threads_enterr  rI  r1  rW   r   r\  rO   r   r+  rk  r'  r  r.  downloadable_driversr  r  r  rK   threads_leave)rm  rI  rB   driversr&  s        r   r  z"NewPrinterGUI.opreq_id_search_done  s%   * 	' 	'Gg&&&&,	!%*D""&DDJ##&&&&&)))!%D H~~!!t,---05-#'888$$T****NN%%%%-5*,3)04-&)..000%%'''7799 .t45558=5+/@@@ ,,T2222 NN----+/@@@ NN1N5555 NN---&%(((NN%%%%%      C    s%   C	H >CG H $G-+H Hc                     t          d|t          |          fz             |                     |t                      t	                                 d S Nz$OpenPrinting request failed (%d): %s)rh   r  r  r]   dictrm  rI  rl   errs       r   r  z#NewPrinterGUI.opreq_id_search_error  sW    :f>BCjj>J J 	K 	K 	K!!5$&&$&&99999r   c                    | j         }|                                                                \  }}d }||                    |d          }|
|dk    sd|vrd S |                     |          rt          | j                  dk    rd S d | _        | j        dk    rB| j	        j
        s8| j	        j        r| j	        j        dk    r | j        r| j        | j	        _        d S d S d S d S d S r  r  )rm  r9   r:   r1   rB  s        r   &_installSelectedDriverFromOpenPrintingz4NewPrinterGUI._installSelectedDriverFromOpenPrinting  s'   /,,//<<??t__dA..FNfkkZv-E-EF ((&11 	D/00A55F 	000KN 9[/9+ 4 8 *** 109 9   r   c                    | j                                         }| j        dk    r| j                                         | j                                         | j                                         	 |                                 }t          |          }n# t          $ r d}Y nw xY w| j                            |           d S | j        dk    r.|| j        k    r}| j        sBt          d           | j                                         | j                                         n2| j                                         | j                                         d S || j        k    r4| j                                         | j                                         d S | j                                         | j                                         || j        k    r| j                                         | j                                         d}| j                                        rG| j        }|                                }|r*|                                                    |d          rd}| j                            t/          | j                                        r!| j                                        d         d up| j                                        p|                     d S | j                                         | j        dk    r{| j                                         | j                                         | j                                         |                                 }| j                            |           d S || j        k    rpd}	 |                                 }t          |          }n#  t?                       Y nxY w| j                            |           | j                                         n| j                                         | j                                         | j                                         || j         k    r| j                                         | j        d	k    s| j        d
k    rv| j                                         | j                                         | j                            tC          | j"        | j#        $                                                     | j        dk    r| j                                         | j        d
k    r.| j%        s| j&        r | j        s| j                                         || j        k    rd}| j                                        rG| j        }|                                }|r*|                                                    |d          rd}| j                            t/          | j                                        p| j                                        p|                     | j        d
k    r| j                                         || j'        k    rU| j(        )                                *                                \  }}| j                            t/          |                     || j+        k    rk| j                                         | j                                         | j                            t/          tY          | j-                                       || j        k    r+| j        d
k    r | j&        r| j                                         || j.        k    r0|                                 }| j                            |           d S d S )Nr#  Fr$  zNo installable optionsre   Tr   r  rC   r  r  )/r   r
  rk  r   rW   r   r   r  r  r   AttributeErrorr\  r  r'  rh   r  r  r   r  r   get_active_iterr%   r  r  r   r   
get_cursorr   get_filename_is_driver_license_acceptedr  rK   r  rD   rB   r   get_textr%  r&  r  r   r#   r  r  r<   r   r  )	rm  nrr   validdownloadable_selectedru  r1   acceptedr:   s	            r   r  zNewPrinterGUI.setNPButtons  sc    1133x''N!!!""$$$O  """''**&,,!    O))5111Fu$$T_$$/ ,  8999%**---O((++++%**---O((+++t444!&&((($$&&&!&&((($$&&&T444##%%%!&&((((-%6AADD 5#HH#3366D 5 2 2 5 5 ? ?q I I 504-!//,7799 D2244Q7tC.+88::. .	1/ 1/ 0 0 0
 ##%%%000N!!!""$$$O  """7799HO))(333F (((E%''**&,,%!$$$$$++E222N""""N!!!   +++N!!!9,,$(:::!&&((($$&&&--t~/F/F/H/HIIK K K7** ##&&&#555) 6/ 6 #'": 6 ##&&&000$)!2==@@ 1D//22 1H..11;;T1EE 1,0)++D#..00 &#0022&%-' -' ( ( ( #555##%%%000*88::GGIIKE4++DJJ777///""$$$O  """O))+D,<==>>@ @ @...#555) 6##&&&***7799H++H55555 +*s   1#B B$#B$#N5 5Oc                 D   | j                                         }|| j        k    r| j                                        S | j        }|                                                                \  }}|s.|                                \  }}|r|	                    |          }|d uS rF   )
r   r
  r  r   r  r   r#   r  r  r'   )rm  current_pager9   r:   r1   r0   rt  s          r   r  z)NewPrinterGUI._is_driver_license_accepted  s    >OOQQ42220;;>>>/,,//<<??t 	-#..00LD& -~~t,,4r   c                    |                                 }|}|                    dd          }|                    dd          }|                    dd          }||k    r|                    |           | j        dk    r/| j                            t          | j        |                     d S | j                            t          | j        |                     d S )Nr  r   r  rf   rC   )	r   rv   r  rk  r   r\  rD   rB   r   )rm  rX   r   new_texts       r   on_entNPName_changedz"NewPrinterGUI.on_entNPName_changed  s      ##C,,##C,,##C,,>>OOH%%%y((O))DM8446 6 6 6 6 ++DM8446 6 6 6 6r   c                     t          d                                             g d} j        }|dk    r% fd}t          j         j        |||           d S  fd}t          j         j        |||           d S )NfetchDevices)r   r  
driverlessbjnpr   Fc                 2                         | |          S rF   )local_devices_replyr^   r  current_urirm  s     r   r  z,NewPrinterGUI.fetchDevices.<locals>.<lambda>  s$    !%!9!91a;F"H "H r   )exclude_schemesr  r  c                 2                         | |          S rF   )network_devices_replyr0  s     r   r  z,NewPrinterGUI.fetchDevices.<locals>.<lambda>  s$    !%!;!;Q=H"J "J r   r  )rh   r  error_getting_devicesr  r  r  )rm  r   r1  network_schemesr  r  s   ` `   r   r+  zNewPrinterGUI.fetchDevices  s    N###    ONN2eH H H H HM "D$:4C2?2?A A A A A A
J J J J JM "D$:4C2?2?A A A A A Ar   c                     t          dt          |          z             |                                  | j                                         | j                                         d | _        d S )NzError fetching devices: %s)rh   r  r  r  r  r   )rm  r  r  s      r   r5  z#NewPrinterGUI.error_getting_devices  sf    04::=>>>   --000&&)))!%r   c                     |                                   |                     d|           |                     ||           d S )NTr   r1  )r  r+  add_devices)rm  r  r;   r1  s       r   r/  z!NewPrinterGUI.local_devices_reply  sM        	4[AAA 	&+.....r   c                 N     j                                           j                                          d  _         d}i }|                                D ]!\  }}|                    d          r|||<   d}"|                                D ]}||=                      ||           t          |          dk    rBt          j	        |          } 
                                 |                     fd                                                                               d S )NTzdnssd://Fno_morer   c                 0                         |           S rF   )dnssd_resolve_reply)devicesr1  rm  s    r   r  z5NewPrinterGUI.network_devices_reply.<locals>.<lambda>  s"    "&":":K<C#E #E r   r  )r  r  r   r  rg   r  r:  r\  dnssdresolveDNSSDHostNamesResolverr  resolver  check_firewall)	rm  r  r;   r1  r=  need_resolvingr   r#  resolvers	   `  `     r   r4  z#NewPrinterGUI.network_devices_reply  s]   --000&&)))!% !<<?? 	  	 KC~~z**  &,s#!&&)) 	 	Cs&+w???!###:NKKH!!$$$ -E -E -E -E -E F F F 	   r   c                     |                      ||d           |                                  |                                  d S )NTr<  )r:  r  rE  )rm  r1  r@  s      r   r?  z!NewPrinterGUI.dnssd_resolve_reply  sG    ';===   r   c                    t           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                  }|	                                \  }}n#  Y d S xY wd}|
                                                    d          D ]o}|                    d          dk    rt          j        d|          }	|	r4|	                                }
	 t!          |
d                   }n	#  d}Y nxY w|dk    r np|dk    rd S |dk    rdS dS )NrJ  rK  r   DISPLAYzhp-infoz-xz-i-drd   T)rL  rM  rN  rO  rY  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;)rL  rR  rS  rh   r  rT  rU  rV  rW  communicatern   r  r  rp   rs   r  r  )rm  faxurird  r  rX  rO  rY  faxtypere  r  r  s              r   get_hpfax_device_idz!NewPrinterGUI.get_hpfax_device_id  sz   joo'' #H!#I4tf}5FTMDJJ.///	 $K4(2(:)3)3: : :A  !}}//VVV	44MM$$**D11 	 	Dyy*%%++)Xt,,C !zz||!!$q'llGG! GGG!|| a<<4\\33//s   AB% %B*D44D:c                    dddd|g}t          |dz   t          |          z              	 t          j        |dt          j        t          j        t          j                  }|                                \  }}|j        dk    rd S n#  Y d S xY w|                                	                                }|
                    d	d
          }t          |          dk     rd S |d
         }|dk    rd S |S )Nzhp-queryz-kz	scan-typerK  rd   TrM  rN  rO  rY  r   =re   r   0)rh   r  rT  rU  rV  rW  rM  rc  rn   ru   r  r\  )	rm  r   r  rX  rO  rY  	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  t !	44MM$$**--	#q))<<!4q	C<<4s   AB B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        d	k    rd S n#  Y d S xY w|                                	                                }|S )
Nprintz-cfaxz-fz
hp-makeurird   TrR  r   )
rh   r  rT  rU  rV  rW  rM  rc  rn   ru   )	rm  r  modemodr  r   rX  rO  rY  s	            r   !get_hplip_uri_for_network_printerz/NewPrinterGUI.get_hplip_uri_for_network_printer@  s    7??$CCU]]$CCcc4(D4K$t**,---
	 $$(2(:)3)3: : :A  !}}//VV|q  t !	44mm$$''
s   AB B c           	         d}|| j         }||j                            d          }|dk    r|dz  }|j        |d                             d          }|dk    r"|j        |d                             d          }|dk    r"|j        |d                             d          }|dk    rt          |j                  }|j        |||z            }|rd|g}t	          |d	z   t          |          z              d}	 t          j        |d
t          j        t          j	        t          j	                  }|
                                \  }}	|j        dk    rd}n#  Y nxY w|	 |                    d                                          }
n9# t          $ r, |                    dd                                          }
Y nw xY wt          j        |
          }t          |          }|dk     r$|                    g d           |dd         }d}n|dk    r|dd         }d}|dk    r
|\  }}}}}}n|dk    r	|\  }}}}}n|dk    r|\  }}}}|dk    rFt	          d           t$          j                            |          \  }}d|d|d|d|d	|_        nt	          d|z             ||_        t%          j        |j                  |_        ||_        ||_        |dk    r||_        ||fS )z
        Try to determine the make and model for the currently selected
        network printer, and store this in the data structure for the
        printer.
        Returns (hostname or None, uri or None).
        N://r  r   r  r  ?z/usr/lib/cups/backend/snmprd   TrR  r   rc   z
iso-8859-1ignore)encodingerrorsr   )r   r   r   r   r   r   zNo Device ID from snmp backendr  r  z;DES:rf   r  zGot Device ID: %s)r#  r   r  r\  rh   r  rT  rU  rV  rW  rM  rc  rn   ru   UnicodeDecodeErrorprobe_printerwordsepr  r  r  r  r  r  r  r  r  r  )rm  r  r#  r   rq  rz   r  rO  rX  rY  re  wordsndevice_classr  r  r  device_locationmkmds                       r   r  z(NewPrinterGUI.getNetworkPrinterMakeModelV  sV    >[F<
''ABwwQJqrrN''--77
122 3 3S 9 9A77
122 3 3S 9 9A77VZ 0 0Az!AaC%( :	60$7Dtd4jj0111F
$dd,6,>-7_-7_> > > $%==#3#3 <1$$!F![!=='2288;;DD) [ [ [ "==<=QQWWZZDDD[ &-t44KKq55LL---000!"1"IEAAUU!"1"IEA669>7\39oo!VV(-&\399!VV@E=\366  @AAA*/))>:: R>@bb""">@bb"""!FFII  3i ?@@@ )FI!,!:FI!F!F(6%"66&5FOc{s   =AE E$'F 3GGc                    d| _         t          j        t          t          j        t                    }t          j        di dt          d          i}t          |          }|g| _        |                    d |                                |dg          }|                    d t          d          d dg          }dt          d	          d
}t          j        di |}|                    ||d         t          |          dg          }	|                    ||	g d           dt          d          d
}
t          j        di |
}|                    ||
d         t          |          dg          }|                    |	|g d           || _        |	| _        || _        d| _        | j                            |           | j                            d           | j                                         | j                            d          }| j                            t          j                    |d           || _        d | _        t=          d           |                                  d S )Nr  r   device-infoz	Enter URIFr    zNetwork Printerr   zFind Network Printer)device-classrn  )r   NTWindows Printer via SAMBAr   r   zFetching devices)r   r   )r   ) rj  r   rY  r8  r   rZ  r  r  r  r6  r   r@  r)   get_infoinsert_afterdevices_uri_iterdevices_find_nw_iterdevices_network_iterdevices_network_fetchedr   r9  r   r  r   rW   
get_columnrH   TreePathr1  firewallrh   start_fetching_devices)rm  r1  r:   other	physotheruri_iternetwork_iternetwork_dictr   find_nw_itersmbdev_dictsmbdevfind_smb_iterrt  s                 r   r  zNewPrinterGUI.fillDeviceTab  s   !s&4#% % "II-;)HII"E**	!{<<I,>,>,A,A,5u,>< ? ?||T2C0D0D040507| 8 8 *3()*@(A(AD D$@@<@@||\*6}*E*8'*B*BE*K $ L L 	L,<L<L<LMMM(1'()D'E'EH H#::k::l*5m*D*8&*A*A5*J % K K 	L-=M=M=MNNN ($0!$0!',$""E***""B'''!!$$$!,,a00##S\^^VUCCC&&'''##&&&&&r   c           
         | j         }d}	 |                                }|                                }|o|}t          dz   }|s7|dt	          d          z   dz   z  }|                    t          j                   |s7|dt	          d          z   dz   z  }|                    t          j                   |st          d|z             t          j        | j        ddt          j        j        t          j        j        t	          d          	          }|                    |           |                    t	          d
          t          j        j        t	          d          t          j        j                   |                    d| j                   |                                 n*# t2          j        t6          f$ r t9                       Y nw xY w|rt          d           d S d S )NT

- z%Allow all incoming IPP Browse packetsrL  zAllow all incoming mDNS trafficz,Asking for permission to adjust firewall:
%sAdjust Firewallr  Do It Laterr4  z"Firewall all OK, no changes needed)r{  check_ipp_client_allowedcheck_mdns_allowedTEXT_adjust_firewallr6  add_servicefirewallsettingsIPP_CLIENT_SERVICEMDNS_SERVICErh   r   r6  r   r7  QUESTIONr9  NONEformat_secondary_markupadd_buttonsResponseTypeNOYESrE  adjust_firewall_responser  dbusDBusExceptionro   rK   )rm  datafallowedipp_allowedmdns_allowedsecondary_textrx  s           r   on_firewall_readzNewPrinterGUI.on_firewall_read  s   M	!4477K//22L"3|G1F:N D4#$%L#M#M$N#'$( ) /BCCC >4#$%F#G#G$HJN$O P/<=== K*+ , , ,*43H26D9<9Q47O4H234E2F2F	H H H
 ..???""Am$4$4c6F6I$%&7$8$8#:J:NP P P
D,IJJJ"I. 	! 	! 	!     	!  	><=====	> 	>s   FF& &$GGc                    |                                  |t          j        j        k    rX| j                                        }|s$| j                            t          j                   | j        	                                 t          d           t          j                    | _        | j                            t          d                     |                     d           d S )Nz7Fetching network devices after firewall dialog responser  Trr  )r   r   r  r  r{  check_ipp_server_allowedr  r  IPP_SERVER_SERVICEr  rh   r  r  r  r  r6  r+  )rm  rx  r4  ipp_server_alloweds       r   r  z&NewPrinterGUI.adjust_firewall_response  s    s'+++!%!G!G!J!J% P))+;+NOOOM"""MNNN!*!5!8!8//3I1J1JKKK4(((((r   c                     t          j                    | _        | j                            t	          d                     |                     d| j                   | `d S )Nr  Fr9  )r  r  r  r  r6  r+  r1  rz  s    r   r|  z$NewPrinterGUI.start_fetching_devices	  s[    !*!5!8!8//3I1J1JKKK5d6FGGGr   c           
         |r~||v r|                     |          }nd|                    dd          |v r,|                    dd          }|                     |          }n |rt          j        |          }d|_        nd }t          |                                          }|D ]-}|j        dk    r |j                            dd          |_        .d }t          t          ||                    }t          t          |          dz
            D ]}t          |dz   t          |                    D ]}||         }	||         }
|	j        dk    s|
j        dk    r)|	j        |
j        k    rW|	j        sd|	_        H|
j        sd|
_        Wt          |	j                  t          |
j                  k     rd|	_        d|
_        d |D             }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                            |          }t          d|z             | j        |                             |           t          dt%          |          |t%          | j        |                   fz             t          d           .# t,          $ rR | j                            |           |                    |           t          dt%          |          z             Y w xY w| j                                         |rt#          |          }	 | j                            |          }| j        |                             |           | j        |         }nA# t,          $ r2 | j                            |           |                    |           Y nw xY wd }| j                                        }| j        }| j        }|D ]J}d }	 | j                            |          }| j        |         }n/# t,          $ r" t          dt%          |          z             Y Yw xY w|                                }|d         j        dk    }|                                }||k    r|tA          d          z  }||dg}|r|d         j        |d         j        k    rO|!                    |||          }||k    r0|"                    |          }| j        #                    |d           n|                    ||          }n|"                    |          }|$                                }|"                    |          |k    rK|%                    |d          }||k    rn.|&                    |          }|"                    |          |k    K|!                    d ||          }||k    rg|"                    |          }| j        '                    |d           | j        (                    d          }| j        )                    ||d           Ld}|rv| j*                                        }|$                                }d}|rC|%                    |d          }||j        k    r|}d S |&                    |          }|dz  }|Ad S d S | j+        s| j        (                    d          }| j        )                    tY          j-                    |d           | j*        (                    d          }| j*        )                    ||d           d S d S )Nz:9100r   zCurrent devicer   c                 P    | j         dk    rd| _         n| 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!	  s3    z222!

777$
Mr   re   deletec                 $    g | ]}|j         d v|S ))	r   r   r   r   r   r   rz  r-  r  r  r   r^   s     r   r"   z-NewPrinterGUI.add_devices.<locals>.<listcomp>;	  s@     B B B 7A *A *A1 *A *A *A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)Fro        ?)	row_align).poprv   r  r  r  r]   r?   r  r   mapranger\  r  rh   r  r  r  r   r  r@  r  
add_devicerp  r)   r8   r   r%   rw  rv  get_devicesri  rs  r6  insert_beforer&   
expand_rowr6   r  r7   scroll_to_cellry  rH   r   rj  r   rz  )rm  r@  r1  r=  currentr#  r  ijdevice1device2
newdevicesphysicaldevicecurrent_devicer:   r  r  	newdevicedevsr   r  r    r1   network_pathphysdevdevice_select_pathrt  connection_select_pathdevs                                r   r:  zNewPrinterGUI.add_devices	  sN    
	#g%%!++k22$$gr22g==)117B??!++k22 #%,k::/"w~~''(( 	> 	>F{h&&#Z//"==
	 	 	 sOW5566 W)** 	/ 	/AAE3==11 / /!!*!!*;(**gkX.E.E;'+--#J /&.%j /&.wz**S'*-=-===&.&./B Bg B B B 
 	g 	gF2VZ?@@@++ D1FNBCCC,, G3foEFFF+V44N7$~:N:NNOOO
gL&&77G!KLLLQ**F333Y!.111d4<?6K6KLM N N N01111 g g g##^444!!>222NQUVdQeQeefffffg
 	 
	"+W55N3L&&77Q**G444!%a 3 3 3##^444!!>222223 "N **--00# 0	P 0	PIFL&&	22a   n	??+ , , , %%((D1g*i7G??%%D'','vu%C A7;$q',.. ..l47 / 9 9D //',~~|'D'D(33\5III !<<3<??DD  %~~|<<++..nnd++|;;#ootQ77G'' ??D11D nnd++|;; **D$C*@@''%*^^T%:%:" //1C;> 0 @ @ @)44a88 ++-?OOO!" 	S'1144E''**DA ootQ//#'))-.*E--Q       % 	S%00!44F''GGG (33Q77F**,BFERRRRR	S 	Ss9   ,BLAMMAO 9PP'Q--)RRc                    t           rdS t          d           	 t          j                    }|                    ddd           nI# t
          $ r<}t          d           t          d                    |                     Y d }~dS d }~ww xY w	 dd lada nI# t          $ r<}t          d           t          d                    |                     Y d }~dS d }~ww xY wt          d	           dS )
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.)	r]  rh   r  r  r  r  formatpysmbModuleNotFoundError)rm  r  rz   s      r   install_python3_smbc_if_neededz,NewPrinterGUI.install_python3_smbc_if_needed	  s     	4IJJJ	*--B!!1a8888 	 	 	HIIIt{{1~~&&&55555	
	LLL OO" 	 	 	2333t{{1~~&&&55555	
 	CDDDts/   *A 
B1BBB 
C 1CCc                    | j         }|                                 t          | j                    G d d          } |            }t          j        j        |_        t          d          |_	        d|_
        |                    d|g           t          j                    r&t          j                     t          j                    &d}t                      rd}t	          j        | j                  }t          j                            ||j                  }d}	 |                                dk    rm	 |                    d	                                          }n,# t,          $ r}|                    |           Y d}~nd}~ww xY w|                                dk    mnb# t0          $ rE}|j        \  }}	|t4          j        k    r!t9          d
t;          ||	f          z             Y d}~nd}~w t=                       Y nxY w|                                 |rZ|D ]W}
|
j        t          j        j        t          j        j         fv r,|                    d|
g          }|                    |          }XtC          | j"        #                                          }|$                                \  }}}}}tK          |          dk    r G d d          } |            }t          j        j         |_        ||_	        d|_
        |                    d|g          }|                    |          }|&                    |          }| j'        (                    |d           tS          | j                   |*                                L| j        +                                 tY          t          d          t          d          | j-                   dS dS )zInitialise the SMB tree store.c                       e Zd ZdS ))NewPrinterGUI.browse_smb_hosts.<locals>.XN__name__
__module____qualname__r   r   r   Xr  	  s        Dr   r  zScanning...r   Nr   
   debugauth_fnsmb://Runtime error: %sr  c                       e Zd ZdS )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  ).r[  r;  rT   r   r  smbcPRINTER_SHARE	smbc_typer6  rA   commentr)   r   rI   rJ   get_debuggingAuthContextContextcallbackperform_authenticationopendirgetdentsro   failedr  r  errnoENOENTrh   r  rK   	WORKGROUPSERVERr   r   r   separater\  r&   r   r  rO   r6   rW   show_info_dialogr   )rm  ro  r  dummyr  	smbc_authctxentriesrz   rq  entryr1   r  specified_urirt   r  shareuserpasswordr  toplevelr0   s                         r   browse_smb_hostszNewPrinterGUI.browse_smb_hosts	  s   T!"""	 	 	 	 	 	 	 	*2}%%
TE7### ## 	"!!!  ## 	"  	E%t';<<	j  *3*< ! > >	!225599)!kk844==@@GG  ) ) )$$a(((((((() 225599
  	A 	A 	AVFQEL  /$A--?@@@	!      	,  , ,?uz';',z'8': : : <<w77Dd++ADN$;$;$>$>???/</E/E/H/H,eT8::>>        y||H!&!2H HM!H<<z22Dd##A >>4((D(($222d"###""* %%(((a 122 !1 2 2 &*%:< < < < < < +*sB   F" 5'E F" 
F'F<F" FF" "
H,;G,,Hc                 l    | j                             |          }| j                             |           S )z9Don't allow this path to be selected unless it is a leaf.)r[  r'   iter_has_child)rm  r-   r:   r0   path_selectedr  r1   s          r   rb  z!NewPrinterGUI.smb_select_function
  s0    ~&&-->00$7777r   c                 t    |                     |d          }d}||j        }|                    d|           d S Nr   r   r   )r  rA   set_property)rm  rt  rp  r:   r1   r  r  r  s           r   r`  z#NewPrinterGUI.smbbrowser_cell_share
  sC    q))JE65)))))r   c                 t    |                     |d          }d}||j        }|                    d|           d S r  )r  r  r  )rm  rt  rp  r:   r1   r  r  r  s           r   ra  z%NewPrinterGUI.smbbrowser_cell_comment!
  sC    q))mG67+++++r   c                 ^   | j         }|                    |          }|                    |d          }|r5|j        t          j        j        k    r| j                                         dS |	                    |          r|
                    |           dS |                     |||           dS )z*Handle double-clicks in the SMB tree view.r   N)r[  r'   r  r  r  r  r  r   r  row_expandedcollapse_rowon_tvSMBBrowser_row_expanded)rm  viewr0   rt  ro  r1   r  s          r   on_tvSMBBrowser_row_activatedz+NewPrinterGUI.on_tvSMBBrowser_row_activated(
  s    ~~t$$q)) 	U_
(@@@''***Fd## 	At$$$$$--tT4@@@@@r   c                 R
   |                                 }|                    |d          }|dS |j        t          j        j        k    rj	 | j        rdS n#  d| _        Y nxY wt          | j                   d|j	        z  }d}t                      rd}t          j        | j                  }t          j                            ||j                  }	g }
	 |                                dk    rm	 |	                    |                                          }
n,# t"          $ r}|                    |           Y d}~nd}~ww xY w|                                dk    mnb# t&          $ rE}|j        \  }}|t*          j        k    r!t/          dt1          ||f          z             Y d}~nd}~w t3                       Y nxY w|                    |          r@|                    |d          }|                    |           |                    |          @|
D ]q}|j        t          j        j        t          j        j        fv r|                    ||g          }|j        t          j        j        k    r|                    |          }r|                     |d           | `tC          | j                   dS |j        t          j        j        k    rX	 | j        rdS n#  d| _        Y nxY wt          | j                   d|j	        z  }d}t                      rd}t          j        | j                  }t          j                            ||j                  }	g }	 |                                dk    rm	 |	                    |                                          }n,# t"          $ r}|                    |           Y d}~nd}~ww xY w|                                dk    mnr# t&          $ rU}|j        \  }}|t*          j"        k    r1|t*          j#        k    r!t/          dt1          ||f          z             Y d}~nd}~w t3                       Y nxY w|                    |          r@|                    |d          }|                    |           |                    |          @|D ]O}|j        t          j        j        k    r3|                    ||g          }t/          t1          |                     P|                     |d           | `tC          | j                   dS dS )z1Handler for expanding a row in the SMB tree view.r   Nre   z	smb://%s/r  r  r  )$r%   r  r  r  r  r  expanding_rowrT   r   rA   r  r  r  r  r  r  r  ro   r  r  r  r  r  rh   r  rK   r  iter_nth_childr*   r  r  r)   r  rO   EACCESEPERM)rm  r	  r1   r0   r:   r  r   r  r  r  r  rz   rq  r  rh  sharesr  s                    r   r  z*NewPrinterGUI.on_tvSMBBrowser_row_expanded7
  s   !!q))=F?ej222
'% F'%&"""$&'''
*CE )4+?@@I*$$E.7.@ % B BCG$6699A==-"%++s"3"3"<"<"?"?$ - - -!((!,,,,,,,,-  6699A==
   E E EA$$ 3dQFmm CDDD$!#####&&-- !(($22a    &&-- ! ! ) )?uz'8',z'?'A A AdUG44A?ej&777a((AOOT1%%%"4'(((((_
 111'% F'%&"""$&'''
*CE )4+?@@I*$$E.7.@ % B BCF$6699A==-!$c!2!2!;!;!>!>$ - - -!((!,,,,,,,,-  6699A==
   E E EA$$ek)9)9 3dQFmm CDDD$!#####&&-- !(($22a    &&-- !   . .?ej&>>>dUG44Ae---OOT1%%%"4'(((((S 21s   A 	A E .'D E 
D? D:5E :D??E 
F:%;F%%F:K 	K%O  3'N O  
O%N?:O  ?OO   
Q*AP::Qc                     | j                             |           t          r|s,| j                             t	          d          dz             d S d S )Nz#Verification requires the %s modulepysmbc)r   r\  r]  r^  r6  )rm  ons     r   set_btnSMBVerify_sensitivityz*NewPrinterGUI.set_btnSMBVerify_sensitivity
  sz    '',,, 	Kb 	K.. 3> 1? 1?AI1J K K K K K	K 	Kr   c                    t           j        t           j        z   dz   }|                     ||           |                                }t          |                                          \  }}}}}|r| j                            |           |r| j	                            |           |s|rTt          |||          
                                }|                    |           | j                            d           n7| j                                        dk    r| j                            d           |                     t          |                     |                                  d S )Nz	_-./:%[]@r  rt   r  r  Tr   )stringascii_lettersdigitsentry_changedr   r   r  r   r  r   get_urir   r  r   r  r  r  )	rm  entallowed_charsr   rt   r  r  r  r  s	            r   on_entSMBURI_changedz"NewPrinterGUI.on_entSMBURI_changed
  s\   ,V]:;F3...lloo/53/?/?/?/H/H/K/K,eT8 	0(($/// 	4(((333 	48 	4D>>>FFIICLL**40000 )),,22"--d333))499555r   c                    | j                                         }|d S |                                \  }}d}|r2|                    |d          }|r|j        t
          j        j        k    }| j        	                    |d uo|           d S )NFr   )
r   r#   r  r  r  r  r  r  r   r\  )rm  rX   r-   ro  r1   is_sharer  s          r   on_tvSMBBrowser_cursor_changedz,NewPrinterGUI.on_tvSMBBrowser_cursor_changed
  s    %3355	F,,..t 	GOOT1--E G ?ej.FF))$d*:*GxHHHHHr   c           
         	 |                                  sdS | j                            d           	 t          j                    }|j        st          j                    }|                                }t          dz   }|s4t          j
        | j        ddt          j        j        t          j        j        t!          d                    }|dt!          d          z   z  }|                    |           |                    t!          d	          t          j        j        t!          d          t          j        j                   |                                }|                                 |t          j        j        k    r3|                    t          j                   |                                 n*# t6          j        t:          f$ r t=                       Y nw xY w| j                                          | !                                 dS )
<Check whether the needed SMB client library is available andNFr  Tr  r  r  z*Allow all incoming SMB/CIFS browse packetsr  )"r  r   r\  r  	FirewallDrunningSystemConfigFirewallcheck_samba_client_allowedr  r   r6  r   r7  r  r9  r  r6  r  r  r  r  r  r  r   r  SAMBA_CLIENT_SERVICEr  r  r  ro   rK   r   r  r  )rm  r  r  r  r  rx  r4  s          r   on_btnSMBBrowse_clickedz%NewPrinterGUI.on_btnSMBBrowse_clicked
  s   "2244 	F))%000	! !*--A9 =$9<<2255G1F:N *43H26D9<9Q47O4H123D1E1E	G G G
 4#$ &6 $7 $7$7 8 ..???""Am$4$4c6F6I$%&7$8$8#:J:NP P P!::==!!!s/333MM#3#HIIIGGJJJ"I. 	! 	! 	!     	! 	!!###s   FF6 6$GGc                 "   | j                                                                         \  }}d}|r2|                    |d          }|r|j        t
          j        j        k    }|r|s| j        	                                 d S |
                    |          }|
                    |          }|                    |d          }|                    |d          }	|r|                    |d          j        }
nd}
t          |
|	j        |j                                                  }| j                            d           | j                            d           | j                            |           | j        	                                 d S )NFr   r   r  )r   r#   r  r  r  r  r  r  r   rW   iter_parentrA   r   r  r   r  r   r   )rm  r  ro  r1   r   r  parent_iterdomain_iterr  r  rt   r   s               r   on_btnSMBBrowseOk_clickedz'NewPrinterGUI.on_btnSMBBrowseOk_clicked
  s   '5577DDFFt 	GOOT1--E G ?ej.FF 	8 	 %%'''F''..''55q))Q// 	OO[!449EEEE9!J( ( ((/

 	 	$$b)))$$b)))%%%!!#####r   c                 8    | j                                          d S rF   )r   rW   )rm  rX   r  s      r   on_btnSMBBrowseCancel_clickedz+NewPrinterGUI.on_btnSMBBrowseCancel_clicked  s    !!#####r   c                 .    |                                   d S rF   )r  r  s     r   on_btnSMBBrowseRefresh_clickedz,NewPrinterGUI.on_btnSMBBrowseRefresh_clicked	  s    r   c                 ^    | j                             |                                           d S rF   )r   r\  r  r*  s     r   on_rbtnSMBAuthSet_toggledz'NewPrinterGUI.on_rbtnSMBAuthSet_toggled  s*    %%f&7&7&9&9:::::r   c                    	 |                                  sdS | j                                        }t          |                                          \  }}}}ddd}| j                                        }|r2| j                                        | j                                        d}	d}
t          | j
                   	 d}t                      rd}|rkfd}t          j                            ||          }	 d	|_        n# t           $ r Y nw xY w|                    d
|d|t$          j        d          }d	}	nt          j        | j
                  }t          j                            ||j                  }|                                dk    ro	 |                    d
|d|t$          j        d          }d	}	n,# t.          $ r}|                    |           Y d}~nd}~ww xY w|                                dk    o|	sd	}
nT# t2          $ r7}|j        \  }}t7          dt9          ||f          z             |}Y d}~nd}~w t;                       Y nxY wt=          | j
                   |	r3t?          tA          d          tA          d          | j
                   dS |
s9tA          d          }|r|}tC          tA          d          || j
                   dS dS )r#  Nr  r   Fr   r  c                     fS rF   r   )svrshrwgunpwrt   passwdr  s        r   do_authz6NewPrinterGUI.on_btnSMBVerify_clicked.<locals>.do_auth)  s    !400r   r  Tr  r  i  )	workgroupr  r<  zError accessing share: %szPrint Share VerifiedzThis print share is accessible.r  z#This print share is not accessible.zPrint Share Inaccessible)"r  r   r   r   r  r   r  r   r   rT   r   r  r  r  r  optionUseKerberosr  openrL  O_RDWRr  r  r  ro   r  r  r  rh   r  rK   rO   r  r6  show_error_dialog)rm  r  r   r  r  urX  reasonauth_set
accessiblecanceledr  r=  r  r  r  rz   rq  r   rt   r<  r  s                      @@@r   on_btnSMBVerify_clickedz%NewPrinterGUI.on_btnSMBVerify_clicked  s   "2244 	Fn%%((%+%5%5%5%>%>%A%A"eQ&1133 	5&//22D(1144F
d#$$$*	 E  $1 1 1 1 1 1 1j((w(GG,0C))%   D HHHtttUU; i0 0!

 "-t/D9>486<> > >	 j((2;2D ) F F6699A==-HHHtttUU&C&(i8 8%)

$ - - -!((!,,,,,,,,-  6699A== " $#H 	 	 	VFQ3dQFmmCDDDFFFFFF	 t$%%% 	a 677 ABB%)%:< < < < F 	=:;;D q!;<<d&*&;= = = = = =		= 	=sg   <H D H 
DH DBH #)G H 
G6G1,H 1G66H 
I' -II'c                     |                                 }|}|D ];}||vr5|                    |d          }t          dt          |          z             <||k    r|                    |           dS dS )zARemove all chars from entry's text that are not in allowed_chars.r   zremoved disallowed character %sN)r   rv   rh   r  r  )rm  r  r  origtextr(  chars         r   r  zNewPrinterGUI.entry_changed\  s    >>## 	M 	MD=((#++D"55=dKLLLXNN8$$$$$ r   c                     t           j        t           j        z   dz   }|                     ||           |                                  d S )Nz_-./:%[]()@?=&+r  r  r  r  r  rm  r  r  s      r   on_entNPTDevice_changedz%NewPrinterGUI.on_entNPTDevice_changedg  sE    ,V]:;LL3...r   c                     t           j        t           j        z   dz   }|                     ||           |                                  d S )N_-.:%[]rM  rN  s      r   "on_entNPTJetDirectHostname_changedz0NewPrinterGUI.on_entNPTJetDirectHostname_changedl  sD    ,V]:9D3...r   c                 n    |                      |t          j                   |                                  d S rF   )r  r  r  r  rm  r  s     r   on_entNPTJetDirectPort_changedz,NewPrinterGUI.on_entNPTJetDirectPort_changedq  s2    3...r   c                     |                                 }|                    |          \  }}}}|                                }|                    |||||           d S rF   )
get_parentquery_child_packingget_expandedset_child_packing)rm  rX   UNUSEDr  expandfillpadding	pack_types           r   rW  z)NewPrinterGUI.on_expNPDeviceURIs_expandedu  sr     ""%%%996BB		)$$''  &&$")9	6 	6 	6 	6 	6r   c                 .    |                     |d          S )Nr   )r  )rm  r:   r1   r  s       r   rT  z%NewPrinterGUI.device_row_separator_fn  s    a(((r   c                     |                     |          r|                    |           d S |                    |d           d S r  )r  r  r  )rm  r	  r0   rt  s       r   rU  z"NewPrinterGUI.device_row_activated  sL    d## 	*t$$$$$OOT5)))))r   c                    | j         }|                                }|sd S |                    | j                  }|                    |          sd S | j        d S | j        dk    rt          d           d S | j        D ]G}|	                                D ]0}|j
        dk    r#|j        |j        k    rt          d             d S 1H	 | j        dk    s| j        d         dk    rmt          j                    | _        | j        j        st          j                    | _        t          d           | j                            | j                   d S d S # t(          j        t,          f$ r t/                       Y d S w xY w)	Nr   z3Skipping firewall adjustment: discovery in progressr   z4Skipping firewall adjustment: network printers foundr  r  zExamining firewallrA  )r   r%   r&   rw  r  r{  rH  rh   r@  r  ri  r   r  r  r  r$  r%  r&  rm   r  r  r  ro   rK   )rm  r	  r:   r  r  r#  s         r   rE  zNewPrinterGUI.check_firewall  s   !! 	F~~t'@AA  ,// 	F=$F!! 0 1 1 1F | 	 	G!--00  '944J&+-- !9 : : :FFF
	!
k))
1$$ 0 : = =}, M$4$I$L$LDM0111""$2G"HHHHH %$ "I. 	! 	! 	!      	!s   BE $E98E9c                     |                                 }|r|sd S |                    | j                  }||k    r|                                  d S d S rF   )r%   r&   rw  rE  )rm  r	  r1   r0   r:   r  s         r   rV  z!NewPrinterGUI.device_row_expanded  sd    !! 	D 	F~~t'@AA<"""""  r   c                     | j                                         }|                    |          }|                    |d          dS |                     | j         |d           dS )z
        Allow this path to be selected as long as there
        is a device associated with it.  Otherwise, expand or collapse it.
        re   NTF)r   r%   r'   r  rU  )rm  r-   r:   r0   r[  r1   s         r   rR  z$NewPrinterGUI.device_select_function  sb    
  **--~~t$$??D!$$04!!4#3T4@@@ur   c                    g | _         d| _        d| _        d| _        g | _        | xj        dz  c_        |                                \  }}|d S |                                }|                    |          }|	                    |d          }|d S d}|
                                D ]
}|j        dk    rt          d          |_        #|j        dk    rt          d          |_        C|j        dk    r}t          |d	          rX|j                                                            d
          dk    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          |_        a|j        dk    rt          d          |_        |j        dk    rt$          j                            |j                  \  }	}
t$          j                            |
          \  }}
t$          j                            |
          \  }}
|dk    r/|d         dk    r
|dd          }t          d          |z  |_        -t          d          |_        C|j        dk    rt          d          |_        d|j        d k    rt$          j                            |j                  \  }	}
t$          j                            |
          \  }}
t$          j                            |
          \  }}
|dk    r5|d         dk    r
|dd          }|                    d!          r
|d"d          }d#|j        v r
d$}d|_        nd}|dk    r!d%t          d&          z   d'z   ||fz  |_        Qd%t          d&          z   |z  |_        m|j        d(k    s|j        d)k    rt          d*          |_        |j        d+k    s|j        d,k    rLt$          j                            |j                  \  }	}
t$          j                            |
          \  }}
t$          j                            |
          \  }}
|dk    r|d         dk    r
|dd          }|d-k    r9t          d.          |_        |j        dk    r|xj        d'|j        z  z  c_        vd }|                    d/          dk    rd&}n7|                    d0          dk    rd1}n|                    d2          dk    rd3}|t          d4          |z  |_        t          d5          |_        d}|j        |_        t5          j        t8          t:          j                  }| j                             |           tC          |d6d           dk    rd}d}d}d}d }d7d8i}|j"        r|j"        }|
                                D ]V}|j        dk    r!d}| #                    |j                  rd} n)|j        d9v r|v|j        d:v rmt$          j                            |j                  \  }	}
t$          j                            |
          \  }}
|"t$          j        $                    |          \  }}|rd}|j                            d;          s|j                            d<          o|j        %                    d=          }|j&        r|j&        d>k    r|s| '                    ||?           |j        |d@<   |j&        |dA<   |j(        |dB<   |j)        |dC<   X|sy|rv|ss|j&        rd|j&        d>k    sY|j&                                                            d          s-|j&                                                            dD          rt          |dE          r|j*        r|j*        }n|}| +                    |dF          }|rtY          j-        |fi |}d|_        |.                    |           | #                    |j                  rd}| +                    |d
          }|rm| /                    |          }||dB<   t          d          |d@<   tY          j-        |fi |}t          d          dz   dz   |_        |.                    |           |rd|_0        d|_1        tC          |dGd           |_0        d}|
                                D ]#}|2                    |j        |f           |dz  }$| j        3                    d          }| j        4                    t5          j5                    |d           |r| j6        7                                 d S | j6        8                                 d S )HNFre   Tr   zParallel Portr   zSerial Portr   r   rZ  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   rq  r  z	printers/	   r,  zDriverless z%sIPPz (%s)rz  r{  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_hpliprp  r   )r   r   r  r   rm  r  r  r  r  r  )r  r#  rn  zdevice-make-and-modelz	device-idzdevice-locationhewlettdnssd_hostnamerY  r  )9r)  r*  r+  r,  r.  rj  r  r%   r'   r  r  r  r6  	menuentryr  r   r>   r  r   r   r   	splithost
splitqueryrg   r  r,  r   r7  r8  r   rZ  r   r9  r  _network_hostrW  	splitportrn  r  r  r  r  rx  r]  r  r  r  rP  r  rv  r)   ry  rH   rz  r   r@  rW   )rm  rX   r0   rt  r:   r1   r  	show_urisr#  r   r   hostportqueuedrvlessrA   	cupsqueueprotocolhp_drivabler  
is_network
remotecupsr  r  r  	hpliphosthplipurir  rN  faxdevidfaxdevrh  s                                  r   on_tvNPDevices_cursor_changedz+NewPrinterGUI.on_tvNPDevices_cursor_changed  sq
   &(#).&(-%$)!%'"!((++f<F  ##~~t$$$22!F	$0033 T	. T	.F{j((#$_#5#5  ((#$]#3#3  %%FE** 0J$$&&++E22R77'(xx%'7!E(('BF$$'(xxF$$++#$[>>  $$#$%L#M#M  ''#$U88e#3=>>$?  %%#$%G#H#H  ((#$%=#>#>  %%!'!7!7!D!D#)<#9#94#@#@ 4 & 7 7 > >B;;Qx3 %abb	()*>(?(?*/)0F$$ ()'9'9F$$%%#$%@#A#A  %%!'!7!7!D!D#)<#9#94#@#@ 4 & 7 7 > >B;;Qx3 %abb	''44 * %abb	6;..+G(,F%% GB;;)-%7)B)0%(8)9F$$ *.%G(CF$$&&&+*@*@#$V99  ''6;&+@+@!'!7!7!D!D%|55t<<t$*L$;$;T$B$B!D??y|s':': )!""I&&'()I'J'JF${b((((Gfk,AA((#Hyy))R//#(;//255#(#566"<<#8+,-.M,N,N.6-7(( :;; (( "	#):  s&46 6%%u--- NOT::dBBK LJJD*I7K+ 4%3(4477 I I;$&&"&K 77DD ,'+E[$MMM|7O(O(O)/)?)?)L)L+1<+A+A4+H+H(4#/+1<+A+A8+L+LLT4 I%)
'-z'<'<X'F'F (F'-z'<'<W'E'E'C&,j&9&9'&B&B # !' 5 K"1Y>>% ? ;;CI < K K K5;[M2@F@N $$;<399K09?$56  ;:  ;j  ;) ;%22%++..994@@ 3%++..999EE 3 ^-=>> %"1% . =II $IAA9CJL L ;%,hFF+FFC$KCM"--s333 77DD ,'+ "CCYEJL LF ;#'#;#;V#D#D3;K056uXXM2!,!3V!K!K{!K!K+,U88e+;C,D(&116::: 3.2++/N(%~~tLL $0033 	 	FLL6+V4555FAA$//33&&FFF 	) )),,,,, %%(((((r   c                 <   |                                 \  }}|d S |                                }|                    |          }|                    |d          }|| _        | j                            d           | j                            |j	        | j
                  }| j                            |           t          d|j        z             d}|j	        }	|j                            dd          d         }
|| j        k    rq|j	        dk    rt#          d          }n9|j	        dk    rt%          |d	          rh|j                                                            d
          dk    r8t#          d          dz   t#          d          z   |_        t#          d          }nt#          d          }n|j	        dk    rt#          d          }n|j	        dk    rt#          d          }nm|j	        dk    rt#          d          }nQ|j	        dk    rt#          d          }n5|j	        dk    s|j	        dk    rt,          j                            |j                  \  }}t,          j                            |          \  }}t,          j                            |          \  }}|dk    r|d         dk    r
|dd          }|dk    rt#          d          }nd }|                    d          dk    rd}n7|                    d           dk    rd!}n|                    d"          dk    rd#}|t#          d$          |z  }nt#          d%          }n|j        }| j                            |           n||j	        d&k    rt,          j                            |j                  \  }}d}d'}|d&k    r}t,          j                            |          \  }}t,          j                            ||(          \  }}t          d)|d*t9          |                     |j        dk    r|j        }n|}| j                            |           | j                            tA          |                     n|j	        d+k    rq|j!        sg|j                            d,d          }tE          |          dk    r	|d         }nd} |j        d-          }i }|D ]}|                    d.          \  }}|||<    | j#        d/f| j$        d0f| j%        d1f| j&        d2ffD ]\  }}||v r|                                }|'                                }d}|r_|                    |d          d         }tA          |          tA          ||                   k    rn|(                    |          }|dz  }|_|r|)                    |           |)                    d           |)                    d           ؐn|j	        d3k    r| j*                            d           | j+                            d           | j+        ,                    d            | j-        .                    d4           tE          |j                  d5k    r|j        d5d          }|                    d          }|dk    r||dz   d          }|d |         }nd}| j*                            |           | j+                            |           |}| j-        .                    d6           n|j        d7k    r5| j/                            d           | j0        .                    d4           n|j	        d7k    rq| j1                            d           | j2                            d           | j/                            |j        d5d                     | 3                    d6           n&|j        r| j4                            |j                   	 tE          |          dk    rO| j        j5        d8k    r?| j6        d9k    s| j6        d         dk    rto          j8                    }|d         }n| j6        }| j9                            |           n#  tu                       Y nxY w| ;                                 d S ):Nre   r   z!Selected connection type. URI: %sr  r  r   z)A printer connected to the parallel port.r   r   rZ  rf  rg  rh  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   rm  r   r  r  rn  ro  rk  rp  rq  rr  rs  rt  ru  r   i#  )defportzsocket: host is z
, port is r   r`  +rS  baudbitsparityflowr   Fr   Tr   directr  )<r  r%   r'   r  r#  r   r  new_printer_device_tabsr(   r  r  r   r  rh   r   r  r  r6  r  r>   r  ry  r   r   r   rz  r{  
splitnportr  r  r   r   r8  is_classr\  r   r   r   r   r6   r7   r  r   r   set_completionr   r\  r   r   r   r   r  r   ri  r  rL  unamer   rK   r  )rm  rX   r0   rt  r:   r1   r#  pager  r  rw   r   r   r   rA   r  r  r  r  r  partsr  option_dictr  r  r!  r  rC   rC  s                                r    on_tvNPDeviceURIs_cursor_changedz.NewPrinterGUI.on_tvNPDeviceURIs_cursor_changed  s   ((++f<F  ##~~t$$q))#,,b111+//d>UVV((...6CDDD{jsA&&r*4--- {j((DEE%%FE** CJ$$&&++E22R77'(xx%'7!E(('BF$ . / /DD ABBDD++=>>$$ O P P'' K L L%% = > >''6;&+@+@!'!7!7!D!D%|55t<<t$*L$;$;T$B$B!D??y|s':': )!""I&&=>>DD#Hyy))R//#(;//255#(#566"<<#8+ !@AAHL !=>>z'00$7777[(""#\33VZ@@NVTDD!!#)<#9#94#@#@ 4%|66$6OOt
@DdM N N N?b((%HH#H(114888$--sDzz::::[(""? "-
((a00;;??#AhGG G''-,, % . .F"(,,s"3"3KD%(-K%% *F3*F3,h7*F3	%5 - -LFD
 {** & 0 0 2 2$3355" $$)IId1$5$5a$8E"E{{c;t3D.E.EEE %#(??4#8#8D!GB # $   2"--b1111"--q1111))!,,,, [%'',,,(("---..555--u555FJ!##z!""~IIsOO77"1q566lG8DD G"++T222#,,g666#114888Z5  N##B'''++E2222[E!!(("---(("---N##FJqrrN333--t4444z 7!**6:666	!H~~""t{'?8'K'KJ+--JqMS((A tHH#zH ''2222	!     s   6A<a3 3bc                     |                                 }| j                            t          |          dk               |                                  d S r5   )r   r   r\  r\  r  )rm  r  r  s      r   on_entNPTLpdHost_changedz&NewPrinterGUI.on_entNPTLpdHost_changed@  sI    <<>>))3>>A+=>>>r   c                 .    |                                   d S rF   r  rT  s     r   on_entNPTLpdQueue_changedz'NewPrinterGUI.on_entNPTLpdQueue_changedE      r   c                 
  	 | j                                         }t          j        |          	| j                            dt          d          z   dz   t          d          z              | j                            | j	                   | j        
                                 t          | j                   	fd}| j                            | j                   | j                            d|          }	                                }| j                            |           | j                            dt                     | _        | j                                         t%          j        t(                    }|D ]}|                    |g           t%          j                    }|                    |           |                    d           |                    d           | j                            |           d S )Nz"<span weight="bold" size="larger">r  z	</span>

zSearching for printersc                 0                                      dS rV   )r   )rX   rY   servers     r   r  z5NewPrinterGUI.on_btnNPTLpdProbe_clicked.<locals>.stopS  s    NN4r   r  r   )r   r   re  	LpdServerr   
set_markupr6  r   rc  r   r  rT   r%  rF  rE  proberZ   rW   r   r7  r8  r)   EntryCompletionr9  set_text_columnset_minimum_key_lengthr   r  )
rm  r  r  r  signalrB   r:   rC   
completionr  s
            @r   on_btnNPTLpdProbe_clickedz'NewPrinterGUI.on_btnNPTLpdProbe_clickedH  s   %..00(22!E!";"02?"@!"#;!<!<"= 	> 	> 	> 	))4+@AAA  ###do	 	 	 	 	 	""D$;<<<((.$??<<>>""F+++"&/"9"9>;N#P #Ps## 	% 	%GLL7)$$$$(++
e$$$""A&&&))1---**J77777r   c                 *   |                                 }|                    d          dk    r|                    d           t          d|z             | j                            |           | j                                        }|                    | j                  }| j        	                    |d           | j        
                    dd           | j                            d           d S t          j        t          j        z   dz   }|                     ||           |                                 }| j                            t%          |          dk               | j                                         |                                  d S )	Nr  r  r   zURI detected (%s) -> Enter URIF)r0   start_editingr   rQ  )r   r  r  rh   r   r   r%   r&   ru  rH   select_regionset_positionr  r  r  r  r   r\  r\  r   rW   r  )rm  r  r   r:   r0   r  rq  s          r    on_entNPTNetworkHostname_changedz.NewPrinterGUI.on_entNPTNetworkHostname_changedj  sh   ||99c??b  LL"84?@@@&&---$..11E>>4#899D''d7< ( > > >++Q222**B///F,V]:9D3...LLOO))377Q;777#((+++r   c                      j                                         } fd} j                            d            j                             d           d _         j                                          j                                         t          j
                    }                                  |                    ||           | _        d S )Nc                 N    j         d S t          j        j        |            d S rF   )r  r   r  found_network_printer_callback)
new_devicerm  s    r   found_callbackz?NewPrinterGUI.on_btnNetworkFind_clicked.<locals>.found_callback  s,    "*M4>
KKKKKr   Fr   )r   r   r   r\  network_foundr   rW   r   r@  re  PrinterFinderr  r  r  )rm  r  r  r  finders   `    r   on_btnNetworkFind_clickedz'NewPrinterGUI.on_btnNetworkFind_clicked  s    )2255	L 	L 	L 	L 	L 	))5111"00%888#((+++$--000,//   T>***$r   c                 :   t          j                     |r| xj        dz  c_        t          |          }	 | j                            |          }| j        |                             |           | j                                        \  }}|rm| j        	                                }|
                    |          }|                    |d          | j        |         k    r|                     | j                   n# t          $ r d|_        | j                            |           | j                                         | j        	                                }|                    d | j        |                                |dg          }| j        dk    r1|                    |          }| j                            |d d           Y nw xY wd | _        |                                  | j                                         | j                            d           | j                            d           | j        dk    rF| j                            dt?          d          z   dz              | j                                          t          j!                     d S )	Nre   TFro  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  rp  rv  r)   r8   r  rv  rs  r&   rH   r  r  r   rW   r   r\  r   r   r  r6  r  r  )rm  r  r  r  r0   rt  r:   r1   s           r   r  z,NewPrinterGUI.found_network_printer_callback  s    '	4!# *--CDL&&,, Q**J777!%!1!<!<!?!?v N ,6699E >>400Da00DLOCC::D<LMMM D D D$(!##S)))!!$$$(2255**D$2K14#u0M + O O %** >>400D$//tUCCCD #'D!!$$$(--000&44d;;;--t444!Q&&+6689 ;E 9F 9F9F IO9O P P P +00333s   CC> >CGGc                 T   | j         dv r| j        j        S | j        j        }| j                            || j                  }|}|| j        k    r| j        j        }nK|dk    rH| j        	                                }| j
        	                                }|r|d|z   z  }|r|d|z   z  }n|dk    rH| j        	                                }| j        	                                }|r|d|z   z  }|r|d|z   z  }n|dk    rg }| j        df| j        d	f| j        d
f| j        dffD ]_\  }}	|                                }
|                                }|
                    |d          }|dk    r |j        |	dz   |z              `d                    |          }| j        j                            d          d         }|r|dz   |z   }n|dk    r| j        	                                }t1          |                                          \  }}}}}d}d}| j                                        r2| j        	                                }| j        	                                }t1          |||||                                          }|r|d|z   z  }n| j        	                                }|S )N)r  r$  r   r_  r  r   r  r   r  r  r  r  re   r   rS  r  r`  r   r   r  )rt   r  r  r  r  ) rk  r#  r   r  r  r(   r  r  r   r   r   r   r   r   r   r   r   r%   r  r  r)   ro  r  r   r   r  r   r  r   r   r  r   )rm  r  r  r#  r  r  rC   r  rX   rA   r:   r1   r  r   rt   r  rC  rX  r  r  s                       r   r  zNewPrinterGUI.getDeviceURI  s   :::;?"{+//t7NOO4---[_FFX/88::D+4466D )%$,& )cDj(FU]]%..00D)2244G ,%$,& ,cGm+FXG&/&/((3&/	!1 	8 	8
 ((++--//$22R<<"GN4#:#6777hhw''Gko++C003F 0#/U]].)),,C)/S)9)9)9)B)B)E)E&UD%ADH"--00 ;*3366.77::D#h8 8 88?

  &%#+%&//11Fr   c                    | j                                         }| j                                        }| j                                        }| j                            |           | j                            |           |r| j        }|r| j        }|r| j	        }| j
                            |           |s| j        r| j        D ]}| j                            |           d | _        | j                                         d | _        | j                            d           | j                            t'          d                     t)          j        t,          t,                    }| j        }|                    |           |                    d           | j        | j        fD ]}|                    |           | j                            |o| j        d u            |                                  d S r  )r   r  r   r   r   r\  r   r  r  r  r   r  rI  rJ  r%  r$  r   r   r  r6  r   r7  r8  r   r9  r   r  )	rm  rX   rbtn1rbtn2rbtn3r  r&  r:   ru  s	            r   r  z'NewPrinterGUI.on_rbtnNPFoomatic_toggled  s   #..00))++3>>@@$$U+++))%000 	.-D 	+*D 	32D++T222 	+ 	+. 0 0
%%w////"&DJ   DJ.<<dCCC4==q{{KKKM3,,E@H&&&""E***9@B 	( 	(F  ''''*M59djD&8:::r   c                 .    |                                   d S rF   r  r*  s     r   #on_filechooserPPD_selection_changedz1NewPrinterGUI.on_filechooserPPD_selection_changed#  r  r   c                     d| _         | j        K| j        D ]}| j                            |           d | _        | j                                         d | _        |                    d           | j        }|                    t          d                     | j	        
                                }t          dt          |          z             t                      | _        g | _        | j                            | j                            d| j                             | j                            | j                            d| j                             | j                            |           | j                            d           d S )NTFr  zSearching for "%s"r  r  )r*  rI  rJ  r%  r$  r\  r   r  r6  r   r   rh   r  r   r)   rE  opreq_user_search_doneopreq_user_search_errorr  r   )rm  rX   r&  r  
searchterms        r   (on_btnNPDownloadableDriverSearch_clickedz6NewPrinterGUI.on_btnNPDownloadableDriverSearch_clicked&  s   )-&:!. 0 0
%%w////"&DJ   DJe$$$8+'''7@@CC
(4+<+<<===(++
 ""J
 $ ;= =	> 	> 	> 	""J $ <> >	? 	? 	? 	
!!:...1??GGGGGr   c                    | j         D ]}|                    |           d| _        d | _         d | _        d| _        || _        || _        | j        }| j        }t          j
                     	 |                    t          d                     |                    d           t          j        t           t                     }t#          | j                  dk    rzt#          | j                  dk    rt          d          }nt          d          }|                    d           }	|                    |	d|           |                    |	dd           g }
| j        D ]\  }}|
                    ||f           |
                    t+          j        d           	           | j                                                                        }d}|
D ]{\  }}|                    d           }	|                    |	d|           |                    |	d|           |                                |k    r|                    |	          d         }|| j        }|                    |           |                    |           |                    d           |                                  n#  t?                       Y nxY wt          j                      d S )
NTr  re   z -- Select from search results --z-- No matches found --r   r   c                 D    t          j        | d         |d                   S )Nre   )r  	modelSort)r^   r  s     r   r  z6NewPrinterGUI.opreq_user_search_done.<locals>.<lambda>a  s     DNTUVWTXZ[\]Z^D_D_ r   )key)!rJ  r%  r  rI  r+  r.  r  r   r   r   r  r  r6  r\  r   r7  r8  r\  r)   	set_valuer8   	functools
cmp_to_keyr   r   r>   r&   r   r9  r  r  rK   r  )rm  rI  rB   r  r&  r  r  r:   firstr1   sorted_list
printer_idprinter_namesoughtselect_indexr  rA   ru  s                     r   r  z$NewPrinterGUI.opreq_user_search_done@  s   * 	' 	'Gg&&&&!%"
(,%%-"$+!38!	 NNAhKK(((  $'''M3,,ED.//144233a77@AAEE677E||T**q%000q"---K,0,F @ @(
L""Z$>????)"67_7_"`"`aaa7@@CCIILLFL' < <D||T**q$///q"---::==F**#(>>4#8#8#;L@H&&&...""D)))    	 s   ,H<J) )J;c                     t          d|t          |          fz             |                     |t                      t	                                 d S r  )rh   r  r  r]   r  r  s       r   r  z%NewPrinterGUI.opreq_user_search_errort  sW    :f>BCjj>J J 	K 	K 	K##UDFFDFF;;;;;r   c                 X   |                                   | j        | j        D ]}| j                            |           d | _        | j                                         d | _        | j                            d           | j                            t          d                     d S d S )NTr  )
r  rI  rJ  r%  r$  r   r\  r   r  r6  )rm  rX   r&  s      r   /on_cmbNPDownloadableDriverFoundPrinters_changedz=NewPrinterGUI.on_cmbNPDownloadableDriverFoundPrinters_changedy  s    :!. 0 0
%%w////"&DJ   DJ.<<dCCC4==q{{KKKKK "!r   c                    t          d           d | _        | j        dk    r| j        }|                                }|                                }|r|                    |d          }|                    |d          }|dk    r\|                    d           |                                }|r-|                    |d          }|                    |d          }nd }d }nd }d }n| j        d         \  }}|d | j        D             }n|g}|r|| _        t          j
        t          t          j                  }d }d }|D ]}| j        |         }	|	                                D ]}
d|
vst!          |
d                   dk    r:t"          j        s|                     |
          st)          d|
d	         z             Y|                    d           }||}|                    |d|
d	                    |                    |d|
           |
d
         r|}|dS | j                                        s[| j        dk    rP|                    d           }|                    |dt5          d                     |                    |dd           ||}| j        }|                    |           |'|                                                    |           |                     |           dS )NfilldownloadableDriversTre   r   r   c                     g | ]
}|d          S )r   r   r  s     r   r"   z9NewPrinterGUI.fillDownloadableDrivers.<locals>.<listcomp>  s    DDDA1Q4DDDr   r  zRemoved invalid driver entry %srA   recommendedFr  zLocal Driver) rY  r-  r  r   r%   r  r  r  r.  r   r7  r8  r   rZ  r  r?   r\  r4  rP  r5  rh   r)   r  r   r  rk  r6  r   r9  r#   select_iter)on_tvNPDownloadableDrivers_cursor_changed)rm  rX   r:   r1   r  printer_strprinter_idsrecommended_iter
first_iterr  rB  r9   s               r   r  z%NewPrinterGUI.fillDownloadableDrivers  sG   ()))/3,!T))>F$$''E)),,D #"__dA66
#ootQ77##%%q)))!1144D +%*__dA%>%>
&+ootQ&?&?%)
&*!
"&*&@&C#J ED)CDDDKK%,K 	?3>D0s&46 6
% 	, 	,J/
;G!..++ , ,6))((A--0 .996BB .  A &v!/ 0 0 0||T**%!%Jq&.999q&111-( ,'+$!,$ 52==?? 	)000<<&&DOOT1a&7&7888OOT1a(((#)/E"""'""%%113CDDD66x@@@tr   c                 .    |                                   d S rF   r  r*  s     r    on_rbtnNPDownloadLicense_toggledz.NewPrinterGUI.on_rbtnNPDownloadLicense_toggled  s    r   c                    d| _         | j                                        }| j                                        }|                                 d}| j        r%t          j                            | j                  }nd }|D ]}|o"t          j                            |          |k    }| j	        r!| j	        j
        r|r|t          d          z   }n|}|                    ||f          }|rQ|                    |          }	| j                            |	d d           | j                            |	d ddd           d}|sK| j                            t!          j                    d d           | j                            dd ddd           d}
| j	        r^| j	        j        rR| j	        j        }|d         r|d	         r|d         d
z   |d	         z   }
n!|d         r	|d         }
n|d         r|d         }
|
dk    r%| j        |
| j        z  }
| j        |
d
| j        z   z  }
|
                    d          s|
                    d          rd}
| j                            |
           d S )NFr  Tr  r           r   r|  r}  rf   r  r  r  )recommended_make_selectedr  getMakesr   r%   r;  r  r  	normalizer#  r  r6  r)   r&   rH   r  r   rz  r  r  rg   r   r  )rm  makesr:   foundauto_make_normr  r  r   r1   r0   rs   
devid_dicts               r   r  zNewPrinterGUI.fillMakeList  s   ).&	""$$((**> 	"(-77HHNN!N 	 	D) O&+55t<<N { t{9 k a 0111<<t..D ~~d++))4u===--dD.2C> > > 	CN%%s|~~tUCCCN))!T4cBBB ; 	+4;. 	+,J%  +Z%6 +#E*S0:e3DDE" +#E*E" +#E*R<<DN6dn$F*#//i(( 	i((	F*33V<<<<<r   c                    |                                 \  }}|| j        |                                }|                    |          }|                    |d          d         | _        | j        oIt          j                            | j                  t          j                            | j                  k    }|| _	        | 
                                 d S d S d S r  )r  r  r%   r'   r(   NPMaker  r  r  r  fillModelList)rm  r   r0   rt  r:   r1   recommended_makes          r   on_tvNPMakes_cursor_changedz)NewPrinterGUI.on_tvNPMakes_cursor_changed  s     ++--f	 5''**E>>4((D))D!,,Q/DK $ !I + 0 : :DN K K + 0 : :DK H H!I  .>D*       5 5r   c                    d| _         | j                            | j                  }| j                                        }|                                 d}t          j                            | j                  t          j                            | j	                  k    }|r$t          j                            | j
                  }|D ]}|o"t          j                            |          |k    }| j        r!| j        j        r|r|t          d          z   }n|}|                    ||f          }	|rQ|                    |	          }
| j                            |
d d           | j                            |
d ddd           d}|sK| j                            t%          j                    d d           | j                            dd ddd           | j                                         d S )NFr  Tr  r   r  )r0  r  	getModelsr  r   r%   r;  r  r  r  r  r#  r  r6  r)   r&   rH   r  r   rz  columns_autosize)rm  modelsr:   selectedis_auto_makeauto_model_normpmodelr  r   r1   r0   s              r   r  zNewPrinterGUI.fillModelList  s   */'$$T[11))++#(22DK@@#(22DNCCD 	K).88$/JJO 	  	 F' +&+55v>>*+  { t{9 k "2 3 33<<v00D  ~~d++**D$>>>..tT/3S#? ? ? 	DO&&eDDDO**1dD#sCCC((*****r   c                 n   || _         | j                                        }|                                 | j        r| j        j        }nd }| j        rX| j        j        rL| j        rE| j        r>| j        j        }| j        | _	        t          dt          | j	                  z             n| j        r|dz   |z   }| j                            ||          }t          |                                          }| j        }	 | j                            ||||          | _	        n#  t%                       || _	        Y nxY w| j        rQ| j        rJg }	| j	        D ]9}
|
| j        k    r|	                    d|
           $|	                    |
           :|	| _	        nt          d           g | _	        g }g }d}| j	        D ][}| j                            |          }t/          |d                   }
|
                    dd          }
	 dt/          |d	                   z  }|
|z  }
n# t2          $ r Y nw xY w|
|v }| j        r| j        j        s| j        |k    r|                    |
           |                    |           |d
z  }|                    |
t5          d          z   f          }|                    |          }| j                                                            |           | j                            |d ddd           O| j        r|dk    r|                    |
           |                    |           |d
z  }|                    |
t5          d          z   f          }|                    |          }| j                                                            |           | j                            |d ddd           |r|                    |
           |                    |           |d
z  }|                    |
f           ]|| _	        | j                                         d S )NzID matched PPDs: %srf   r   zNo PPDs available?r  r  r   z [%s]zppd-natural-languagere   r  Tr  r  ) NPModelr   r%   r;  r#  r  r  r0  r  	NPDriversrh   r  r  r  r]   r  r)  r  rK   r  insertr)   r   r_   rv   KeyErrorr6  r&   r#   select_pathr  r  )rm  pmaker  r:   r  r  r  ppdnamesfilesr  rB  
driverlistr  r  r  r$  lpostfix	duplicater1   r0   s                       r   r  zNewPrinterGUI.fillDriverList7  s    **,,; 	K'EEEK '	 DK6 '	 +'	 $'	  "[7N "5DN-dn0E0EEFFFFY 	  #S[61N9--eV<<DDIILL))H/E*!%!D!DXEJESEJ"L "L*!$$$!)  )DK )"n 0 0F!11162222////!( ,---DN
	~ &	) &	)G)..88C%9!:;;F^^$4b99F"Z5K1L%M%MM("    *,I[ )T[%? ) G++!!6***  '***Q||f&'oo'6 &8 9 9~~t,, ..00<<TBBB //dD#sKKKK )a!!6***  '***Q||f&'(8&9&9': &< = =~~t,, ..00<<TBBB //dD#sKKKK !!6***  '***QfZ(((("))+++++s   ="D   D9H
H,+H,c                    |r|                                 d         }|dS n;|                    ||          \  }}|                    ||          }	|	dS |	d         }| j        |d                  }
| j                            |
          }t          |d                   }|
                    d          r|dz  }|t          d          z  }|	                    |           dS )Nr   Fr  z	foomatic:rf   z"This PPD is generated by foomatic.T)
r  #convert_widget_to_bin_window_coordsget_path_at_posr  r  r   r_   rg   r6  r  )rm  tvr^   r  keyboard_modetooltipr0   bin_xbin_yrG  
drivernamer	  markups                r   re  z(NewPrinterGUI.on_NPDrivers_query_tooltip  s     		==??1%D|u  AA!QGGLE5$$eU33C{uq6D^DG,
)..z::W%9:;;!!;// 	>cMFa<===F6"""tr   c                    |                                 \  }}||                                }|                    |          }|                    |d          d         }| j        o5| j        o.| j                                        |                                k    }|| _        |                     | j	        |           | 
                    | j                   d S d S r  )r  r%   r'   r(   r  r  r>   r0  r  r  on_tvNPDrivers_cursor_changedr   )rm  rX   r0   rt  r:   r1   r  recommended_models           r   on_tvNPModels_cursor_changedz*NewPrinterGUI.on_tvNPModels_cursor_changed  s    ((**f$$''E>>4((DYYtQ''*F "&!? "M!%"M!%!6!6!9!9V\\__!L  /@D+V444..t/?@@@@@ r   c                 .    |                                   d S rF   r  r*  s     r   r  z+NewPrinterGUI.on_tvNPDrivers_cursor_changed  r  r   c                    | j                             d           | j                            d           | j                            d           | j                            d           | j                            d           | j                                         |	                                }|d S |
                                \  }}|s1|                                \  }}|r|                    |          }nd S |                    |d          }|dk    r5| j                            | j                   |                                  d S | j                            | j                   |                    dt)          d                    }| j        }	|d         }
d } ||	|
           | j                             |           |                    d	t)          d
                    }| j        }| j        } |||d                     |||d                    | j                            |           |                    dt)          d                    }| j                            |           d|v r|d         }dD ]}|                                }d }| j                            d|z            }| j                            d|z            }||v rs|rq	 t7          ||                   }|                    dd           |                    |           |                                 |                                 n#  Y nxY w|(|                                 |                                 d}d|v r}|d         D ]t}|d         rjd|d         z   }d}|d         r||d         z   }|d         r|r|t)          d          z   }||d         z   }|r!|t)          d          |z  z   }|r|dz   }||z   }u|st)          d          }| j                            |           d|v ri| j                                         |                    dt)          d                    }| j         !                                                    |           n| j                                         |d         sU|d         sM| j"                            d           | j"                                         | j                                         n| j                            d           | j"                                         | j                                         | j                                         |                    dt)          d                    }| j         !                                                    |           d |v r!tG          |d                    dk    rd| _$        nd!| _$        |                                  d S )"Nr   Tre   r   supplierOpenPrintingmanufacturersuppliedc                 >    || _         |                     |           d S rF   )r  r  )rX   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  supportcontactsrA   rg  rw   levelr  z
(%s)rL  zNo support contacts knownlicensetextzNot specified.nonfreesoftwarer  F)%r   r  r   r   r   r   r  r   rW   r#   r  r  r'   r  r   r  r  r  r  r(   r6  r   r   r   r  r>   __dict__r  	set_ranger  r@  r  r   
get_bufferr   r\  r,  )rm  rX   r-   r:   r1   r0   rt  rB  r  vendorr  r  r  r  freedescriptionr"  fieldr  r  hsunknownr'  supportentrysupportcontactsupportcontact_extratermss                              r   r  z7NewPrinterGUI.on_tvNPDownloadableDrivers_cursor_changed  sF   ,55r:::+44b999/88"===3<<bAAA$//666055888((++	F,,//t 	!,,..LD& ~~t,,$**Q;;3DDdF`aaaF/@@$BYZZZ::j!N*;*;<<:./	' 	' 	' 	FF+++,55x@@@**Y/(:(:;;;5GVI%6777D&"8999+44g>>>jj!3QvYY??/::KHHHf$$"?3MA ( (kknn]&&(Du(LMM-++-Q/4.5 6 6-'' !!$'s);$<$<ELL!S111LL%000KKNNN#LLOOOO! D=GGJJJ$$'''&& &'8 9 K K' K%*\&-A%AN+-(#E* 0/C(/00,#G, 2/ R3G!D''3Q0/C(102,+ K)7hKK*>>*?* E.=.DO*9N*J 	= ;<<O3<<oNNNF""499<<<JJ}a0@.A.ABBE.99<<EEuMMMM499<<<'( 
	N	1B 
	N)44d;;;)..111(--0000(33T:::)..111(--000499<<<JJ}a0@.A.ABBE.99<<EEuMMMVF6N 3 3a 7 7(,D%%(-D%s   A(MM	c                 
   d }	 | j                                         st          | j                  dk    rc| j        dk    rX| j                                                                        \  }}|                    |          d         }| j	        |         }n| j
                                        r-t          j        | j                                                  }ni| j        }|                                                                \  }}|                    |d          }|dk    rd|v rt          |d                   dk    r|d         d         }t#          d|z   dz              |                                }t          |          dk    rt&          j                            |          }|                                }	|                                 t1          j                    5 }
|
                    |	           |
                                 t          j        |
j                  }d d d            n# 1 swxY w Y   n# t:          t&          j        j        f$ r}t#          dtA          |          z              | j                                         rtC          d          }tC          d	          }| j                                                                        \  }}|                    |          d         }| j	        |         }|"                    d
          rtC          d          dz  }n||| j#        | j$        fz  }n| j
                                        rtC          d          }| j                                        }tC          d          dz   }	 tK          j&        dd|gdtJ          j'        tJ          j(        tJ          j(                  }|)                                \  }}||*                                z  }n$#   xY wtC          d          }tC          d          }tW          ||| j,                   Y d }~d S d }~ww xY wt#          dtA          |          z              t[          |t\                    r| j        /                    tC          d                     	 |dk    rB| j        0                    |          }t          j        |          }tc          j2        |           nZ# t:          $ r  tg                       t#          d           Y n1t          j4        $ r  tg                       t#          d           Y nw xY w| j        5                                 |S )Nr   Fre   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:rL  z/usr/bin/cupstestppdz-rvvTrR  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  r\  r)  r,  r   r#   r  r&   r  r   r  r  r   r  r   r  rh   ru   r   ri   rj   rm   closer  r  r  r  rA   r  r  r  r  r6  rg   r  r  rT  rU  rV  rW  rM  rn   rB  r   r\   r8  r  getServerPPDrL  unlinkrK   r  r  )rm  r$  r:   r1   r!  r9   rB  file_to_download	ppdurlobjr  r  rz   	err_titleerr_textr  filenamerX  rO  rY  r  s                       r   r  zNewPrinterGUI.getNPPPD5  s   K	$//11 :344q88)U22".<<>>KKMMt^^D))!,nR(**,, :ht2??AABB  7&4477DDGGt$22Q;;6V#3#3F6N++a//+1&>!+<("$<?O$OQT$TUUU+;+A+A+C+C( 011A55(.(>(>?O(P(PI)2)9)9J%OO---!)!<!?!? :4 $

: 6 6 6 $

&*hty&9&9: : : : : : : : : : : : : : :
 fl45 .	 .	 .	(4883444"--// )3.//	 : ; ;#/==??+|~~ t^^D))!,+$$l33 I  ; < <12CC #fdk4<%HHCC**,, 3kNN	.;;== # $ $&*+ #(+A+18+=480:0B1;1;B B BA ()}}'7'7$VV6==+++CC 455	122y#t/DEEE44444].	` 	7T#YY&'''c3 	(I&&.(9(9:::
I%<<	..s33A(1++CIaLLL O O O!###MNNNNN= I I I!###GHHHHHI I$$'''
sp   G)I	 -AH<0I	 <I  I	 I I	 	Q%D:Q	 A(P	Q		P7Q		Q-AS6 6'U+UUc           	         t          d           d| _        i | _        | j        }|                                D ]}|                    |           | j        s\t          j        t          d                    }|
                    |           |                                 t          d           d S | j        j        D ]}|j        dk    rd| _        t          j                    }|                    d           |                    d           |
                    |           d	}t#          |j                  D ]1\  }}|j        d
k    r|dz  }t'          || j        |           }	|                    |	j        d	|dd           t          j                    }
|	j        rt          j                            dddd          }|                    d	d	d	d           |
                    |	j                   |                    |d|dd           |                    |
d|dd           n|                    |
d|dd           |
                    |	j        ddd	           |	| j        |j        <   3| j        sKt          j        t          d                    }|
                    |           |                                 | j                                         | j                                         d S )NzExamining installable optionsFzNo Installable Options)r  z No PPD so no installable optionsInstallableOptionsTr   r   
PageRegionre   r  g      ?r   ) rh   r'  r  r   get_childrenr*   r$  r   Labelr6  r  r  optionGroupsrA   Gridset_column_spacingset_row_spacing	enumeratekeywordr
   attachconflictIconBoxr  	Alignmentr   set_paddingr<  selectorr   rW   r@  )rm  	containerchildlrt   gridr.   r!  r  ohboxas               r   r  z&NewPrinterGUI.fillNPInstallableOptions  s   3444#( +	++-- 	$ 	$EU####x 		": ; ;<<<AMM!FFHHH:;;;F X* 	1 	1Ez111'+D$8::D##A&&&  ###MM$D'66 1 1
F>\11	 488ANAr1a888wyy7 3))3S#>>AMM1aA...EE17OOOKK1b!Q///KKaQ2222KKaQ222
E5!<<</0V^,,#1$ ' 		": ; ;<<<AMM!FFHHH$))+++$--/////r   c                    | j         r4| j                                          d | _         |                                  | j        r | j                                         d | _        | j        r4| j                                         d | _        |                                  | j        dv rL| j                                        }| j	                                        }| j
                                        }n| j        }| j        }| j        dk    rt          | j                  }	 |D ].}	 | j                            ||           # t"          $ r Y +w xY wn# t          j        $ r+}|j        \  }}	|                     ||	           Y d }~d S d }~ww xY w| j        dk    s| j        dk    r`d }
| j        j        r| j        j        }
n|                                 }
| j        s|                     d           d S | j                                        D ]}|                                 t9          | j                   t=          j                    r&t=          j                      t=          j                    &| j        !                    tE          d          |z             	 tG          |tH                    r | j        %                    |||
||           n`|| j        %                    ||
||           n?tM          j'        || j(        d	                    | j        %                    |||
||
           n# t          j        $ rX}|j        \  }}	tS          | j                   |                     ||	           | j        *                                 Y d }~d S d }~w tS          | j                   | j        *                                 tW          d           Y nxY w| j        *                                 tS          | j                   | j        dv r| j        !                    tE          d          |z             	 tM          j,        | j        |           | j        -                    ||           | j        .                    ||           nV# t          j        $ rD}|j        \  }}	|                     ||	           | j        *                                 Y d }~d S d }~ww xY w| j        *                                 nH| j        dk    r| j        !                    tE          d          |z             	 |                                 }
| j        %                    ||
           nV# t          j        $ rD}|j        \  }}	|                     ||	           | j        *                                 Y d }~d S d }~ww xY w| j        *                                 np| j        dk    rD|s4| /                                x}| _        |s|                     d           d S | j        !                    tE          d          |z             d}tG          |tH                    r| j0        1                                rZ	 | j        %                    |d           n<# t          j        $ r*}|j        \  }}	|                     ||	           Y d }~nd }~ww xY w	 | j        %                    ||           nV# t          j        $ rD}|j        \  }}	|                     ||	           | j        *                                 Y d }~d S d }~ww xY w	 | j        2                    |          }t          j3        |          }ti          j5        |           n# t          j        $ r]}|j        \  }}	|t          j6        k    rd}n5|                     ||	           | j        *                                 Y d }~d S Y d }~nd }~ww xY w| j0        1                                s:tG          | j7        t          j3                  rtM          j8        | j7        |           n tM          j'        || j(        d	                    | j                                        D ]}|                                 	 | j        %                    ||           nV# t          j        $ rD}|j        \  }}	|                     ||	           | j        *                                 Y d }~d S d }~ww xY w| j        *                                 n | j        dk    r|                     d	           | j        9                                 | j        dv r| :                    d|           nL| j        dk    r| :                    d| j;                   n%| :                    d|| j7        | j        k               d | _        i | _<        d S )N)r  rC   r  r  rC   r  r  zadding printer %s)r  r#  r  r  )r#  r  r  r   )r$  r#  r  r  re   zmodifying printer %sr#  r  r$  Fr  )r  T)r$  r  )rC   r  r  r   r   r   )=r  r   r  r(  r  r$  rk  r   r   r   r   r  r$  r<   r   r  addPrinterToClassr  r  r  r  r#  r   r  r  r  r?   	writebackrT   r   r   rI   rJ   r  r6  r\   r8  
addPrinterr  setPPDPageSizer  rO   r  fatalExceptionactivateNewPrintersetPrinterLocationsetPrinterInfor  r   r  getPPDr  rL  r=  IPP_NOT_FOUNDr  copyPPDOptionsrW   r  r)  rB   )rm  rX   rA   r  r  r$  membersmemberrz   msgr   r  r  rB  s                 r   on_btnNPApply_clickedz#NewPrinterGUI.on_btnNPApply_clicked  s
   ! 	%"**---%)D"!!$$$? 	#O##&&&"DO 	%&&)))"&D!!$$$GGG>**,,D)2244H(1133DD:Dhw&&,T-=>>G
% ! !F!	33FDAAAA' ! ! ! !! =   6C##As+++ ** $666C{ *ko''))8 r""" ,--// # #  """"$'((($'' &"%%% $'' &I&&*=(>(>(EFFF#c3'' GI((s #$ ) C C C C[I((c.2X ) G G G G  .sDM!4DEEEI((3s.2X ) G G G=   6Ct,---##As+++	((***#t,---	((***"""""I$$&&&4()))GGGI&&*@(A(AD(HIII.	4@@@	,,T8<<<	((t4444=   6C##As+++	((+++	
 I$$''''))I&&*@(A(AD(HIII''))	$$T#$6666=   6C##As+++	((+++	
 I$$''''&& !%0dh NN2&&&FI&&*@(A(AD(HIII C#s## 0)4466 44	,,T5,AAAA= 4 4 4#$6C++As333333334I((s(;;;;}    vHQ''3///I,,///FFFFF	#y//55H(8,,CIh''''}    vHQD..."++As333	00333	  /::<< Ftx88F.t}cBBBB.sDM!4DEEE #l1133 ' 'F$$&&&&I((3(7777}    vHQ''3///I,,///FFFFF	 I$$''''!222NN1""$$$GGGII----!222II0$2MNNNNII)4$(1JKKKs   !E &EE 
EE EE F# F		FBL3 3OANAO<AR S 9SS 40U% %V849V33V84Z [
  [[
[+ +\>:9\99\>A^ _2A_--_2b6 6d	9dd	)NNNr   NNNr   rF   )re   )FN)NN)F)r  r  r  r   SignalFlagsRUN_LASTr8  r  __gsignals__r  r  r  r  r  r  r  r  r  r  r  r  r{  r}  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r'  r+  r-  rH  rA  r5  r?  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r+  r5  r/  r4  r?  rP  rW  r]  r  r  r  r  r|  r:  r  r  rb  r`  ra  r
  r  r  r  r!  r)  r.  r0  r2  r4  rH  r  rO  rR  rU  rW  rT  rU  rE  rV  rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  re  r  r  r  r  r  rj  r   r   r   r   r      s        %094D$094#H$094!"%& %,$7$@$#O$094D
 
L !"!" !J 
 !& 
 
"a" a" a"F	" " "# # #     ! ! !Q Q Q
  B B B     AEDE` ` ` `D  J J J= = =. . .
" " "" " ") ) )4! ! !K K K     
! ! !2  0  4) ) )$ $ $$ $ $6 6 66 6 6   :    & & &P8 8 8t/> /> />b  b b b bJM M M^! ! !F G  G  GD% % %N4 N4 N4`N N N4  	 	 	c( c( c(JM( M( M(^* * * 2! 2! 2!h: : :9 9 98A6 A6 A6F     6 6 6 A A A A2& & &/ / /  8  
"0 "0 "0H  4  ,Q Q Q Qf(' (' (' ('T$> $> $>L) ) )  _S _S _S _SF  <F< F< F<P8 8 8
* * *, , ,A A A`) `) `)DK K K  &I I I&  &  & P$ $ $<$ $ $     ; ; ;K= K= K=Z	% 	% 	%  
  
  6 6 6 ) ) )* * *)! )! )!V# # #  J) J) J)Xc c cJ  
  8 8 8D  ,% % %&+ + +\6 6 6t& & &P  H H H42 2 2h< < <
L L LL L L\  
0= 0= 0=d
! 
! 
!+ + +@_, _, _,B  *A A A  t t tla a aJ20 20 20lw w w w wr   r   c                  $    t          d           d S )Na  
This is the test/debug mode of the new-printer dialog of system-config-printer.

Options:

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

  --devid   Supply a device ID which should be used for the
            setup of the new printer with "--setup-printer".
            This can be any printer's ID, so that driver 
            selection can be tested for printers which are not
            physically available.
)rY  r   r   r   	show_helpro    s#    	 
1 
2 
2 
2 
2 
2r   __main__re   r   zsetup-printer=zdevid=z--setup-printerz--deviduiSYSTEM_CONFIG_PRINTER_UIc                  ,    t          j                     d S rF   )r   	main_quit)r  s    r   	on_signalru    s    r   r   r   r   r  )r  r  rC   rF   )Wr4  r  r  r   r  sysrL  r  ra  rp   http.clientrz  r  r  rT  timedopsr  gi.repositoryr   r   r  r  r  r]  r  r   r   guir	   optionwidgetsr
   r  re  urllib.requestr   urllib.parsesmburir   errordialogsr   r  r  r(  rB  r  gettextinstallr5  r   rk   r6  r  r   r3   r<   rD   rO   rT   rZ   r_   r}   r   ro  r  getopt
gnu_getoptargvrn  r  GetoptErrorexitsetup_printerr  optoptargrR  	ppdippstr	setlocalerK  r  set_debuggingset_debugprint_fnrh   rh  ru  rE  mainr   r   r   <module>r     s  2       3 3 3 3 3 3  / / / / / / / / / / / / / / / / / / / / / / / /                            LLLOOOOO  ! ! ! ! ! !             & & & & & &         # # # # # # # #           ) ) ) ) ) )                      v~1A B B B Bq ) * *               6 6 6      @ZC ZC ZC ZC ZCF ZC ZC ZCxF2 2 2 zMMM&V&b)9)1)34 4
dd    	! ME  V###"MMIE-1BJ)*FfmR(((INM4!K!:...A   II	***II!9---II ),,, 	"}EJJJJ		CHKKKKKI s   A A%$E $E*)E*