a
    :Hiû   ã                   @   s^  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	m
Z
 d dlmZ d dlmZ e ¡ Zee ddƒrej e j¡Znej ej e¡¡Zej ed¡Zej e¡sÖede› ƒ e  d	¡ e e¡ ed
 Ze d¡Z e d¡Z!e d¡Z"e d¡Z#dd„ Z$e de$ƒ ¡Z%ej&ej'dej(ej ed¡ddgd e )d¡ e )de› ¡ e )de%› ¡ e )de › ¡ e )de!› de"› ¡ e )d¡ ej ed¡Z*ej&ej'dej(e*ddgd e +¡ Z,e-ƒ Z.dd„ Z/d d!„ Z0d"d#„ Z1G d$d%„ d%eƒZ2e3d&krZej e ¡s>e 4d'e › d(¡ e  d	¡ ej5e1d)d*d+ 6¡  e )d,¡ e )d-¡ ej e%e#¡Z7e e7¡Z8e8rÆe )d.e9e8ƒ› d/¡ e8D ]$Z:e:e.vrže. ;e:¡ e, <e:¡ qžn
e )d0¡ e2ƒ Z=eƒ Z>e>j?e=e%dd1 e> 6¡  e )d2e%› ¡ ze @d	¡ qW n& eAy<   e )d3¡ e> B¡  Y n0 e> ¡  e, <d¡ e )d4¡ dS )5é    N)ÚPath)ÚObserver)ÚFileSystemEventHandlerÚfrozenFzlimpioo.print.iniz.Error: No se encuentra 'limpioo.print.ini' en é   ZSettingsZSumatraPathZ
FilePrefixZ
FileSuffixZFilePatternc                  C   s.   t jdkr*tt ¡ d ƒ} t j | ¡r*| S tS )u9   Detecta automÃ¡ticamente la carpeta Downloads del usuarioÚntZ	Downloads)ÚosÚnameÚstrr   ÚhomeÚpathÚexistsÚ
script_dir)Zdownloads_path© r   ú</var/www/html/sites/limpioo.console/scripts/limpioo.print.pyÚget_downloads_folder+   s
    
r   ZWatchDirectoryz<%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)szlimpioo.print.logzutf-8)Úencoding)ÚlevelÚformatÚhandlersu'   === CONFIGURACIÃ“N DE LIMPIOO PRINT ===zDirectorio del script: zDirectorio a vigilar: zSumatraPDF: u   PatrÃ³n de archivos: Ú*z2==================================================c                 C   s  t j | ¡}d}d}t|ƒD ]Ê}z&t  | | ¡ t d|› d¡ W  dS  tyn   t d|› d¡ Y  dS  t	y¨   t 
d|› d	|d › d
|› ¡ t |¡ Y q tyä } z&t d|› d|› ¡ W Y d }~ dS d }~0 0 qt |› d|› d¡ dS )Né   r   úArchivo u    estÃ¡ libre.TzError: u#    desapareciÃ³ mientras se esperaba.Fz bloqueado. Intento ú/zError inesperado esperando z: z sigue bloqueado tras zs. Abortando.)r   r   ÚbasenameÚrangeÚrenameÚloggingÚinfoÚFileNotFoundErrorÚerrorÚPermissionErrorÚwarningÚtimeÚsleepÚ	Exception)Úruta_pdfÚnombre_archivoZMAX_INTENTOSZDELAY_INTENTOÚiÚer   r   r   Úesperar_archivo_libreV   s&     r*   c              
   C   sp  t j | ¡}t j t¡s,t dt› ¡ dS t| ƒs8dS tdd| g}t d|› ¡ zt	 
