
    Hf                         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Zd dlZd dl	Z	d dl
Z
 e
j                  e	j                  e	j                         d dl  ej                          ej                   j"                  j                           G d d	e      Z G d
 d      Z G d de      Z G d dej,                        Z G d de      Zy)    N)GObject)GLib)Gdk)Gtk)domain	localedir)*c                       e Zd Zy)OperationCanceledN)__name__
__module____qualname__     ,/usr/share/system-config-printer/timedops.pyr   r   '   s    r   r   c                       e Zd Zd Zd Zy)Timedc                      y Nr   selfs    r   runz	Timed.run+   s    r   c                      yNFr   r   s    r   cancelzTimed.cancel.   s    r   N)r   r   r   r   r   r   r   r   r   r   *   s    r   r   c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
TimedSubprocessNc                    t        j                  di || _        t               | _        g | _        d| _        || _        || _        || _	        | j                  j                  | j                  j                  fD ]  }|t        j                  |t        j                  t        j                  t        j                   z  t        j"                  z  | j$                        }| j
                  j'                  |        d | _        y )N   r   )
subprocessPopensubpdictoutput	io_sourcewatcherstimeoutparentshow_dialogstdoutstderrr   io_add_watchPRIORITY_DEFAULTIO_INIO_HUPIO_ERRwatcherappendwait_window)r   r'   r(   r)   argsfsources          r   __init__zTimedSubprocess.__init__2   s    $$--	f&))""DII$4$45 	/A}**A,0,A,A,0JJ,0KK-8,0KK-8 -1LL: %%v.	/  r   c                 \   | j                   r%t        j                  d| j                        | _        t        j
                  | j                  | j                        | _        t        j                          | j                  rt        j                  | j                         | j                   rt        j                  | j                         | j                  D ]  }t        j                  |        | j                  | j                  j                          | j                  j!                  | j"                  j$                  d      j'                  d      | j                  j!                  | j"                  j(                  d      j'                  d      | j"                  j+                         fS )N    
)r)   r   timeout_add_secondsshow_wait_windowwait_sourcetimeout_addr'   
do_timeouttimeout_sourcer   mainsource_remover%   r3   destroyr$   getr"   r*   splitr+   poll)r   r6   s     r   r   zTimedSubprocess.runG   s5   #77%% 'D #..04A 3 34 0 01nn 	(F'	('$$'!1!126<<dC!1!126<<dC		!# 	#r   c                 :    d | _         t        j                          yr   )rA   r   	main_quitr   s    r   r@   zTimedSubprocess.do_timeout\   s    "r   c                 Z   |t         j                  z  rM| j                  j                  |d      }||j	                         j                  d      z  }|| j                  |<   |t         j                  z  r8| xj                  dz  c_        | j                  dk(  rt        j                          y)Nr:   zutf-8r9   r   T)
r   r.   r$   rE   readdecoder/   r&   r   rI   )r   r6   	conditionbuffers       r   r1   zTimedSubprocess.watchera   s~    tzz![[__fb1Fv{{~--g66F"(DKKt{{"MMQM}}! r   c           
      p   t        j                          t        j                  | j                  ddt        j
                  j                  t        j                  j                  t        d            }|j                  dd        |j                  d| j                         | j                  r|j                  | j                         |j                  t        j                  j                         |j!                  t        d             |j#                          || _        t        j&                          y)	NTPlease waitr(   modaldestroy_with_parentmessage_typebuttonstextdelete_eventc                       yr   r   r4   s    r   <lambda>z2TimedSubprocess.show_wait_window.<locals>.<lambda>u       r   responseGathering informationF)r   threads_enterr   MessageDialogr(   MessageTypeINFOButtonsTypeCANCEL_connectwait_window_responseset_transient_forset_positionWindowPositionCENTER_ON_PARENTformat_secondary_textshow_allr3   threads_leaver   waits     r   r=   z TimedSubprocess.show_wait_windown   s      (,$/2/C/C*-//*@*@'('7	9
 	n&9:j$";";<;;""DKK03-->>?""A&=$>?r   c                 `    |t         j                  j                  k(  r| j                          y y r   r   ResponseTyperc   r   r   dialogr\   s      r   rf   z$TimedSubprocess.wait_window_response   $    s''...KKN /r   c                 n    | j                   dkD  r&t        d       t        j                          d| _         y)Nr   Command canceledF)r&   
debugprintr   rI   r   s    r   r   zTimedSubprocess.cancel   s+    ==1*+MMDMr   )i`  NT)
r   r   r   r7   r   r@   r1   r=   rf   r   r   r   r   r   r   1   s%     *#*
$r   r   c                   &    e Zd Zddi fdZd Zd Zy)OperationThreadNr   c                     t         j                  j                  |        | j                  d       || _        || _        || _        d | _        d | _        y )NT)		threadingThreadr7   	setDaemontargetr4   kwargs	exceptionresult)r   r   r4   r   s       r   r7   zOperationThread.__init__   sE    !!4(	r   c                     	 t        d| j                  z          | j                  | j                  i | j                  | _        t        d       y # t
        $ r}t        d|z         || _        Y d }~y d }~ww xY w)Nz
