3
Z                  @   s   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 dlT ej  ejjj  G dd	 d	eZG d
d dZG dd deZG dd dejZG dd deZdS )    N)GObject)GLib)Gdk)Gtk)Zdomain	localedir)*c               @   s   e Zd ZdS )OperationCanceledN)__name__
__module____qualname__ r   r   ,/usr/share/system-config-printer/timedops.pyr   '   s   r   c               @   s   e Zd Zdd Zdd ZdS )Timedc             C   s   d S )Nr   )selfr   r   r   run+   s    z	Timed.runc             C   s   dS )NFr   )r   r   r   r   cancel.   s    zTimed.cancelN)r	   r
   r   r   r   r   r   r   r   r   *   s   r   c               @   sF   e Zd ZdddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dS )TimedSubprocess`  NTc             K   s   t jf || _t | _g | _d| _|| _|| _|| _	xN| jj
| jjgD ]:}|d k	rFtj|tjtjtjB tjB | j}| jj| qFW d | _d S )N   )
subprocessPopensubpdictoutput	io_sourcewatcherstimeoutparentshow_dialogstdoutstderrr   Zio_add_watchZPRIORITY_DEFAULTIO_INIO_HUPZIO_ERRwatcherappendwait_window)r   r   r   r   argsfsourcer   r   r   __init__2   s     
zTimedSubprocess.__init__c             C   s   | j rtjd| j| _tj| j| j| _t	j
  | jrBtj| j | j rTtj| j x| jD ]}tj| q\W | jd k	r| jj  | jj| jjdjd| jj| jjdjd| jj fS )N    
)r   r   Ztimeout_add_secondsshow_wait_windowZwait_sourcetimeout_addr   
do_timeouttimeout_sourcer   mainsource_remover   r%   destroyr   getr   r   splitr    Zpoll)r   r(   r   r   r   r   G   s$    



zTimedSubprocess.runc             C   s   d | _ tj  dS )NF)r0   r   	main_quit)r   r   r   r   r/   \   s    zTimedSubprocess.do_timeoutc             C   sb   |t j@ r4| jj|d}||j jd7 }|| j|< |t j@ r^|  jd8  _| jdkr^tj	  dS )Nr+   zutf-8r*   r   T)
r   r!   r   r4   readdecoder"   r   r   r6   )r   r(   Z	conditionbufferr   r   r   r#   a   s    



zTimedSubprocess.watcherc             C   s   t j  tj| jddtjjtjjt	dd}|j
ddd  |j
d| j | jr\|j| j |jtjj |jt	d |j  || _t j  d	S )
NTzPlease wait)r   modaldestroy_with_parentmessage_typebuttonstextdelete_eventc              W   s   dS )NFr   )r&   r   r   r   <lambda>u   s    z2TimedSubprocess.show_wait_window.<locals>.<lambda>responsezGathering informationF)r   Zthreads_enterr   MessageDialogr   MessageTypeINFOButtonsTypeCANCEL_connectwait_window_responseset_transient_forset_positionWindowPositionCENTER_ON_PARENTformat_secondary_textshow_allr%   Zthreads_leave)r   waitr   r   r   r-   n   s     z TimedSubprocess.show_wait_windowc             C   s   |t jjkr| j  d S )N)r   ResponseTyperF   r   )r   dialogrA   r   r   r   rI      s    z$TimedSubprocess.wait_window_responsec             C   s$   | j dkr td tj  d| _ dS )Nr   zCommand canceledF)r   
debugprintr   r6   )r   r   r   r   r      s
    
zTimedSubprocess.cancel)r   NT)
r	   r
   r   r)   r   r/   r#   r-   rI   r   r   r   r   r   r   1   s   
r   c               @   s,   e Zd Zdf i fddZdd Zdd ZdS )OperationThreadNc             C   s8   t jj|  | jd || _|| _|| _d | _d | _d S )NT)		threadingThreadr)   Z	setDaemontargetr&   kwargs	exceptionresult)r   rW   r&   rX   r   r   r   r)      s    
zOperationThread.__init__c             C   sf   y,t d| j  | j| j| j| _t d W n4 tk
r` } zt d|  || _W Y d d }~X nX d S )Nz
Calling %sZDonezCaught exception %s)rS   rW   r&   rX   rZ   	ExceptionrY   )r   er   r   r   r      s    zOperationThread.runc             C   s    | j  rt | jr| j| jS )N)isAliver   rY   rZ   )r   r   r   r   collect_result   s
    zOperationThread.collect_result)r	   r
   r   r)   r   r^   r   r   r   r   rT      s   		rT   c               @   sB   e Zd Zf i ddddfddZdd Zdd Zd	d
 Zdd ZdS )TimedOperationNFc             C   s\   d | _ || _|| _|| _|| _t|||d| _| jj  |d k	| _| jrXt	j
d| j| _d S )N)rW   r&   rX   2   )r%   r   r   callbackcontextrT   threadstartuse_callbackr   r.   _check_threadr0   )r   rW   r&   rX   r   r   ra   rb   r   r   r   r)      s    


zTimedOperation.__init__c             C   s   | j r
t| jrtj| jddtjjtjj	t
dd}|jddd  |jd| j | jrd|j| j |jtjj |jt
d |j  tjd	| j| _tj  | jrtj| j | jr|j  | jj S )
NTzPlease wait)r   r:   r;   r<   r=   r>   r?   c              W   s   dS )NFr   )r&   r   r   r   r@      s    z$TimedOperation.run.<locals>.<lambda>rA   zGathering informationr`   )re   RuntimeErrorr   r   rB   r   rC   rD   rE   rF   rG   rH   _wait_window_responserJ   rK   rL   rM   rN   rO   r   r.   rf   r0   r1   r2   r3   rc   r^   )r   rP   r   r   r   r      s,    zTimedOperation.runc             C   sj   | j j rdS d| _| jr^| jd k	rf| jd k	rH| j| j j| j j| j qf| j| j j| j j ntj	  dS )NTF)
rc   r]   r0   re   ra   rb   rZ   rY   r   r6   )r   r   r   r   rf      s    



zTimedOperation._check_threadc             C   s   |t jjkr| j  d S )N)r   rQ   rF   r   )r   rR   rA   r   r   r   rh      s    z$TimedOperation._wait_window_responsec             C   s"   t d | jrd | _ntj  dS )NzCommand canceledF)rS   re   ra   r   r6   )r   r   r   r   r      s
    zTimedOperation.cancel)r	   r
   r   r)   r   rf   rh   r   r   r   r   r   r_      s   r_   )Zdbus.mainloop.glibZdbusZgi.repositoryr   r   r   r   r   rU   configgettextinstallZPACKAGEr   debugZthreads_initZmainloopZglibrg   r   r   r   rV   rT   r_   r   r   r   r   <module>   s"   [