
oTc           @   s  d  d l  Z  d  d l Z d  d l m Z 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 Z d Z d Z d Z d	 Z d
 Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z  d Z! d Z" d Z# d Z$ d Z% d Z& d Z' d Z( d Z) d Z* d Z+ d Z, d Z- d Z. d Z/ d Z0 d Z1 d  Z2 d! Z3 d" Z4 d# Z5 d Z6 d Z7 d Z8 d$ Z9 d% Z: d Z; d Z< d Z= d& Z> d'   Z? d( f  d)     YZ@ d* f  d+     YZA d, f  d-     YZB d S(.   iN(   t   packt   unpack(   t   crc32(   t   StringIOi    s   Rar! s   Rar! ir   is   it   iu   iv   iw   ix   iy   iz   i{   i   i   i   i   i   i    i@   i   i   i   i`   i   i   i   i   i   i   i    i @  i   i   c         C   sG   y8 t  |  d  j d  } | j t  p6 | j t  SWn t SXd  S(   Nt   rbi2   (   t   opent   readt
   startswitht   RAR_IDt   RAR5_IDt   False(   t   fnt   buf(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt
   is_rarfilem   s
     t   RarInfoc           B   s   e  Z d    Z RS(   c         C   s$   |  j  t k r  |  j t @t k St S(   N(   t   typet   RAR_BLOCK_FILEt   flagst   RAR_FILE_DIRECTORYR
   (   t   self(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   isdirx   s    (   t   __name__t
   __module__R   (    (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR   u   s   t   RarFilec           B   s   e  Z d  d d e d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   t   rt   cp850c         C   s   | |  _  | |  _ | |  _ g  |  _ d |  _ d |  _ d |  _ d |  _ d |  _ | |  _	 d |  _
 t j j |  \ } } d | k r |  j |  _ n |  j |  _ | d k r t d   n  |  j   d  S(   Ni    R   s   Only mode=r supported(   t   rarfilet   charsett	   all_namest	   info_listt   is_solidt	   encryptedt   corruptt   uses_newnumberingt   uses_volumest   info_callbackt   got_mainhdrt   ost   patht   splitextt   _gen_oldvolt   _gen_volnamet   _gen_newvolt	   Exceptiont   _parse(   R   R   t   modeR   R#   R   t   filet   ext(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   __init__   s$    											c         C   s.   g  } x! |  j  D] } | j | j  q W| S(   N(   R   t   appendt   filename(   R   t   rest   f(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   namelist   s    c         C   s.   g  } x! |  j  D] } | j | j  q W| S(   N(   R   R1   t   unicode_filename(   R   R3   R4   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt	   unamelist   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   infolist   s    c         C   s	  t  |  t  d  k r | j d d  } x |  j D]U } | j j d  rv | j d  rv | d | j k r | Sq4 | | j k r4 | Sq4 Wnu | j d d  } x` |  j D]U } | j j d  r | j d  r | d | j k r| Sq | | j k r | Sq Wd  S(   Nu    u   \u   /s   \t   /(   R   t   replaceR   R6   t   endswithR2   (   R   t   fnamet   targetR4   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   getinfo   s    ""c         C   s   |  j  |  } | s$ t d   n  | j   r? t d   n  | j d k r` |  j |  } nA t r |  j r |  j r |  j |  } n |  j	 |  j
 |  } | S(   Ns   No such files   No data in directoryi0   (   R>   R+   R   t   compress_typet   _extract_cleart   _use_extract_hackR   R"   t   _extract_hackt   _extract_unrarR   (   R   R<   t   infR3   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR      s    c         C   s   d  S(   N(    (   R   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   close   s    c         C   s    x |  j  D] } | j GHq
 Wd  S(   N(   R   R2   (   R   R4   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   printdir   s    c         C   s   | j  t k r |  j s+ | j t @d k r | j j d d  | _ | j j d d  | _ | j t @t k r | j d 7_ | j d 7_ n  |  j	 j
 |  q n  |  j r |  j |  n  d  S(   Ni    s   \R9   u   \u   /(   R   R   R   R   t   RAR_FILE_SPLIT_BEFORER2   R:   R6   R   R   R1   R#   (   R   t   item(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   _process_entry   s    	c         C   s  t  |  j d  } | j t t   } | t k rB t d   n  d } d } xK|  j |  } | s | r | d 7} y t  |  j |  d  } Wn d  } n Xd } | r qQ q n  Pn  | | _	 | j
 t k rG|  j rG| j t @rd |  _ |  j |  _ n  | j t @|  _ | j t @|  _ d |  _ | j t @rfd |  _ qfn | j
 t k rf| j t @} n  |  j |  | j d k rQ | j | j d  qQ qQ Wd  S(   NR   s	   Not a Rari    i   (   R   R   R   t   lenR   R+   t   _parse_headerR)   t   Nonet   volumeR   t   RAR_BLOCK_MAINR$   R   t   RAR_MAIN_NEWNUMBERINGR!   R*   t   RAR_MAIN_VOLUMER"   t   RAR_MAIN_SOLIDR   t   RAR_MAIN_PASSWORDR   t   RAR_BLOCK_ENDARCt   RAR_ENDARC_NEXT_VOLUMERI   t   add_sizet   seek(   R   t   fdt   idRM   t	   more_volst   h(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR,      sD    

				c         C   sG   |  j  |  } | rC | j t k s3 | j t k rC |  j |  n  | S(   N(   t   _parse_block_headerR   R   t   RAR_BLOCK_SUBt   _parse_file_header(   R   RW   RZ   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyRK     s    $c         C   s  d } t    } | j   | _ | j |  } | sF t |  | k  rJ d  St d |  } | \ | _ | _ | _	 | _
 | j
 | | _ | j
 | k r | j | j
 |  | _ n	 d | _ | j   | _ | j	 t @r t d | j d   d | _ n	 d | _ | j t k r| S| j t k r:| d | j d  } n8 | j t k ra| d | j d	  } n | d | j } t |  d
 @} | j | k r| St j d | j  d |  _ d  S(   Ni   s   <HBHHt    s   <Li   i    i   i   i   i  s   CRC mismatch! ofs =%si   (   R   t   tellt   header_offsetR   RJ   RL   R   t
   header_crcR   R   t   header_sizet   header_unknownt   datat   file_offsett   RAR_LONG_BLOCKRU   t   RAR_BLOCK_MARKRN   t   RAR_BLOCK_OLD_AUTHR   t   loggingt   debugR    (   R   RW   t   HDRLENRZ   R   t   tt   crcdatt   calc_crc(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR[     s:    		 		c   
      C   ss  d } t  d | j |   } t | d  d @| _ t | d  d @| _ | d | _ | d | _ |  j | d  | _ | d | _	 | d	 | _
 | d
 | _ | d | _ | } | j t @r d |  _ n  | j t @r<t  d | j | | d ! \ } } | j t |  d >O_ | j t |  d >O_ | d 7} n  | j | | | j !} | | j 7} | j t @r| j d  } | |  | _ t | j | | d  }	 |	 j   | _ | j j |  j d  j d d  | _ n! | | _ | j |  j d  | _ | j t @r.| j | | d !| _ | d 7} n	 d  | _ | j t @rW| j | | _ n	 d  | _ | j | 8_ | S(   Ni   i   i   s
   <LLBLLBBHLi    l    i   i   i   i   i   s   <LLi    s    R:   s   latin-1i   i	   i   i   i   i   i   i   (   R   Rd   t   longt   compress_sizet	   file_sizet   host_ost   CRCt   _parse_dos_timet	   date_timet   extract_versionR?   t	   name_sizeR-   R   t   RAR_FILE_PASSWORDR   t   RAR_FILE_LARGEt   RAR_FILE_UNICODEt   findR2   t   _UnicodeFilenamet   decodeR6   R   t   encodet   RAR_FILE_SALTt   saltRL   t   RAR_FILE_EXTTIMEt   ext_timeRc   (
   R   RZ   Rk   t   fldt   post   h1t   h2t   namet   nult   u(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR]   K  sL    #*			c         C   s   | d @} | d ?} | d @} | d ?} | d @} | d ?} | d @} | d ?} | d @} | d ?} | d @d } | | | | | | f S(	   Ni   i   i?   i   i   i   i   i  (    (   R   t   stampt   sect   mint   hrt   dayt   mont   yr(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyRt     s    
 

 

 

 

 
c         C   s   |  j  j d d  } t j d |  } | s< t d   n  | j d  } | j d  } d | | } | |  | | | } | | d S(   Nt   %s   %%s   ([0-9][0-9]*)[^0-9]*$s   Cannot construct volume namei   s   %%0%dd(   R   R:   t   ret   searchR+   t   startt   end(   R   RM   R   t   mt   n1t   n2t   fmtt   volfmt(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR*     s    c         C   se   | d k r |  j  S|  j  j d  } |  j  |  } | d k rO d | d } n d | d } | | S(   Ni    t   .id   s   .r%02di   s   .s%02die   (   R   t   rfind(   R   RM   t   it   baseR/   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR(     s     c         C   s   | j  } d } d  } x t |  j |  d  } | sI | j | j  n  x |  j |  } | j t t	 f k r | j
 rL | j | j
 d  qL qL n  | j | j k r | | j | j
  7} Pn  t d   qL W| j t @d k r Pn  | d 7} q W| S(   NR^   R   i   s   file not found?i    (   RM   RL   R   R)   RV   R`   RK   R   Rg   RN   RU   R2   R   R+   R   t   RAR_FILE_SPLIT_AFTER(   R   RD   RM   R   t   curR4   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR@     s*    		c   	      C   s  d } | j  | j } t |  j d  } | j | j  t j d d d t  \ } } t	 d d d	 d
 d d
 d
  } t
 j | t |  x] | d
 k r | | k r | j |  } n | j |  } t
 j | |  | t |  8} q Wt
 j |  |  j | |  } t
 j |  | S(   Ni    i   R   t   suffixs   .rart   texts   <HBHHHLiϐ  is   i    i   i   (   Rp   Rb   R   R   RV   R`   t   tempfilet   mkstempR
   R    R%   t   writeR   R   RJ   RE   RC   t   unlink(	   R   RD   t   BSIZEt   sizet   rft   tmpft   tmpnamet   mhR   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyRB     s"    c         C   s   | j  } t j r' | j d d  } n6 | j d d  } | j d d  } | j d d  } t j | |  \ } } | d	 k r t d
   n  | S(   NR9   s   \t   `s   \`t   "s   \"t   $s   \$i    s   Error reading file(   R2   t   sabnzbdt   WIN32R:   t   SimpleRarExtractR+   (   R   R   RD   R   t   errR   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyRC     s    		N(   R   R   RL   R
   R0   R5   R7   R8   R>   R   RE   RF   RI   R,   RK   R[   R]   Rt   R*   R(   R@   RB   RC   (    (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR   ~   s&   									*		/	4	
				R|   c           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   s2   | |  _  | |  _ d |  _ |  _ t   |  _ d  S(   Ni    (   t   std_namet   encdataR   t   encposR   R   (   R   R   R   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR0     s    		c         C   s)   |  j  |  j } |  j d 7_ t |  S(   Ni   (   R   R   t   ord(   R   t   c(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   enc_byte  s    c         C   s   t  |  j |  j  S(   N(   R   R   R   (   R   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   std_byte  s    c         C   s3   |  j  j t |  t |   |  j d 7_ d  S(   Ni   (   R   R   t   chrR   (   R   t   lot   hi(    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   put  s     c   	      C   s  |  j    } d } xc|  j t |  j  k  rw| d k rN |  j    } d } n  | d 8} | | ?d @} | d k r |  j |  j    d  q | d k r |  j |  j    |  q | d k r |  j |  j    |  j     q |  j    } | d @rC|  j    } xt t | d @d  D]* } |  j   | d @} |  j | |  qWq x. t | d  D] } |  j |  j   d  qTWq W|  j j   j	 d	 d
  S(   Ni    i   i   i   i   i   i   i   s   utf-16leR:   (
   R   R   RJ   R   R   t   rangeR   R   t   getvalueR}   (	   R   R   t   flagbitsR   Rl   t   nR   R   R   (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR}     s.    	

(   R   R   R0   R   R   R   R}   (    (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyR|     s
   				(C   R%   R   t   structR    R   t   binasciiR   t	   cStringIOR   R   Ri   R   RA   R   R	   Rg   RN   R   t   RAR_BLOCK_OLD_COMMENTt   RAR_BLOCK_OLD_EXTRAt   RAR_BLOCK_OLD_SUBt   RAR_BLOCK_OLD_RECOVERYRh   R\   RS   RP   t   RAR_MAIN_COMMENTt   RAR_MAIN_LOCKRQ   RO   t   RAR_MAIN_AUTHt   RAR_MAIN_RECOVERYRR   t   RAR_MAIN_FIRSTVOLUMERG   R   Rx   t   RAR_FILE_COMMENTt   RAR_FILE_SOLIDt   RAR_FILE_DICTMASKt   RAR_FILE_DICT64t   RAR_FILE_DICT128t   RAR_FILE_DICT256t   RAR_FILE_DICT512t   RAR_FILE_DICT1024t   RAR_FILE_DICT2048t   RAR_FILE_DICT4096R   Ry   Rz   R   t   RAR_FILE_VERSIONR   t   RAR_FILE_EXTFLAGSRT   t   RAR_ENDARC_DATACRCt   RAR_ENDARC_REVSPACEt   RAR_SKIP_IF_UNKNOWNRf   t   RAR_OS_MSDOSt
   RAR_OS_OS2t   RAR_OS_WIN32t   RAR_OS_UNIXR   R   R   R|   (    (    (    s)   /var/www/SABnzbd/sabnzbd/utils/rarfile.pyt   <module>   s|   		 n