Calling %sDonezCaught exception %s)rx   r   r4   r   r   	Exceptionr   )r   es     r   r   zOperationThread.run   sf    	t{{23%$++		AT[[ADK 	-12DNN	s   AA 	A9A44A9c                 ~    | j                         r
t               | j                  r| j                  | j                  S r   )is_aliver   r   r   r   s    r   collect_resultzOperationThread.collect_result   s0    ==#%%>>.. {{r   )r   r   r   r7   r   r   r   r   r   rz   rz      s    #"R r   rz   c                   8    e Zd Zdi ddddfdZd Zd Zd Zd Zy)	TimedOperationr   NFc                    d | _         || _        || _        || _        || _        t        |||      | _        | j                  j                          |d u| _        | j                  r&t        j                  d| j                        | _        y y )N)r   r4   r   2   )r3   r(   r)   callbackcontextrz   threadstartuse_callbackr   r?   _check_threadrA   )r   r   r4   r   r(   r)   r   r   s           r   r7   zTimedOperation.__init__   s    & %f,0.46 	$D0"&"2"2B8J8J"KD r   c           
         | j                   rt        | j                  rt        j                  | j
                  ddt        j                  j                  t        j                  j                  t        d            }|j                  dd        |j                  d| j                         | j
                  r|j                  | j
                         |j                  t        j                  j                          |j#                  t        d             |j%                          t'        j(                  d| j*                        | _        t        j.                          | j,                  rt'        j0                  | j,                         | j                  rj3                          | j4                  j7                         S )	NTrP   rQ   rW   c                       yr   r   rY   s    r   rZ   z$TimedOperation.run.<locals>.<lambda>   r[   r   r\   r]   r   )r   RuntimeErrorr)   r   r_   r(   r`   ra   rb   rc   rd   re   _wait_window_responserg   rh   ri   rj   rk   rl   r   r?   r   rA   rB   rC   rD   r   r   rn   s     r   r   zTimedOperation.run   s3   $$T[[,0d36??3G3G.1oo.D.D+,]+;	=D
 LL.*=>LL*d&@&@A{{&&4s11BBC&&*A(BCMM"..D4F4FG 3 34LLO{{)),,r   c                    | j                   j                         ryd| _        | j                  r| j                  | j
                  F| j	                  | j                   j                  | j                   j                  | j
                         y| j	                  | j                   j                  | j                   j                         yt        j                          y)NTF)
r   r   rA   r   r   r   r   r   r   rI   r   s    r   r   zTimedOperation._check_thread   s    ;;" $}}(<<+MM4;;#5#5t{{7L7L#'<<1 	 MM4;;#5#5t{{7L7LM  MMr   c                 `    |t         j                  j                  k(  r| j                          y y r   rq   rs   s      r   r   z$TimedOperation._wait_window_response   ru   r   c                 j    t        d       | j                  rd | _        yt        j                          y)Nrw   F)rx   r   r   r   rI   r   s    r   r   zTimedOperation.cancel   s/    &' DM  MMr   )r   r   r   r7   r   r   r   r   r   r   r   r   r      s*    %'4#dDL -8&r   r   )dbus.mainloop.glibdbusgi.repositoryr   r   r   r   r    r|   configgettextinstallPACKAGEr   debugthreads_initmainloopglibr   r   r   r   r}   rz   r   r   r   r   <module>r      s   *  !        v~~1A1A B 
          "	 	 Ye Yvi&& :KU Kr   