ó
oTc           @   sŁ  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 y d  d l Z e	 Z
 Wn e k
 r e Z
 n Xd  d l Z d  d l m Z m Z d  d l m Z d  d l Z d  d l j Z d  d l m Z d  d l m Z d e f d	     YZ d
 e f d     YZ d e f d     YZ d j g  e d  D] Z  e! e  d d d  ^ qB Z" d   Z# d   Z$ e j% d  Z& d d  Z( d   Z) d S(   i˙˙˙˙N(   t   sleep(   t   Thread(   t   MAX_DECODE_QUEUEt   MIN_DECODE_QUEUE(   t   ArticleCache(   t
   name_fixer(   t	   match_strt   CrcErrorc           B   s   e  Z d    Z RS(   c         C   s,   t  j |   | |  _ | |  _ | |  _ d  S(   N(   t	   Exceptiont   __init__t   needcrct   gotcrct   data(   t   selfR
   R   R   (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR	   .   s    		(   t   __name__t
   __module__R	   (    (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR   -   s   t   BadYencc           B   s   e  Z d    Z RS(   c         C   s   t  j |   d  S(   N(   R   R	   (   R   (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR	   5   s    (   R   R   R	   (    (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR   4   s   t   Decoderc           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   s)   t  j |   t j   |  _ | |  _ d  S(   N(   R   R	   t   Queuet   queuet   servers(   R   R   (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR	   ;   s    c         C   sE   |  j  j | | f  |  j  j   t k rA t j j j j   n  d  S(   N(	   R   t   putt   qsizeR   t   sabnzbdt
   downloadert
   Downloadert   dot   delay(   R   t   articlet   lines(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyt   decodeA   s    c         C   s   |  j  j d   d  S(   N(   R   R   t   None(   R   (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyt   stopF   s    c         C   sc  d d l  m } xLt d  |  j j   } | s6 Pn  |  j j   t k  rs t j j	 j
 j rs t j j	 j
 j   n  | \ } } | j } | j } | j } t } d  }	 t }
 t } | ród  } yP | j rÓ t  n  t }
 t j d |  t | |  }	 | j d 7_ t } WnĄt k
 r} t d  | } t j |  t j d d t t j j	 j
 j   d  | _ | j
 j | |  t }
 n*t  k
 r} t d	  | | j! | j" f } t j |  | j# }	 t$ j%   r˛|  j& |  } | r˙t }
 d  } q˙q˛n°t k
 rWt } t } | j rF| rF| d
 j' d  rFt } n[ xX | D]P } | j(   } d | k rtt } n  | j' d  rMt) | d  rMt } PqMqMW| rŔd } t j | |  n  | j rň| r | r t j d |  t }
 q n. | r | r t d  | } t j |  n  | s-| r˛|  j& |  } | rTt }
 d  } qTq˛n[ t d  | } t j |  t j d d t |  j& |  } | r˛t }
 d  } q˛n X| r#| r×| j j j* d |  qđ| j j j* d |  q#n0 |  j& |  } | rt }
 n | j r#t } n  |	 r?t+ j
 j, | |	  n  |
 r | j
 j- | |  q q Wd  S(   Ni˙˙˙˙(   t   NzbQueuegüŠńŇMbP?s   Decoding %si   s   Decoding %s faileds   Traceback: t   exc_infos   CRC Error in %s (%s -> %s)i    s   223 s   message-id:s   X-t   dmcat   removedt   cancelt   blockeds    Article removed from server (%s)s   Server has article %ss   Badly formed yEnc article in %ss   Unknown Error while decoding %st   killed_art_logt   bad_art_log(   R#   R$   R%   R&   (.   t   sabnzbd.nzbqueueR!   R    R   t   getR   R   R   R   R   R   t   delayedt   undelayt   nzft   nzoR   t   FalseR   t   Truet   precheckR   t   loggingt   debugR   t   article_countt   IOErrort   Tat   warningt   infot   pauset   fetchert   reset_try_listsR   R
   R   R   t   cfgt   fail_on_crct   _Decoder__search_new_servert
   startswitht   lowerR   t   inc_logR   t   save_articlet   register_article(   R   R!   t   art_tupR   R   R-   R.   t   art_idt   killedR   t   registert   foundt   logmet   et   new_server_foundt   linet   lline(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyt   runI   sś    
'					
			"						c   	      C   s'  d d l  m } | j | j  | j } | j } t } t } xF |  j D]; } | j rH | j	 |  rH | j
 ry t } q t } PqH qH W| rŚ | rŚ t | _ t } n  | rđ d  | _ d | _ | j j | |  t j r#t j d |  q#n3 t d  | } t j |  | j j j d |  | S(   Ni˙˙˙˙(   R!   i    s(   %s => found at least one untested servers*   %s => missing from all servers, discardingt   missing_art_log(   R)   R!   t   add_to_try_listR:   R-   R.   R/   R   t   activet   server_in_try_listt
   fillserverR0   t   allow_fill_serverR   t   triesR   R;   R   t   LOG_ALLR2   R3   R6   R8   RA   (	   R   R   R!   R-   R.   RK   t   fill_server_foundt   servert   msg(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyt   __search_new_serverĂ   s2    									(   R   R   R	   R   R    RN   R>   (    (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR   :   s
   				zt    i   i*   c         C   s   t  |  } | rü|  j } t |  \ } } | \ } } } d  } | smt } yŢ xl t t d t |    D]O }	 | |	 j d  rm t	 | |	 j
 d  d  d  | _ d | _ t } Pqm qm W| rń x( t |	 d  D] }
 | j d  q× Wn  | d d k r+| j   | d d	 k r+| j   q+n  Wn t k
 rHt    n X| rad
 j |  } qřt    n| rď| rďd | k rt	 | d  | _ n t j d d |  d | _ t rőt j d j |   d  \ } } d | d Ad" @} nr d j |  } x4 d# D], }	 d |	 d } | j | t |	   } qW| j t  } t j |  } d | d% @} | rvd } n d } | | k rąd d t | |  | | j   } n d  } t j d d  |  | | k sřt | | |   qřn	 t    | Sd  S(&   Ni(   s   begin i   t   uui   i    i˙˙˙˙t   endt   `s   
