Ë
     ´j~  ã                   ó  — d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	Z	d dl
Z
dee   defd„Z G d„ d«      Zedk(  r. ed	¬
«      Zej#                  «        	 	  ej$                  d«       Œy# e$ r ej)                  «        Y yw xY w)é    N)ÚListÚOptionalÚCallableÚAnyÚpathsÚreturnc                 ó¦  — d}| D ]�  }|rt         j                  j                  |«      sŒ%	 t        j                  |«      D ]P  \  }}}|D ]E  }t         j                  j	                  ||«      }	 |t         j                  j                  |«      z  }ŒG ŒR Œ� |S # t        t        f$ r Y Œ_w xY w# t        $ r}t        d|› d|› �«       Y d}~ŒÆd}~ww xY w)uE   Calcula el tamaÃ±o total combinado en bytes de uno o mÃ¡s directoriosr   u1   [WATCHER] Error calculando tamaÃ±o de directorio z: N)
ÚosÚpathÚexistsÚwalkÚjoinÚgetsizeÚOSErrorÚFileNotFoundErrorÚ	ExceptionÚprint)	r   Útotalr   ÚrootÚ_ÚfilesÚfÚfpÚes	            ú0/var/www/html/ioplay-suite/ioplay-dcm/watcher.pyÚget_directories_total_sizer   	   sÚ   € à€EØò SˆÙœ2Ÿ7™7Ÿ>™>¨$Ô/Øð		SÜ"$§'¡'¨$£-ò ‘��a˜Øò �AÜŸ™Ÿ™ d¨AÓ.�BðØ¤§¡§¡°Ó!4Ñ4™ññð	Sð €Løô	 $Ô%6Ð7ò Ùðûäò 	SÜÐEÀdÀVÈ2ÈaÈSÐQ×RÑRûð	Sús<   «AB,Á-"BÂB,ÂB)	Â&B,Â(B)	Â)B,Â,	CÂ5CÃCc            	       ó€   — e Zd Zddee   dedefd„Zddefd„Zd„ Z	d	„ Z
ddee   d
ee   deee      defd„Zdefd„Zy)ÚStorageWatcherNÚstorage_pathsÚinterval_secondsÚdebounce_secondsc                 óð  — |€t        j                  «       | _        n™t        |t        «      rIt        j                  d|«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}| _        n@t        |t        t        f«      rt        |«      | _        nt        j                  «       | _        || _
        || _        d| _        d | _        d| _        t        j                   «       | _        y c c}w )Nz[,;]Fr   )ÚindexerÚget_configured_storage_pathsr   Ú
isinstanceÚstrÚreÚsplitÚstripÚlistÚtupleÚintervalÚdebounceÚrunningÚthreadÚ	last_sizeÚ	threadingÚLockÚlock)Úselfr   r    r!   Úps        r   Ú__init__zStorageWatcher.__init__   s¶   € ØÐ Ü!(×!EÑ!EÓ!GˆDÕÜ˜¤sÔ+Ü57·X±X¸gÀ}Ó5UÖ!c°ÐYZ×Y`ÑY`ÕYb !§'¡'¥)Ò!cˆDÕÜ˜¬¬e }Ô5Ü!% mÓ!4ˆDÕä!(×!EÑ!EÓ!GˆDÔà(ˆŒØ(ˆŒØˆŒØ26ˆŒØˆŒÜ—N‘NÓ$ˆ�	ùò "ds   ÁC3ÁC3Úrun_initial_scanc           	      ó(  — | j                   ry d| _         t        j                  | j                  |fd¬«      | _        | j                  j                  «        t        dt        | j                  «      › d| j                  › d| j                  › d�«       y )NT)ÚtargetÚargsÚdaemonz+[WATCHER] Observador multiruta iniciado en z directorio(s): z (Intervalo: zs))
r.   r1   ÚThreadÚ	_run_loopr/   Ústartr   Úlenr   r,   )r4   r7   s     r   r>   zStorageWatcher.start-   s�   € Ø�<Š<ØØˆŒÜ×&Ñ&¨d¯n©nÐDTÐCVÐ_cÔdˆŒØ�‰×ÑÔÜÐ;¼CÀ×@RÑ@RÓ<SÐ;TÐTdÐei×ewÑewÐdxð  yFð  GK÷  GTñ  GTð  FUð  UWð  Xõ  	Yó    c                 ó¬   — d| _         | j                  r6| j                  j                  «       r| j                  j                  d¬«       t	        d«       y )NFg      @)Útimeoutz[WATCHER] Observador detenido.)r.   r/   Úis_aliver   r   )r4   s    r   ÚstopzStorageWatcher.stop5   s=   € ØˆŒØ�;Š;˜4Ÿ;™;×/Ñ/Ô1Ø�K‰K×Ñ SÐÔ)ÜÐ.Õ/r@   c                 ó  — | j                   5  t        j                  | j                  «      }t	        | j                  «      | _        t        j                  dt        | j
                  «      «       |cddd«       S # 1 sw Y   yxY w)z<Dispara un escaneo manual inmediato de todos los directoriosÚtotal_dir_size_bytesN)	r3   r#   Úscan_storage_directoryr   r   r0   ÚdbÚset_metar&   )r4   Úress     r   Útrigger_scan_nowzStorageWatcher.trigger_scan_now;   sa   € à�Y‰Yñ 	Ü×0Ñ0°×1CÑ1CÓDˆCÜ7¸×8JÑ8JÓKˆDŒNÜ�K‰KÐ.´°D·N±NÓ0CÔDØ÷		÷ 	ò 	ús   �A$A;Á;BÚenabledr   c                 óš  — |�.|dkD  r)t        |«      | _        t        d| j                  › d�«       |�|| _        t        d| j                  › �«       |�U|r*| j                  st        d«       | j                  d¬«       n)|s'| j                  rt        d«       | j                  «        | j                  | j                  | j                  d	œS )
