
    Kcqg                        d dl Z d dlZd dlmZ 	 d dlZ ej        dd           d dlmZ  ej        dd           d dlmZ n#  Y nxY w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	Zd
Zd	ZdZda G d d          Z G d d          Z G d d          Zedk    rQd dlmZ d dlmZ  ed            G d d          Z e             d dlmZ  ed            ej                     dS dS )    N)reduceGdkz3.0)r   Gtk)r   )*z#org.opensuse.CupsPkHelper.Mechanism/z1org.opensuse.CupsPkHelper.Mechanism.NotPrivilegedc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )_PK1AsyncMethodCallc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d| _
        t          d| z             d S )NFz+_PK1AsyncMethodCall: %s)_bus_conn_pk_method_name_pk_args_client_reply_handler_client_error_handler
_unpack_fn_fallback_fn_fallback_args_fallback_kwds
_destroyed
debugprint)selfbusconnpk_method_namepk_argsreply_handlererror_handler	unpack_fnfallback_fnargskwdss              ,/usr/share/system-config-printer/asyncpk1.py__init__z_PK1AsyncMethodCall.__init__<   sq     	
-%2"%2"#'"".566666    c                 4    t          j        d| z             d S )Nz-_PK1AsyncMethodCall: %sdebugr   r   s    r"   __del__z_PK1AsyncMethodCall.__del__L   s    4t;<<<<<r$   c                    | j                             t          t                    }t	          j        |t                    }|                    | j                  }	 t          | d|            || j
        | j        | j        dd d S # t          $ r>}t          dt          |          z             |                                  Y d }~d S d }~ww xY w)N
: calling i  )r   r   timeoutzType error in PK call: %s)r   
get_objectCUPS_PK_NAMECUPS_PK_PATHdbus	InterfaceCUPS_PK_IFACEget_dbus_methodr   r   r   _pk_reply_handler_pk_error_handler	TypeErrorreprcall_fallback_fn)r   objectproxy	pk_methodes        r"   callz_PK1AsyncMethodCall.callO   s    %%lLAA66))4+?@@		%DDD))<===I&*&<&*&< $& & & & & &  	% 	% 	%3dAhh>???!!$$$$$$$$$	%s   -B
 

