ó
‚•oTc           @   sK  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 Td  d l	 m
 Z
 m Z d  d l j Z d  d l j Z d  d l j Z d  d l j Z d d „ Z d „  Z d d d d e d d d d „ Z d d d d e d d e d e d d „ Z d	 „  Z d
 e j f d „  ƒ  YZ d „  Z d S(   iÿÿÿÿN(   t   *(   t
   is_rarfilet   RarFilec         C   s€   | d  k rv |  j d ƒ rv |  j d ƒ } | d k rv |  d | !j ƒ  } |  | d j ƒ  }  t j d |  | ƒ qv n  |  | f S(   Ns   {{s   }}i   s   Job %s has category %s(   t   Nonet
   startswitht   findt   stript   loggingt   debug(   t   fnamet   catt   n(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   name_to_cat'   s    c         C   s\   |  j  | j  k r t S|  j | j k r, t S|  j | j k rB t S|  j | j k rX t St S(   N(   t   st_inot   Falset   st_sizet   st_mtimet   st_ctimet   True(   t   tup1t   tup2(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   CompareStat5   s        t    c
         C   s×  d d l  m }
 g  } | d  k r+ | } n  t |  | ƒ \ }  } t j | ƒ rv y t j | ƒ } Wq° d g  f SXn: t | ƒ r¦ y t | ƒ } Wq° d g  f SXn
 d g  f Sd } | j	 ƒ  } | j
 ƒ  d } xs | D]k } | j ƒ  } | j d ƒ p| j d ƒ p| j d ƒ s"d } PqÙ | j d ƒ rÙ d } | d 7} qÙ qÙ W| d k r½| d k rid  }	 n  xñ | D]é } | j ƒ  j d ƒ rpy | j | ƒ } Wn | j ƒ  d g  f SXt j d d	 | ƒ } t j j | ƒ } | rYy7 t j | d | | | d
 | d | d | d |	 ƒ} Wn d  } n X| rV| j |
 | ƒ ƒ | j ƒ  qVqYqpqpW| j ƒ  y | s€t j | ƒ n  WqÍt j t d ƒ | ƒ t j d d t ƒd } qÍXn | j ƒ  d } | | f S(   Niÿÿÿÿ(   t   add_nzoi   i    s   .nzbs   .nfot   /s   \[.*nzbmatrix.com\]R   R
   t   urlt   priorityt   nzbnames   Error removing %ss   Traceback: t   exc_info(   t   sabnzbd.nzbqueueR   R   R   t   zipfilet
   is_zipfilet   ZipFileR   R   t   namelistt   sortt   lowert   endswitht   readt   closet   ret   subt   ost   patht   basenamet   nzbstufft	   NzbObjectt   appendt   update_ratingt   removeR   t   errort   Tat   infoR   (   t   filenameR*   t   ppt   scriptR
   t   catdirt   keepR   R   R   R   t   nzo_idst   zft   statust   namest   nzbcountt   namet   datat   nzo(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   ProcessArchiveFile>   sx    	

-	
$

 
c         C   s‰  d d l  m } g  } | d  k r+ | } n  y¥ t | d ƒ } | j d ƒ } | j d ƒ } | j ƒ  | d k r¤ | d k r¤ |  j d d ƒ } t j | d ƒ } n |  } t | d ƒ } | j ƒ  } | j ƒ  Wn7 t	 j
 t d	 ƒ | ƒ t	 j d
 d t ƒd | f SX| rGt | | ƒ \ } } | sGt j j | ƒ d } qGn  yI t j | d | | | d | d | d | d |
 d | d |	 d | ƒ} Wnr t k
 r©d  } n\ t k
 rÀd | f S| j d ƒ d k r÷| j d ƒ d k  r÷d | f Sd | f Sn X| r+| j | | ƒ ƒ | j ƒ  n  y | sDt j | ƒ n  Wn7 t	 j t d ƒ | ƒ t	 j d
 d t ƒd | f SXd | f S(   Niÿÿÿÿ(   R   t   rbi   s   s   ‹s   .nzb.gzs   .nzbs   Cannot read %ss   Traceback: R   iþÿÿÿi    R
   R   R   t   nzo_infoR   t   reuset	   dup_checks   <nzbs   </nzbs   Error removing %s(   R   R   R   t   openR%   R&   t   replacet   gzipt   GzipFileR   t   warningR2   R3   R   R   R)   R*   t   splitR,   R-   t	   TypeErrort
   ValueErrorR   R.   R/   R0   R1   (   R4   R*   R5   R6   R
   R7   R8   R   R   RD   RC   RE   R   R   R9   t   ft   b1t   b2R>   R?   R@   (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   ProcessSingleFileˆ   s\    	
*	
*
 c         C   s”   x t  |  j ƒ  ƒ D]y } t j j | ƒ \ } } | | k r t } x3 | D]+ } t j j | | ƒ | k rJ t } PqJ qJ W| sŒ |  | =qŒ q q Wd  S(   N(   t   sortedt   keysR)   R*   RK   R   t   joinR   (   t   listt   foldert   filesR*   t   fldR>   t   present(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt	   CleanListÍ   s    t
   DirScannerc           B   sM   e  Z d Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   c         C   sô   t  j j |  ƒ |  j ƒ  yF t j t ƒ \ } |  _ |  _ | |  j	 k r_ i  |  _ i  |  _ n  Wn i  |  _ i  |  _ n Xt
 |  _ t
 |  _ t j	 j ƒ  |  _	 t j ƒ  |  _ t
 |  _ t
 |  _ t j	 j |  j ƒ t j j |  j ƒ |  t _ d  S(   N(   t	   threadingt   Threadt   __init__t   newdirt   sabnzbdt
   load_admint   SCAN_FILE_NAMEt   ignoredt	   suspectedt   dirscan_dirR   t   shutdownt   error_reportedt   cfgt   get_patht   dirscan_speedt   busyt   triggert   callbackt   newspeedR[   t   do(   t   selft   dir(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyR^   å   s&    
						c         C   s7   i  |  _  i  |  _ t j j ƒ  |  _ t j ƒ  |  _ d  S(   N(   Rc   Rd   Rh   Re   Ri   Rj   (   Rp   (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyR_   ý   s    		c         C   s   t  j ƒ  |  _ t |  _ d  S(   N(   Rh   Rj   R   Rl   (   Rp   (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyRn     s    c         C   s$   |  j  ƒ  t j d ƒ t |  _ d  S(   Ns   Dirscanner shutting down(   t   saveR   R3   R   Rf   (   Rp   (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   stop	  s    
c         C   s)   t  j |  j |  j |  j f t  j ƒ d  S(   N(   R`   t
   save_adminRe   Rc   Rd   Rb   (   Rp   (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyRr     s    c         C   s£   t  j d ƒ t |  _ x† |  j sž t |  j d ƒ } x; | d k rq |  j rq |  j rq t j d ƒ | d } q7 Wt |  _ |  j r |  j r |  j	 ƒ  q q Wd  S(   Ns   Dirscanner starting upi   i    g      ð?(
   R   R3   R   Rf   t   maxRj   Rl   t   timet   sleept   scan(   Rp   t   x(    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   run  s    	#	c            s  ‡  f d †  } ˆ  j  st ˆ  _  ˆ  j } | rt j r| | d  ƒ y t j | ƒ } Wn8 ˆ  j s‹ t	 j
 t d ƒ | ƒ t ˆ  _ n  g  } n Xt j ƒ  } x` | D]U } t j j | | ƒ } t j j | ƒ r¨ | j ƒ  | k r¨ | | | j ƒ  ƒ q¨ q¨ Wn  t ˆ  _  n  d  S(   Nc            s  y t  j |  ƒ } Wn@ ˆ  j rL | rL t j t d ƒ |  ƒ t ˆ  _ n  g  } n Xx‘| D]‰} t  j j |  | ƒ } t  j j	 | ƒ s] | ˆ  j
 k s] | d d k r¯ q] n  t  j j | ƒ d j ƒ  } | d k } | r y t  j | ƒ } Wqq] qXn d ˆ  j
 | <| ˆ  j k rEt ˆ  j | | ƒ r8q] qEˆ  j | =n  | r] | j d k r] t j d	 | ƒ t } x` t d
 ƒ D]R }	 t j d ƒ y t  j | ƒ }
 Wn
 q}n Xt | |
 ƒ rÉt } Pq}|
 } q}W| sßq] n  | d k rPt | | d | d | ƒ\ } } | d k r(| ˆ  j | <qã| d k r@t ˆ  _ qãd ˆ  j
 | <qæ| d k sq| j ƒ  j d ƒ rÖt | | d | d | ƒ\ } } | d k  r®| ˆ  j | <qã| d k rÆt ˆ  _ qãd ˆ  j
 | <qæd ˆ  j
 | <q] q] Wt ˆ  j
 |  | ƒ t ˆ  j |  | ƒ d  S(   Ns   Cannot read Watched Folder %si    t   .i   s   .nzbs   .zips   .gzs   .rars   Trying to import %si   g      ð?R7   R   iÿÿÿÿs   .nzb.gz(   s   .nzbs   .zips   .gzs   .rar(   s   .zips   .rar(   R)   t   listdirRg   R   R1   R2   R   R*   RT   t   isdirRc   t   splitextR#   t   statRd   R   R   R3   R   t   xrangeRv   Rw   RA   R$   RQ   RZ   (   RV   R7   RW   R4   R*   t   extt	   candidatet
   stat_tuplet   stableR   t   stat_tuple_tmpt   resR9   t   nzo_id(   Rp   (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   run_dir%  sn    
1

!!!s   Cannot read Watched Folder %s(   Rk   R   Re   R`   t
   PAUSED_ALLR   R)   R|   Rg   R   R1   R2   t   configt   get_categoriesR*   RT   R}   R#   R   (   Rp   Rˆ   Re   RU   t   catst   ddt   dpath(    (   Rp   s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyRx   #  s&    N				
$N(   t   __name__t
   __module__R   Ro   R^   R_   Rn   Rs   Rr   Rz   Rx   (    (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyR[   Ü   s   						c           C   s   t  j d ƒ t j j ƒ  d  S(   Ns'   Scheduled or manual watched folder scan(   R   R3   R[   Ro   Rx   (    (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   dirscan‰  s    (   R)   Rv   R   R'   R   RH   R\   R`   t   sabnzbd.constantst   sabnzbd.utils.rarfileR   R   t   sabnzbd.nzbstuffR,   t   sabnzbd.misct   misct   sabnzbd.configRŠ   t   sabnzbd.cfgRh   R   R   R   R   RA   R   RQ   RZ   R]   R[   R‘   (    (    (    s&   /var/www/SABnzbd/sabnzbd/dirscanner.pyt   <module>   s,   
		ID	­