zOPermite actualizar el intervalo, activar/desactivar o cambiar rutas en calienter   z/[WATCHER] Intervalo actualizado en caliente a: Úsz,[WATCHER] Rutas actualizadas en caliente a: z.[WATCHER] Reanudando observador en caliente...F)r7   z,[WATCHER] Pausando observador en caliente...)rL   r    r   )Úintr,   r   r   r.   r>   rD   )r4   r    rL   r   s       r   Úupdate_configzStorageWatcher.update_configC   s½   € àÐ'Ð,<¸qÒ,@ÜÐ 0Ó1ˆDŒMÜÐCÀDÇMÁMÀ?ÐRSÐTÔUàÐ$Ø!.ˆDÔÜÐ@À×ASÑASÐ@TÐUÔVàÐÙ˜tŸ|š|ÜÐFÔGØ—
‘
¨E�
Õ2Ù §¢ÜÐDÔEØ—	‘	”ð —|‘|Ø $§¡Ø!×/Ñ/ñ
ð 	
r@   c           	      ól  — |rB	 t        dt        | j                  «      › d�«       t        j                  | j                  «       t        | j                  «      | _        t        j                  dt        | j                  «      «       | j                  �r,	 t        j                  | j                  «       | j                  sy t        | j                  «      }|| j                  k7  rÌt        d| j                  › d|› d| j                  › d�«       t        j                  | j                  «       t        | j                  «      }| j                   5  t        d	«       t        j                  | j                  «       || _        t        j                  dt        | j                  «      «       d d d «       | j                  r�Œ+y y # t
        $ r}t        d|› �«       Y d }~�Œšd }~ww xY w# 1 sw Y   Œ>xY w# t
        $ r7}t        d
|› �«       t        j                  | j                  «       Y d }~Œ|d }~ww xY w)Nu:   [WATCHER] Ejecutando escaneo inicial de indexaciÃ³n sobre z	 rutas...z$[WATCHER] Error en escaneo inicial: rF   u=   [WATCHER] Cambio detectado en almacenamiento: tamaÃ±o previo=z bytes, nuevo=z bytes. Esperando debounce de zs...uC   [WATCHER] Disparando indexador por cambio de tamaÃ±o en carpetas...z'[WATCHER] Error en ciclo de monitoreo: )r   r?   r   r#   rG   r   r   r0   rH   rI   r&   r.   ÚtimeÚsleepr,   r-   r3   )r4   r7   r   Úcurrent_sizes       r   r=   zStorageWatcher._run_loop\   së  € áðBÜÐRÔSVÐW[×WiÑWiÓSjÐRkÐktÐuÔvÜ×.Ñ.¨t×/AÑ/AÔBô 4°D×4FÑ4FÓGˆŒÜ
�‰Ð*¬C°·±Ó,?Ô@à�l‹lð*Ü—
‘
˜4Ÿ=™=Ô)Ø—|’|Øä9¸$×:LÑ:LÓM�ð   4§>¡>Ò1ÜÐYÐZ^×ZhÑZhÐYiÐiwð  yEð  xFð  Fdð  ei÷  erñ  erð  dsð  swð  xô  yÜ—J‘J˜tŸ}™}Ô-ô $>¸d×>PÑ>PÓ#Q�LØŸ™ñ QÜÐ cÔeÜ×6Ñ6°t×7IÑ7IÔJØ)5˜œÜŸ™Ð$:¼CÀÇÁÓ<OÔP÷	Qð �lŽløô ò BÜÐ<¸Q¸CÐ@×AÒAûðBú÷*Qð Qûô ò *ÜÐ?À¸sÐCÔDÜ—
‘
˜4Ÿ=™=×)Ñ)ûð*úsP   „AG Â+G3 ÃBG3 ÅAG'Æ*G3 Ç	G$ÇGÇG$Ç'G0Ç,G3 Ç3	H3Ç<-H.È.H3)Né
   é   )T)NNN)Ú__name__Ú
__module__Ú__qualname__r   r   rO   r6   Úboolr>   rD   rK   r   r&   ÚdictrP   r=   © r@   r   r   r      s‘   „ ñ% h¨s¡mð %Ècð %Ðjmó %ñ"Y dó Yò0òñ
¨h°s©mð 
ÈXÐVZÉ^ð 
Ðs{ð  }Að  BEñ  }Fñ  tGð 
ð  SWó 
ð2#*¨$ô #*r@   r   Ú__main__é   )r    é   )r
   r'   rR   r1   Útypingr   r   r   r   r#   rH   r&   rO   r   r   rW   Úwatcherr>   rS   ÚKeyboardInterruptrD   r\   r@   r   ú<module>rc      s—   ðÛ 	Û 	Û Û ß 0Ó 0Û Û 	ð d¨3¡ið °Có ÷$d*ñ d*ðL ˆzÒÙ¨aÔ0€GØ‡M�M„OðØØˆD�J‰J�qŒMð ð	 øð ò Ø�‰Žðús   ÁA. Á.BÂB