C3CCc                 `    t          d| z             d| _        | `| `| `| `| `| `| `| `	| `
| `d S )NDESTROY: %sT)r   r   r   r   r   r   r   r   r   r   r   r   r(   s    r"   _destroyz_PK1AsyncMethodCall._destroy^   sZ    MD()))IJ M&&Or$   c                    | j         rd S t          |          dk    r	 t          j                     n#  Y nxY wt	          | d| j                   |                     | j         | j        |            	 t          j                     n#  Y nxY w| 	                                 d S t	          dt          |          z             |                                  d S )N z": no error, calling reply handler z PolicyKit method failed with: %s)r   strr   threads_enterr   r   r   r   threads_leaver@   r7   r8   )r   errorr    s      r"   r4   z%_PK1AsyncMethodCall._pk_reply_handlerl   s    ? 	F;;"!$$$$t99; < < <&&
ODOd4KLLL!$$$$MMF6uEFFF     s   2 66B
 
Bc                 
   | j         rd S |                                t          k    rt          j        t          j        d          }	 t          j                     n#  Y nxY wt          | d| j	                   | 	                    | j
        |           	 t          j                     n#  Y nxY w|                                  d S t          d| j        dt          |                     |                                  d S )Npkcancelz!: no auth, calling error handler zPolicyKit call to z did not work: )r   get_dbus_nameCUPS_PK_NEED_AUTHcupsIPPErrorIPP_NOT_AUTHORIZEDr   rD   r   r   r   rE   r@   r   r7   r8   r   excs     r"   r5   z%_PK1AsyncMethodCall._pk_error_handler   s!   ? 	F#444-!8*EEC!$$$$t99; < < <&&
C888!$$$$MMF
)))4:::7 	8 	8 	8     s   A AB+ +B/c                     | j         | j        d<   | j        | j        d<   t          | d| j                    | j        | j        i | j         d S )Nr   r   r+   )_ipp_reply_handlerr   _ipp_error_handlerr   r   r   r(   s    r"   r8   z$_PK1AsyncMethodCall.call_fallback_fn   sc    /3/FO,/3/FO,d.?.?@AAAD/G43FGGGGGr$   c                     | j         rd S t          | d| j                    | j        | j        g|R   |                                  d S Nz: chaining up to )r   r   r   r   r@   r   r   r    s      r"   rQ   z&_PK1AsyncMethodCall._ipp_reply_handler   n    ? 	Fttt/3/I/IK 	L 	L 	L""DJ66666r$   c                     | j         rd S t          | d| j                    | j        | j        g|R   |                                  d S rT   )r   r   r   r   r@   rU   s      r"   rR   z&_PK1AsyncMethodCall._ipp_error_handler   rV   r$   N)__name__
__module____qualname__r#   r)   r=   r@   r4   r5   r8   rQ   rR    r$   r"   r	   r	   ;   s        7 7 7 = = =% % %     ! ! !,! ! !0H H H      r$   r	   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_WriteToTmpFilec                     || _         || _        t          j        d          \  }}t	          j        |           || _        t          d|z             || _        d S )Nz/tmp)dirzCreated tempfile %s)	_reply_handler_error_handlertempfilemkstemposclose	_filenamer   _kwds)r   r!   r   r   tmpfdtmpfnames         r"   r#   z_WriteToTmpFile.__init__   sb    ++ %,&999
%!)H4555


r$   c                     	 t          j        | j                   t          j        d| j        z             d S #  t          j        d           Y d S xY w)NzRemoved tempfile %szNo tempfile to remove)rd   unlinkrf   r'   r   r(   s    r"   r)   z_WriteToTmpFile.__del__   s\    	7It~&&&3dnDEEEEE	75666666s	   59 Ac                     | j         S N)rf   r(   s    r"   get_filenamez_WriteToTmpFile.get_filename   s
    ~r$   c                    t          j        | j        t           j                  }t          j        |d          }d| j        v r| j        d         }t          j        |dt           j                   |                                }|dk    rBt          j	        ||
                    d                     |                                }|dk    Bn~| j        d         }|                    d           |                                }|dk    rB|	                    |
                    d                     |                                }|dk    B|                                 |                     ||           d S )Nrtfdr   rB   zUTF-8file)rd   openrf   O_RDONLYfdopenrg   lseekSEEK_SETreadlinewriteencodeseekre   r`   )r   r   nonerh   tmpfilerq   linefile_objects           r"   r   z_WriteToTmpFile.reply_handler   sR   55)UD))4:D!BHb!R[)))##&&D"**"dkk'22333''** "** *V,Ka   ##&&D"**!!4;;w#7#7888''** "** 	T4(((((r$   c                 2    |                      ||           d S rm   )ra   r   r   rO   s      r"   r   z_WriteToTmpFile.error_handler   s    T3'''''r$   N)rX   rY   rZ   r#   r)   rn   r   r   r[   r$   r"   r]   r]      s_        
 
 
7 7 7  ) ) )*( ( ( ( (r$   r]   c                   h    e Zd Z	 	 d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S )PK1ConnectionNc                    t          j        ||||||          | _        	 t          j                    | _        n(# t          j        j        t          f$ r
 d | _        Y nw xY wt          | j        r	 | j        
                    t          t                    }t          j        |t          j                  }|                                }	t           j        j                            |	          }
|
                    d          D ]}|j                            d          t.          k    r&|                    d          D ]}}|j                            d          dk    r!d}|                    d          D ](}|j                            d          }|d	k    r#|d