d¡ tj|dddd t d	|› d
¡ z t  | ¡ t d|› d¡ W n: tyÞ } z"t d|› d|› ¡ W Y d }~n
d }~0 0 W dS  tjy0 } z0t d|› d¡ t d|j› ¡ W Y d }~nDd }~0  tyj } z"t d|› d|› ¡ W Y d }~n
d }~0 0 dS )Nu   No se encontrÃ³ SumatraPDF en: Fz-print-to-defaultz-silentzEnviando a imprimir: r   T)ZcheckZcapture_outputÚtextu   Â¡ImpresiÃ³n de u    enviada con Ã©xito!r   u    eliminado con Ã©xito.u#   Â¡ADVERTENCIA! No se pudo eliminar z	. Error: zERROR al imprimir u   . El archivo NO se eliminarÃ¡.zDetalle SumatraPDF: zError inesperado u   . NO se eliminarÃ¡. Error: )r   r   r   r   ÚSUMATRA_PATHr   r    r*   r   r#   r$   Ú
subprocessÚrunÚremoveÚOSErrorr"   ZCalledProcessErrorÚstderrr%   )r&   r'   Zcomandor)   r   r   r   Úimprimir_y_borrarm   s0    

,&,r2   c               
   C   s´   z˜zLt  ¡ } | du r,W W t  ¡  t | ¡ q°t dtj 	| ¡› ¡ t
| ƒ W n4 ty‚ } zt d|› ¡ W Y d}~n
d}~0 0 W t  ¡  t | ¡ q t  ¡  t | ¡ 0 q dS )z1Toma tareas de la cola y las procesa una por una.NzProcesando desde cola: zError fatal en el worker: )Úprocessing_queueÚgetZ	task_doneÚarchivos_en_colaÚdiscardr   r   r   r   r   r2   r%   Úcritical)r&   r)   r   r   r   Úworker   s    
÷(ÿr8   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
PDFHandleru6   AÃ±ade archivos a la cola si coinciden con el patrÃ³n.c                 C   s    t j |¡}| t¡o| t¡S )N)r   r   r   Ú
startswithÚPATRON_PREFIJOÚendswithÚPATRON_SUFIJO)ÚselfÚruta_archivoZnombrer   r   r   Ú	_coincide¤   s    zPDFHandler._coincidec                 C   s8   |t vr4t  |¡ t |¡ t dtj |¡› ¡ d S )Nu   Archivo aÃ±adido a la cola: )	r5   Úaddr3   Úputr   r   r   r   r   )r>   r?   r   r   r   Ú_encolar¨   s    

zPDFHandler._encolarc                 C   s4   |j s0|  |j¡r0t d|j› ¡ |  |j¡ d S )NzDetectado [on_created]: )Úis_directoryr@   Zsrc_pathr   r   rC   ©r>   Zeventr   r   r   Ú
on_created®   s    zPDFHandler.on_createdc                 C   s4   |j s0|  |j¡r0t d|j› ¡ |  |j¡ d S )NzDetectado [on_moved]: )rD   r@   Z	dest_pathr   r   rC   rE   r   r   r   Úon_moved³   s    zPDFHandler.on_movedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   rC   rF   rG   r   r   r   r   r9   ¡   s
   r9   Ú__main__u(   Error CrÃ­tico: SumatraPDF no existe en z. Saliendo.TZPrintWorker)ÚtargetZdaemonr	   zHilo 'PrintWorker' iniciado.z)Buscando archivos pendientes al inicio...zEncontrados z" archivos pendientes. Encolando...z"No hay archivos pendientes. Listo.)Ú	recursivezSupervisor iniciado en: z!Deteniendo supervisor (Ctrl+C)...zSupervisor detenido.)CÚsysr#   r   r-   r   ZconfigparserZglobZqueueZ	threadingÚpathlibr   Zwatchdog.observersr   Zwatchdog.eventsr   ZConfigParserZconfigÚgetattrr   ÚdirnameÚ
executabler   ÚrealpathÚ__file__ÚjoinZconfig_pathr   ÚprintÚexitÚreadZsettingsr4   r,   r;   r=   ZPATRON_COMPLETOr   ZDIRECTORIO_A_VIGILARZbasicConfigÚINFOZFileHandlerr   ZLOG_FILEZQueuer3   Úsetr5   r*   r2   r8   r9   rH   r7   ZThreadÚstartZruta_busquedaZarchivos_pendientesÚlenr&   rA   rB   Zevent_handlerZobserverZscheduler$   ÚKeyboardInterruptÚstopr   r   r   r   Ú<module>   s¢   






ÿý

ÿý	"