t   names!   Possible corrupt header detected s   => ybegin: %st   yencR[   s   %08Xl     i	   i
   i   i   i    i.   i=   s   =%ci@   t   pcrc32t   crc32t   0i   s   Corrupt header detected s   => yend: %sl        l   ˙˙ (   i    i	   i
   i   i   i    i.   i=   l        l   ˙˙ (   t   stripR-   t   yCheckR   R/   t   xranget   mint   lenR?   R   t   splitt   filenamet   typeR0   t   popt
   IndexErrorR   t   joinR2   R3   t	   HAVE_YENCt   _yenct   decode_stringt   replacet   chrt	   translatet
   YDEC_TRANSt   binasciiRb   t   upperR   (   R   R   R-   R`   t   ybegint   ypartt   yendt   decoded_dataRH   t   it   nt   crct   partcrct   jt   crcnamet   _partcrc(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR   î   sn    	"#	
		"	)		c         C   s  d  } d  } d  } xt t d t |     D]ć } yË |  | j d  rţ d } |  | j d  d k rv | d 7} n  |  | j d  d k r | d 7} n  t |  | |  } |  | d j d  rě t |  | d  } |  | d	 }  Pqţ |  | d }  Pn  Wq. t k
 rPq. Xq. Wxd t d
 d d
  D]P } y5 |  | j d  ret |  |  } |  |  }  Pn  Wq+t k
 rzPq+Xq+W| | | f |  f S(   Ni(   s   =ybegin i   s    part=i    i   s    total=s   =ypart i   i˙˙˙˙iő˙˙˙s   =yend (   R   Rf   Rg   Rh   R?   t   findt   ySplitRm   (   R   Rx   Ry   Rz   R|   t   splits(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyRe   8  s:    "	
	s   ([a-zA-Z0-9]+)=c         C   s   i  } | r% t  j |  |  d } n t  j |   d } t |  d rL | SxI t d t |  d  D]/ } | | | | d } } | j   | | <qe W| S(   Ni   i   i    (   t	   YSPLIT_RERi   Rh   t   rangeRd   (   RL   R   t   fieldst   partsR|   t   keyt   value(    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyR   a  s    c         C   s   x" |  r$ |  d r$ |  j  d  q Wx |  rF |  d rF |  j    q( WxC t t |    D]/ } |  | d  d k rZ |  | d |  | <qZ qZ W|  S(   Ni    i˙˙˙˙i   s   ..i   (   Rl   Rf   Rh   (   R   R|   (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyRd   r  s    (*   R   Rv   R2   t   ret   timeR    t	   threadingR   Rp   R0   Ro   t   ImportErrorR/   R   t   sabnzbd.constantsR   R   t   sabnzbd.articlecacheR   t   sabnzbd.downloadert   sabnzbd.cfgR<   t   sabnzbd.encodingR   t   sabnzbd.miscR   R   R   R   R   Rn   Rf   R|   Rs   Ru   R   Re   t   compileR   R   R   Rd   (    (    (    s#   /var/www/SABnzbd/sabnzbd/decoder.pyt   <module>   s4   

ł:	J	(