z  })|dk    a	t1          d|dk    z               n6# t2          $ r)}t1          dt5          |          z             Y d }~nd }~ww xY wt7          | j        j                  }g }t;          | j                  D ]}|                    d          rt?          | j        |          }t7          |          |k    rAtA          | |          s9tC          | || "                    |                     |#                    |           || _$        t1          d| z             d S )N)r   r   hostport
encryptionparent	interfacenamemethod
DevicesGetr   arg	directionin      zDevicesGet new API: %sz&Exception assessing DevicesGet API: %s_+%s)%asyncippIPPAuthConnectionr   r0   	SystemBus_system_bus
exceptionsDBusExceptionAttributeError_DevicesGet_uses_new_apir-   r.   r/   r1   INTROSPECTABLE_IFACE
IntrospectxmletreeElementTreeXMLfindallattribgetr2   r   	Exceptionr7   typegetPrintersr_   
startswithgetattrhasattrsetattr_make_bindingappend	_bindings)r   r   r   r   r   r   r   objr:   apitopr   r   num_argsr   r   r<   
methodtypebindingsfnamefns                        r"   r#   zPK1Connection.__init__   s   /@M7;$=G9?	A A A
	$#~//D-~> 	$ 	$ 	$#D	$
 $+0@+Q&11,MMT-FGG&&))i+//55!$k!:!:  I '++V44EE "+"3"3X">">  !=,,f55EE$#$#)>>5#9#9 * *C(+
(D(DI(D00 ($MHH3;q=0"$<A$NOOO Q Q QDtQxxOPPPPPPPPQ 4:122
$*%% 	( 	(E%% $*e,,BRyyJ&&D%(( (ud&8&8"&=&=>>>'''!EDL!!!!!s(   : "AA3EF? ?
G2	G--G2c                 4    t          j        d| z             d S Nz-%sr&   r(   s    r"   r)   zPK1Connection.__del__&  s    %$,'''''r$   c                       fd}|S )Nc                      t          d d d |                    d          |                    d          d | |
  
        }|                                 d S )Nr   r   )r	   r   r8   )r    r!   opr   r   s      r"   bindingz,PK1Connection._make_binding.<locals>.binding*  s[    $dD$&*hh&@&@&*hh&@&@&*Bd< <B """""r$   r[   )r   r   r   s   `` r"   r   zPK1Connection._make_binding)  s)    	# 	# 	# 	# 	# 	# r$   c                     t          d| z             | j                                         | j        D ]}t	          | |           d S Nr?   )r   r   destroyr   delattr)r   r   s     r"   r   zPK1Connection.destroy3  sW    MD()))
~ 	$ 	$GT7####	$ 	$r$   c                      ||          S rm   r[   )r   typvals      r"   _coercezPK1Connection._coerce:  s    sCyyr$   c           
         |                                 }|                    d          }|                    d          }d|v r|d= d|v r|d= d|v r|d= d||dg}| j        |S g }	d}
|D ]}	 |                     ||
         |          }nj# t          $ r ||
         \  }}||k    r|cY c S |
dz  }
Y Ht
          $ r6}t          d	t          |          d
||
                    |cY d}~c S d}~ww xY w|	                    |           |
dz  }
||
d         D ]\  }}||v r	 |                     ||
         ||                   }nI# t
          $ r<}t          d	t          ||                   d
||
                    |cY d}~c S d}~ww xY w|	                    |           ||= n|	                    |           |
dz  }
|r@t          dt          t          |
                                                    z             |S d|d<   t          |	          |d<   t          d|d|d
t          |	                     |S )z+Collapse args and kwds into a single tuple.r   r   auth_handlerTr[   Nr   r   zError converting z to zLeftover keywords: %sF   z
Converted r   )copyr   r   r   
IndexErrorr6   r   r7   r   listkeystuple)r   typesparamsr    r!   leftover_kwdsr   r   resulttupargindexr   r   kwdefaultr<   s                   r"   _args_kwds_to_tuplez!PK1Connection._args_kwds_to_tuple=  s   		%))?;;%))?;;m++o.m++o.]**n-}b9#M 	 	CllE(OS99 	 	 	$X.Gc>>!MMMMM A   
!3ZZZZx: ; ; ;
 JJMHH!()), 	 	KB]""",,hr9JKKCC  " " "J!%}R'8!9!9!9!95??!L M M M!MMMMMMMM"
 

C   !"%%

G$$$MHH 	/$]=O=O=R=R8S8S2T2TTUUUMq	3KKq	
tttTTT5#;;;GHHHsH   ,B		C0*C01	C0:)C+#C0+C0""E
F/F>FFc
                 :   t          | j        | ||||||||	
  
        }
|se	 t          d|z             |
                                 n=# t          j        $ r+}t          dt          |          z             d}Y d }~nd }~ww xY w|r|
                                S d S )NzCalling PK method %szD-Bus call failed: %sT)r	   r   r   r=   r0   r   r7   r8   )r   
use_pycupsr   r   r   r   r   r   r    r!   asyncmethodcallr<   s               r"   _call_with_pkzPK1Connection._call_with_pk}  s     .t/?/=w/</</8+/3T; ;  	""2^CDDD$$''''% " " "3dAhh>???!





"  	7"33666	7 	7s   &A B!A==Bc                     d S rm   r[   r(   s    r"   _nothing_to_unpackz PK1Connection._nothing_to_unpack  s    tr$   c                    t           r>|                     t          t          t          t          gdddg fdg fg||          \  }}}}n|                     t          t          t          gddg fdg fg||          \  }}}}|s\t          |          }dD ];}t	          ||                   dk    rt          d ||                   ||<   6d||<   <t          |          }|                     |d	|||| j        | j	        j
        ||	  	         d S )
N)r,   r   )limitr   include_schemesexclude_schemes)r      r   c                     | dz   |z   S )N,r[   )xys     r"   <lambda>z*PK1Connection.getDevices.<locals>.<lambda>  s    9:S1 r$   rB   r   )r   r   intr   lenr   r   r   _unpack_getDevices_replyr   
getDevices)	r   r    r!   r   r   r   r   newtup
paramindexs	            r"   r   zPK1Connection.getDevices  sk   # 	%,,sCt.D/=/;0A2/F0A2/F/H /3D: :ZS ,,sD$.?/;0A2/F0A2/F/H /3D	: :Z  % s"( 0 0JF:.//!33-3 6E 6E5;J5G.I .Iz** .0z**VnnJ(#}m 9 J14	? 	? 	? 	? 	?r$   c                    t                      }|                                D ]G\  }}t          |          t          j        k    r t          |          |t          |          <   B|||<   Ht                      }d}dt          |          z   fd|                                D             }t          |          dk    rd }t                      }	|D ]C}
|
d t          |
          t                    z
           }|dk    r||
         |	|<   ;||
         }D||	||<   |dz  }dt          |          z   fd|                                D             }t          |          dk    |S )Nr   :c                 >    g | ]}|                               |S r[   endswith.0r   affixs     r"   
<listcomp>z:PK1Connection._unpack_getDevices_reply.<locals>.<listcomp>  s*    KKKQ

E8J8JKqKKKr$   z
device-urir   c                 >    g | ]}|                               |S r[   r   r   s     r"   r   z:PK1Connection._unpack_getDevices_reply.<locals>.<listcomp>  s*    OOOAJJ<N<NO1OOOr$   )dictitemsr   r0   StringrC   r   r   )r   dbusdict
result_strkeyvaluedevicesndevice_keys
device_uridevice_dictkeywithaffixr   s              @r"   r   z&PK1Connection._unpack_getDevices_reply  s   VV
"..++ 	( 	(JCSzzT[(((+U
399%%"'
3
 &&c1ggKKKK*//"4"4KKK;!##J&&K + : :"#DC$6$6e$D#DE,&&'1,'?K$$!+L!9JJ%&1
#FA#q''MEOOOOjoo&8&8OOOK ;!##" r$   c                     |                      t          t          gddg||          \  }}}}|                     |d|||| j        | j        j        ||	  	         d S )NNN)NFJobCancelPurge)r   r   boolr   r   r   	cancelJobr   r    r!   r   r   r   r   s          r"   r  zPK1Connection.cancelJob  sz    ((3++7+8+:*.6 6	]M	
 	J,c=- 3 J0$	> 	> 	> 	> 	>r$   c                     |                      t          t          gddg||          \  }}}}|                     |d|||| j        | j        j        ||	  	         d S )Nr  JobSetHoldUntil)r   r   rC   r   r   r   setJobHoldUntilr  s          r"   r  zPK1Connection.setJobHoldUntil  s    ((3*+7+7+9*.6 6	]M	
 	J-sM)4+B J6d	D 	D 	D 	D 	Dr$   c                     |                      t          gdg||          \  }}}}|                     |d|||| j        | j        j        ||	  	         d S )Nr  
JobRestart)r   r   r   r   r   
restartJobr  s          r"   r  zPK1Connection.restartJob  sr    ((3%+7.*.6 6	]M	 	J(#})4+B J14	? 	? 	? 	? 	?r$   c                 T   |                      t          t          gddg||          \  }}}}|rt          |          dk    rd|v st          |          dk    rd}|                                D ]
}|dvrd} n|rt          |          dk    r	|d         }	n|d         }	t	          |||          }
|                     dd	|	|
                                f|
j        |
j        | j	        | j
        j        ||	  	         d S |                     |d	|||| j	        | j
        j        ||	  	         d S )
N)resourceN)filenameNr   r  r   T)r  rq   rr   r   r   FFileGet)r   rC   r   r   r]   r   rn   r   r   r   r   getFile)r   r    r!   r   r   r   r   can_use_tempfileeachr  wrappers              r"   r  zPK1Connection.getFile  s   ((3*+=+=+?*.6 6	]M	  	dqZ4%7%7dq#'  IILL  D $F F F+0(F
 $ DzzQ#'
#3#'7-t/</<> >G &&(1)173G3G3J3J(K(/(=(/(=(,(?(,
(:D$H H H FJ%sM)4+B J.d	< 	< 	< 	< 	<r$   )NNNNNN)rX   rY   rZ   r#   r)   r   r   r   r   r   r   r   r   r  r  r  r  r[   r$   r"   r   r      s        9=?C;" ;" ;" ;"z( ( (  $ $ $  > > >@7 7 7*  #? #? #?J     D
> 
> 
>
D 
D 
D	? 	? 	?(< (< (< (< (<r$   r   __main__)GObject)set_debuggingTc                   z    e 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 Zd ZdS )UIc                     t          j                    }t          j                    }|                    |           t           j                            d          }|                    |ddd           |                    d| j                   t           j                            d          }|                    |ddd           |                    d| j	                   |
                    d           || _        t           j                            d          }|                    |ddd           |                    d| j                   |
                    d           || _        t           j                            d          }|                    |ddd           |                    d| j                   |
                    d           || _        t           j                            d          }|                    |ddd           |                    d| j                   |
                    d           || _        |                    d	| j                   |                                 d | _        t+          d
| z             d S )NGoFr   clickedFetchz
Cancel jobzGet filezSomething harmlessr   r   )r   WindowVBoxaddButtonnew_with_label
pack_startconnectbutton_clickedfetch_clickedset_sensitivefetch_buttoncancel_clickedcancel_buttonget_file_clickedget_file_buttonharmless_clickedharmless_buttonr   show_allr   r   )r   wvbs       r"   r#   zUI.__init__J  s&   
AAEE1III
))400ALL!UE1---IIy$"5666
))733ALL!UE1---IIy$"4555OOU### !D
))<88ALL!UE1---IIy$"5666OOU###!"D
)):66ALL!UE1---IIy$"7888OOU####$D 
))+?@@ALL!UE1---IIy$"7888OOU####$D IIy$,///JJMMMDI%%%%%r$   c                 4    t          j        d| z             d S r   r&   r(   s    r"   r)   z
UI.__del__j  s    edl+++++r$   c                     t          d| z             	 | j                                         | `n# t          $ r Y nw xY wt	          j                     d S r   )r   r   r   r   r   	main_quit)r   windows     r"   r   z
UI.destroym  sk    ,---	!!$$$II!    Ms   0 
==c                     | j         r| j                                          t          | j        | j                  | _         d S Nr   r   )r   r   r   	connectedconnection_errorr   buttons     r"   r'  zUI.button_clickedw  sG    y %	!!$$$%T^595JL L LDIIIr$   c                     t          d           | j                            d           | j                            d           | j                            d           | j                            d           d S )N	ConnectedT)printr*  r)  r,  r.  r0  r   r   r   s      r"   r<  zUI.connected~  sr    +++T222,,d333 ..555 ..55555r$   c                 $    t          d           |)NzFailed to connect)rB  )r   r   rF   s      r"   r=  zUI.connection_error  s    %&&&Kr$   c                 p    t          d           | j                            | j        | j                   d S )Nzfetch devices...r;  )rB  r   r   got_devicesget_devices_errorr>  s     r"   r(  zUI.fetch_clicked  sJ    %&&&I  0@040F ! H H H H Hr$   c                 b    || j         k    rt          d           d S t          d|z             d S )NzIgnoring stale replyzgot devices: %sr   rB  )r   r   r   s      r"   rF  zUI.got_devices  s=    ty  ,---#g-.....r$   c                 |    || j         k    rt          d           d S t          dt          |          z             d S )NIgnoring stale errorzdevices error: %sr   rB  r7   r   s      r"   rG  zUI.get_devices_error  sC    ty  ,---%c

233333r$   c                 r    t          d           | j                            d| j        | j                   d S )NzCancel job...r   r;  )rB  r   r  job_canceledcancel_job_errorr>  s     r"   r+  zUI.cancel_clicked  sL    /"""I/3/@/3/D   F F F F Fr$   c                 b    || j         k    rt          d|z             d S t          d           d S )NIgnoring stale reply for %szJob canceledrI  r   r   r|   s      r"   rN  zUI.job_canceled  s<    ty  3d:;;;.!!!!!r$   c                     || j         k    rt          d|z             d S t          dt          |          z             d S )NzIgnoring stale error for %szcancel error: %srL  r   s      r"   rO  zUI.cancel_job_error  sH    ty  3d:;;;$tSzz122222r$   c                     t          dd          | _        | j                            d| j        | j        | j                   d S )Nz
cupsd.confr2  z/admin/conf/cupsd.conf)rr   r   r   )rs   my_filer   r  got_fileget_file_errorr>  s     r"   r-  zUI.get_file_clicked  sS    s33DLI7dl-1]-1-@  B B B B Br$   c                 b    || j         k    rt          d|z             d S t          d           d S )NrQ  zGot filerI  rR  s      r"   rV  zUI.got_file  s<    ty  3d:;;;*r$   c                 |    || j         k    rt          d           d S t          dt          |          z             d S )NrK  zget file error: %srL  r   s      r"   rW  zUI.get_file_error  sC    ty  ,---&s344444r$   c                 R    | j                             | j        | j                   d S r:  )r   getJobsgot_jobsget_jobs_errorr>  s     r"   r/  zUI.harmless_clicked  s:    IT]-1-@  B B B B Br$   c                 |    || j         k    r!t          dt          |          z             d S t          |           d S )NzIgnoring stale reply from %srL  rC  s      r"   r\  zUI.got_jobs  s=    ty  4tT{{BCCC&MMMMMr$   c                 D    t          dt          |          z             d S )Nzget jobs error: %s)rB  r7   rN   s     r"   r]  zUI.get_jobs_error  s"    &s344444r$   N)rX   rY   rZ   r#   r)   r   r'  r<  r=  r(  rF  rG  r+  rN  rO  r-  rV  rW  r/  r\  r]  r[   r$   r"   r  r  I  s2       	& 	& 	&@	, 	, 	,	 	 		L 	L 	L	6 	6 	6	 	 		H 	H 	H
	/ 	/ 	/	4 	4 	4	F 	F 	F	" 	" 	"	3 	3 	3	B 	B 	B	 	 		5 	5 	5	B 	B 	B	 	 		5 	5 	5 	5 	5r$   r  )DBusGMainLoop)set_as_default)rK   r0   	functoolsr   girequire_versiongi.repositoryr   r   rd   sysrb   xml.etree.ElementTreer   r   r'   r.   r/   r2   rJ   r   r	   r]   r   rX   r  r  r  dbus.mainloop.glibr`  mainr[   r$   r"   <module>rj     sC  *        	IIIBue$$$!!!!!!Bue$$$!!!!!!!	D 				 



           55G    
v v v v v v v vv-( -( -( -( -( -( -( -(d< < < < < < < <z
 z%%%%%%######M4F5 F5 F5 F5 F5 F5 F5 F5P BEEE000000M$''''CHKKKKK_ s   2A A