
oTc           @   s  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 Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z m Z m Z m Z m Z m Z m Z d  d l m Z m Z d  d l m Z m Z m Z m Z m Z m Z m Z d  d l m Z d  d l j  Z  d  d l! m" Z" m# Z# m$ Z$ e% a& a' e j( ry6 d  d l) Z) d  d l* m+ Z+ d  d	 l, m- Z- m. Z. Wn e/ k
 rn Xn d
 e0 f d     YZ1 e j2 d e j3  Z4 e j2 d e j3  Z5 e j2 d  Z6 e j2 d  Z7 e j2 d  Z8 e j2 d e j3  Z9 e j2 d e j3  Z: e j2 d e j3  Z; e j2 d e j3  Z< e j2 d e j3  Z= e% Z> e% Z? e% Z@ e% ZA e% ZB e% ZC eD ZE e% ZF d   ZG d   ZH d   ZI d d  ZJ d   ZK d   ZL d   ZM d   ZN d   ZO d    ZP d!   ZQ d"   ZR d#   ZS d$   ZT e j2 d%  ZU e j2 d&  ZV e j2 d'  ZW e j2 d(  ZX eD eD d)  ZY d*   ZZ d+   Z[ d,   Z\ d-   Z] e^ d.  Z_ d/   Z` d0   Za d1   Zb d2   Zc d3   Zd d4   Ze d5   Zf d6   Zg d7   Zh e% d8  Zi d9   Zj d S(:   iN(   t   time(   t   TRANSt   UNTRANSt   unicode2localt
   name_fixert   reliable_unpack_namest   unicodert   latin1t   platform_encode(   t   RarFilet
   is_rarfile(   t   format_time_stringt   find_on_patht   make_script_patht   int_convt	   flag_filet	   real_patht   globber(   t   SeriesSorter(   t   Statust   QCHECK_FILEt   RENAMES_FILE(   t   SW_HIDE(   t   STARTF_USESHOWWINDOWt   IDLE_PRIORITY_CLASSt   WindowsErrorc           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   t	   parameter(   t   selft   value(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   __init__4   s    c         C   s   t  |  j  S(   N(   t   reprR   (   R   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   __str__6   s    (   t   __name__t
   __module__R   R   (    (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR   3   s   	sA   \.(?P<ext>part\d*\.rar|rar|r\d\d|s\d\d|t\d\d|u\d\d|v\d\d|\d\d\d)$s   \.(?P<ext>part\d*)$s   ^Loading "(.+)"s   ^(?:File|Target): "(.+)" -s   ^Extracting\sfrom\s(.+)s   \.(\d\d\d$)s   \.(zip$)s   \.*vol[0-9]+\+[0-9]+\.par2s$   (.*[^.])(\.*vol[0-9]+\+[0-9]+\.par2)s   \.(\d+)\.(ts$)c         C   sZ  d   } t  j a t  j a t  j r y\ t d  } t | j d  d  d k rj | |  d  t  j _ n | |  d  t  j _ Wn | |  d  t  j _ n Xt  j	 r | |  d  t  j _
 q | |  d	  t  j _
 n  t  j rt  j r&t j j   r&| |  d
  t  j _ | |  d  t  j _
 n  t  j j sJ| |  d  t  j _ n  t  j j
 sn| |  d  t  j _
 n  | |  d  t  j _ | |  d  t  j _ | |  d  t  j _ nx t  j j st d  t  j _ n  t  j j
 st d  t  j _
 n  t d  t  j _ t d  t  j _ t d  t  j _ t  j p7t  j sVt t  j j
  t  j _ n  d  S(   Nc         S   sB   t  j j t  j j |  |   } t  j | t  j  r: | Sd  Sd  S(   N(   t   ost   patht   abspatht   joint   accesst   X_OKt   None(   R#   t   programt   p(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   checkT   s    !s   sw_vers -productVersiont   .i   i   s   osx/par2/par2-sls   osx/par2/par2-classics   osx/unrar/unrars   osx/unrar/unrar-ppcs   win/par2/x64/par2.exes   win/unrar/x64/UnRAR.exes   win/par2/par2.exes   win/unrar/UnRAR.exes   win/par2/par2-classic.exes   win/unzip/unzip.exes   lib/curl.exet   par2t   unrart   rart   unrar3t   rar3t   nicet   ionicet   unzip(   R.   R/   R0   R1   (   t   sabnzbdt	   load_datat	   save_datat   DARWINt
   run_simplet   intt   splitt
   newsunpackt   PAR2_COMMANDt   DARWIN_INTELt   RAR_COMMANDt   WIN32t   WIN64t   cfgt   allow_64bit_toolst   gett   PAR2C_COMMANDt   ZIP_COMMANDt   CURL_COMMANDR   t   NICE_COMMANDt   IONICE_COMMANDt   unrar_checkt   RAR_PROBLEM(   t   curdirR+   t
   os_version(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   find_programsP   sD    						c	         C   s  t  |   t  |  t  |  t  |  t  |  t  |  t  |  t  |  g }	 | rj |	 j t  |   n  |  j d  r t j s t j |  t j  r |	 j d d  n  t	 |	  \ }
 } }	 } t
   } t j d |  | | | | | | | | 
 yF t j |	 d | d t j d t j d t j d	 |
 d
 | d | } Wn( t j d |  d t d |  d f SX| j j   } | j   } | | f S(   Ns   .pyi    t   pythons:   Running external script %s(%s, %s, %s, %s, %s, %s, %s, %s)t   shellt   stdint   stdoutt   stderrt   startupinfot   envt   creationflagss   Failed script %s, Traceback: t   exc_infos   Cannot run script %s
i(   t   strt   extendt   endswithR5   R@   R"   R&   R'   t   insertt   build_commandt   fix_envt   loggingt   infot
   subprocesst   Popent   PIPEt   STDOUTt   debugt   TrueRR   t   readt   wait(   t   extern_proct   complete_dirt   filenamet   msgidt   nicenamet   catt   groupt   statust   failure_urlt   commandt   stupt
   need_shellRV   RU   R*   t   outputt   ret(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   external_processing   s(    3.		c   	      C   s   t  j j d d |  | g } t |  \ } } } } t j | d | d t j d t j d t j d | d | } | j j	   } | j
   } | | f S(	   NR*   s   -inulRP   RQ   RR   RS   RT   RV   (   R5   R<   R?   R\   R`   Ra   Rb   Rc   RR   Rf   Rg   (	   t   rarfilet   nameRq   Rr   Rs   RV   R*   Rt   Ru   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   SimpleRarExtract   s    i    c
         C   s  |	 d k r/ t  j d t |  j   t g  f S|	 d 7}	 |	 d k rc t | d   \ }
 } } } n t | |  \ }
 } } } t } g  } d } d  } } } } t j   rCg  |
 D] } | | k r | ^ q } | rCt	 } t  j
 d |  t |  | | | |  \ } } | r#| j |  n  t  j
 d |  |  j   qCn  t j   rg  | D] } | | k rV| ^ qV} | rt	 } t  j
 d |  t |  | | | | |  \ } } | r| j |  n  t  j
 d |  |  j   qn  t j   rxg  | D] } | | k r| ^ q} | rxt	 } t  j
 d	 |  t |  | | | | |  rXd } n  t  j
 d
 |  |  j   qxn  t j   rg  | D] } | | k r| ^ q} | rt	 } t  j
 d |  t |  | | | |  \ } } | r| j |  n  t  j
 d |  |  j   qn  | rt j   s7| s7| rt |  | | | | |
 | | | |	 
 \ } } | rs| } n  | r| j |  qn  | | f S(   Ni   s   Unpack nesting too deep [%s]i   i    s   Filejoin starting on %ss   Filejoin finished on %ss   Unrar starting on %ss   Unrar finished on %ss   Unzip starting on %ss   Unzip finished on %ss   TS Joining starting on %ss   TS Joining finished on %s(   R^   t   warningR   t
   final_namet   Falset   build_filelistsR(   RB   t   enable_filejoinRe   R_   t	   file_joinRY   t   set_action_linet   enable_unrart
   rar_unpackt   enable_unzipR4   t   enable_tsjoint   enable_recursivet   unpack_magic(   t   nzot   workdirt   workdir_completet   delet
   one_foldert	   joinablest   zipst   rarst   tst   deptht
   xjoinablest   xzipst   xrarst   xtst   rerunt   newfilest   errort	   new_joinst   new_rarst   new_zipst   new_tst   jnt   newfR/   t   zipt   _tst   zt   y(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR      st    

%%!%	%	c         C   sr   t  j |   } | s" t d d f St | j d   } y |  | j    } | d 7} Wn d } n X| | | f S(   Nt    i    i   s   .ts(   t   TS_REt   searchR|   R:   Rn   t   start(   t   filet   matcht   numt   set(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   match_ts  s    
c         C   s   x |  D] } t  j j |  rM t j d |  y t  j |  WqM qM Xn  | d } t  j j |  r t j d |  y t  j |  Wq q Xq q Wd  S(   Ns   Deleting %ss   .1(   R"   R#   t   existsR^   Rd   t   remove(   t   namesRx   t   name1(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   clean_up_joinables  s    
c         C   sd   t  j j |   \ } } | d k r< t |   \ } } } n
 | d } | j   r\ t |  Sd Sd  S(   Ns   .tsi   i    (   R"   R#   t   splitextR   t   isdigitR:   (   Rx   t   headt   tailR   R   R   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   get_seq_number$  s    

c         C   s  g  } d } i  } d  } xo | D]g }	 t j j |	  \ }
 } | d k r\ t |	  d }
 n  |
 | k ru g  | |
 <n  | |
 j |	  q Wt j d |  yuxn| D]f} | | } | | j   t j j	 |  r t j d |  | r t
 |  q q n  t |  } | d k  rq n  | } | r<| j | |  } n  t j d |  t | d	  } t | d
  } | d k } x | D] }	 t |	  | k rt } n  d | | } t j d |	  |  j t d  d |  t |	 d  } t j | | |  | j   | r)t j d |	  t j |	  n  | d 7} q~Wt
 |  | j   | j   | j |  | rt d  } t d  t |  |  _ |  j d t d  t |  | f  t j t d  | t |  j   q t d  t |  | f } |  j d | d | q WWny t j   d } t d  | |  _ |  j d t d  t |  | f  t j t d  | t |  j   t g  f SXt  | f S(   Ni   i   s   .tsi   s   joinable_sets: %ss3   file_join(): Skipping %s, (probably) joined by par2i   s   file_join(): Assembling %st   abi    g      Y@s   Processing %st   Joinings   %.0f%%t   rbs   Deleting %ss%   Incomplete sequence of joinable filess   File join of %s failedt   Filejoins#   [%s] Error "%s" while joining filess(   Error "%s" while running file_join on %ss   [%s] Joined %s filesR   i `  i  (!   R(   R"   R#   R   R   t   appendR^   Rd   t   sortR   R   t   lent   replacet   openR   Re   R   t   Tt   shutilt   copyfileobjt   closeR   t   flushR   t   fail_msgt   set_unpack_infoR   t   TaR   R{   t   sysRW   R|   (   R   R   R   t   deleteR   R   t   bufsizet   joinable_setst   joinable_sett   joinableR   R   t   currentt   sizeRj   t   joined_filet   nt	   seq_errort   perct   ft   msg(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR   1  s|    
	



&%&"c         C   s  g  } t  } i  } x | D]z }	 t j j t j j |	   d }
 t j |
  ri t j j |
  d }
 n  |
 | k r g  | |
 <n  | |
 j |	  q Wt j	 d |  xa| D]Y}
 | |
 j
 t  | |
 d } | r | j |  r | } n t j j |  d } t j d | |
 |  y9 t | t | |
  | |  |
 |  \ } } } | } Wn t  } t j   d } t d  | |  _ |  j } |  j d t d  t |  | f  t j t d  | t |   t j	 d	 d
 t n X| r t j	 d |  t j	 d |  | j |  n  | r | r | r x | D] }	 t j d |	  y t j |	  Wn- t k
 rt j t d  t |	   n Xd |	 } t j j  |  r9t j d |  y t j |  Wq t k
 rt j t d  t |   q Xq9q9Wq q W| | f S(   Ni    s   Rar_sets: %ss-   Extracting rarfile %s (belonging to %s) to %si   s   Unpacking failed, %st   Unpacks)   [%s] Error "%s" while unpacking RAR filess)   Error "%s" while running rar_unpack on %ss   Traceback: RW   s   rar_unpack(): Rars: %ss   rar_unpack(): Newfiles: %ss   Deleting %ss   Deleting %s failed!s   %s.1(!   R|   R"   R#   R   t   basenamet	   RAR_RE_V3R   R   R^   Rd   R   t   rar_sortt
   startswithR;   R_   t   rar_extractR   R   RW   R   t   set_failR{   R   R   R   R   R   Re   RY   R   t   OSErrorRz   R   (   R   R   R   R   R   R   t   extracted_filest   successt   rar_setsR/   t   rar_sett   rarpatht   extraction_patht   failR   R   t   setnamet	   brokenrar(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR     sd    "			& 
.c      	   C   s[  d } d  } g  } | j r= t j d  | j j   g }	 ng  }	 |	 j | j j d g    |	 r~ t j d t |	   n  t	 j
 j   }
 |
 rCy t |
 d  } | j   j d  } g  | D]$ } | j d  r | j d  ^ q } |	 j |  | j   t j d t |  |
  WqCt k
 r?t j d	 |
  qCXn  | j r\|	 j d
  n$ |	 sm| j r|	 j d d
  n  x |	 D] } | rt j d |  t d  t |  } | | _ | j d |  n  t |  | | | | | |  \ } } } | d k rPqqW| d k rNt j d t d  t t j j |   d   n  | | | f S(   Ni    s   Got a password set by usert   passwords'   Read %s passwords from meta data in NZBt   rs   
s   
 s   Read %s passwords from file %ss$   Failed to read the passwords file %sR   s   Trying unrar with password "%s"R   i   s   %s (%s)s-   Unpacking failed, archive requires a passwordi   (   R(   R   R^   R_   t   stripRY   t   metaRD   R   RB   t   password_filet   get_pathR   Rf   R;   R   t   IOErrorR   t	   encryptedR[   Rd   R   R   R   R   t   rar_extract_coreR   R   R   R"   R#   (   Rw   t   numrarsR   R   R   R   R   t	   new_filesR   t	   passwordst   pw_filet   pwft   linest   pwt   pwsR   R   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR     sJ    	1
		'2c          C   s
  t    } t j d |  y& t |   } | j   }	 | j   Wn t j d |   g  }	 n X| rr d | } n d } | s t j   r d }
 n d }
 t j	   r d } d } n d } d	 } t
 j r d
 t |
 d | | d | d
 |  d | g	 } nZ t r)d
 t |
 d | | d
 |  d | g } n* d
 t |
 d | | | d
 |  d | g } t j   rr| j d d  n  t |  \ } } } } t j d |  t j | d | d t j d t j d t j d | d | } | j } | j r| j j   n  | j t d  d |  d } g  } g  } d } x| j   } | sCPn  | j   } | j d  rt t j t |  j  d   } | | k r| j! |  n  | d 7} | j t d  d | | f  n| j d  rmt" j# j$ t | d   } t d  t% |  | _& d  t' d  | t( |  f } | j) d! t% |  d" | t j* t' d#  t( |   d } n)| j+ d$  rt | d%  j    } t d&  | _& d  t' d'  | t( |  f } | j) d! t% |  d" | t j* t' d'  t( |   d( } n| j d)  rst d*  | _& d  t' d*  | } | j) d! t% |  d" | t j, t' d+  | d,  d } n#| j d-  rN| j   } d. | k rt d/  | _& d0 t' d/  | | d1 f } t j, t' d2  | d1  nF t d*  | _& d0 t' d*  | | d1 f } t j, t' d+  | d1  | j) d! t% |  d" | d } nH| j d3  rt d4  | _& t j* t' d5  | d6  d  t' d5  t( |  | d6 f } | j) d! t% |  d" | d } nd7 | k sd8 | k rd9 | k sd: | k rt j d; |  } | s,t j d< |  } n  | rPt | j  d   j   } n t" j# j- |   d } t d=  | _& d> t' d=  | t( |  f } | j) d! t% |  d" | d( } n d? | k rVt j d@ |  } | rt | j  d   j   } n dA } t dB  | _& d> t' dB  | t( |  f } | j) d! t% |  d" | d } n@ t j dC |  } | r| j! t. | t | j  d(     n  | r-| r| j   n  | j/   | dR dS f Sq-W| r| j   n  | j/   t j0   r	t1   ry	t ry	g  } x |	 D] } | s(t j   rAt" j# j- |  d } n  t2 |  } dD | k rot j dE |  qn  t" j# j3 | |  } t j dF t( |   | j+ dG  rqn  t" j# j4 |  s| j! |  t j t' dH  t( |   qqW| r	t dI  | _& t j dJ t5 |	   t dK  dL dM j3 g  | D] } t% |  ^ q7	 } | j) d! | d" | d dT dU f Sq	t j dN  n  dO | _& t dP  t5 t6 |   t7 t    |  f } | j) d! dQ t% |  | f d" | t j d
 |  d | | f S(V   Ns!   rar_extract(): Extractionpath: %ss'   Archive %s probably has full encryptions   -p%ss   -p-t   et   xs   -o+s   -o-s   -ors   %ss   -idps   -ais   %s/i   s   -tsm-s   Running unrar %sRP   RQ   RR   RS   RT   RV   t	   Unpackings   00/%02di    s   Extracting fromi   s	   %02d/%02ds   Cannot find volumei   s#   Unpacking failed, unable to find %ss   [%s] R   R   s   ERROR: unable to find "%s"s   - CRC failedis   Unpacking failed, CRC errors   ERROR: CRC failed in "%s"i   s   Write errors.   Unpacking failed, write error or disk is full?s   ERROR: write error (%s)i   s   Cannot creates   must not exceed 260s"   Unpacking failed, path is too longs   [%s] %s: %si   s   ERROR: path too long (%s)s   ERROR: s   Unpacking failed, see logs	   ERROR: %si   s#   The specified password is incorrects   ncrypted files
   CRC faileds   Checksum errors"   encrypted file (.+)\. Corrupt files.   Encrypted file:  CRC failed in (.+) \(passwords-   Unpacking failed, archive requires a passwords	   [%s][%s] s   is not RAR archives   (.+) is not RAR archives   ???s   Unusable RAR files+   ^(Extracting|Creating|...)\s+(.*?)\s+OK\s*$t   ?s   Skipping check of file %ss   Checking existence of %st   /s)   Missing expected file: %s => unrar error?s3   Unpacking failed, an expected file was not unpackeds   Expecting files: %ss,   Unpacking failed, these file(s) are missing:t   ;u   ;sC   Skipping unrar file check due to unreliable file names or old unrarR   s   Unpacked %s files/folders in %ss   [%s] %s(    (    (    (    (8   R    R^   Rd   R	   t	   unamelistR   R_   RB   t   flat_unpackt   overwrite_filesR5   R@   R?   RK   t   ignore_unrar_datesR[   R\   R`   Ra   Rb   Rc   RR   RQ   R   R   t   readlineR   R   R   t   reR   t   EXTRACTFROM_RERn   R   R"   R#   R   R   R   R   R   R   Rz   RZ   R   R;   R   Rg   t   unpack_checkR   R   R%   R   RX   R   R   (    Rw   R   R   R   R   R   R   R   t   zft   expected_filest   actiont	   overwritet   renameRq   Rr   Rs   RV   R*   t   proct   currt	   extractedt   rarfilesR   t   lineRj   R   t   line2t   mt   missingR#   t   fullpatht   item(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR     s2   		
					!
# 	 			$	$ 	 	(

#6	/&c         C   s@  yd } t  } t   } x | D] }	 t j d |	  |  j t d  d t |	   | rs |	 j |  rs | }
 n t j	 j
 |	  d }
 t |	 |
 |  r t } q | d 7} q Wt d  t |  t t   |  f } |  j d |  | r| rd } x | D] }	 t j d |	  y t j |	  | d 7} Wn- t k
 ret j t d	  t |	   n Xd
 |	 } t j	 j |  rt j d |  y t j |  | d 7} Wqt k
 rt j t d	  t |   qXqqWn  | SWnM t j   d } t d  | |  _ t j t d  | t |  j   t SXd  S(   Ni    s    Starting extract on zipfile: %s R   s   %si   s   %s files in %sR   s   Deleting %ss   Deleting %s failed!s   %s.1s   Unpacking failed, %ss&   Error "%s" while running unzip() on %s(   R|   R    R^   R_   R   R   R   R   R"   R#   R;   t   ZIP_ExtractRe   RX   R   R   R   R   Rz   R   R   R   R   RW   R   R   R{   (   R   R   R   R   R   R   t   it   unzip_failedt   tmst   _zipR   R   t	   brokenzip(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR4     sL    	 		) 
*"c         C   s   | s t  j   r d } n d } d t d d | d d |  d | g } t |  \ } } } } t j | d | d t j d	 t j d
 t j d | d | } | j j	   }	 | j
   }
 |
 S(   Ns   -js   -qqs   %ss   -os   -Pnones   -d%sRP   RQ   RR   RS   RT   RV   (   RB   R   RF   R\   R`   Ra   Rb   Rc   RR   Rf   Rg   (   t   zipfileR   R   t   optionRq   Rr   Rs   RV   R*   Rt   Ru   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR    s    	c         C   s  t  j j | |  j  } t  j |  } d } d } d }	 t | |  }
 t } } t j | _	 | j
 t d  t d   t | |  } | r t j   r t j d |  | j d t d  t |  d | |
 } t } n  | sst | t t  t j | _	 t } t } y | j
 t d  t d   t j d |  t | d  d t \ } } } } t | |  | | | d	 | \ } } } } } }	 | rt } t j d
 |  | j |  j  nL | rt j d |  n t j d |  | s| j |  j  n  | t f SWqst j   d } t d  | | _ t j  t! d  | t" |   t j d d t | | f SXn  yt j#   rkt  j |  } x | D] } t  j j$ |  d d k r| | k ry6 t  j j | |  } t j d |  t  j% |  Wq%t j t! d  t" |   q%XqqWt  j j | | d  } t  j j | | d  } t  j j& |  ry! t j d |  t  j% |  Wqt j t! d  t" |   qXn  t  j j& |  ry! t j d |  t  j% |  Wqt j t! d  t" |   qXn  t  j j& |  ryy! t j d |  t  j% |  Wqyt' k
 rut j t! d  t" |   qyXn  g  } x9 | D]1 } | |
 k r| j( t  j j | |   qqW| j) |  | j) |	  x | D] } | | k r| j% |  n  t  j j& |  rt j d |  y t  j% |  Wqdt' k
 r`t j t! d  t" |   qdXqqWn  WnI t j   d } t d  | | _ t j  t! d  | t" |   n X| | f S(   Nt   Repairs   Quick Checkings)   Quick-check for %s is OK, skipping repairs   [%s] Quick Check OKR   s   Starting Repairs   Scanning "%s"t	   check_rart   singles   Par verify finished ok on %s!s4   Par verify failed on %s, while QuickCheck succeeded!s   Par verify failed on %s!i   s   Repairing failed, %ss,   Error %s while running par2_repair on set %ss   Traceback: RW   s   .1s   Deleting %ss   Deleting %s failed!s   .par2s   .PAR2s.   Error "%s" while running par2_repair on set %s(    (    (    (*   R"   R#   R%   Rj   t   listdirt   pars_of_setR|   R   t   QUICK_CHECKRo   R   R   t
   QuickCheckRB   t   quick_checkR^   R_   R   R   Re   R   R   t	   REPAIRINGR}   R(   t
   PAR_Verifyt   remove_parsetR   Rz   R   RW   R   R   R   R   t   enable_par_cleanupR   R   R   R   R   RY   (   t   parfile_nzfR   R   R   R  t   parfilet   old_dir_contentt   used_joinablesR   t	   used_par2t   setparst   resultt   readdt	   qc_resultt   parsR   R   R   t   finishedt	   datafilesR   t   new_dir_contentR#   t   path2t
   deletablesR   t   filepath(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   par2_repair5  s    
&	!$	('####.#s=   File: "([^"]+)" - found \d+ of \d+ data blocks from "([^"]+)"s*   File: "([^"]+)" - is a match for "([^"]+)"s   Loading "([^"]+)"\.s   Loaded (\d+) new packetsc   9      C   s  t  j   r d } n d } t } g  }	 g  }
 d  } t j | _ t   } | pX t  j   } t	 j
 d |  d d  l } | j j |  t  d r | s t r t  j   r t t  | t t  j   j    |  g } n t t  | |  g } t } n t t  | |  g } t } d t j j t j j |   d |  } | s[t t | d    d k  rt j j t j j |   d d	  } n  | j s| j r| j |  nA g  t | d   D] } t j j |  r| ^ q} | j |  t |  \ } } } } t	 j
 d
 |  g  } yt  j! | d | d t  j" d t  j" d t  j# d | d | } | j$ } | j% ru| j% j&   n  g  } g  } i  } d } d } t } d } d } d }  x| j' d  }! |! sPn  |! dM k r| |! 7} qn  | j   }" d } |" d k rqn  d |" k r#| j |"  n  | rM|" j( d  rM|" j) d  rMqn  | r|" j( d  rt* j+ |"  }# |# rt, |# j- d   d k r|
 j t j j | j. |   n  d  } qn  d  } |" j( d  rt/ d  t0 |  }$ | j1 d |$ d | t j2 | _ q|" j( d  rt/ d  t0 |  t3 t   |  f }$ | j1 d |$ d | t	 j4 d t3 t   |   d } q|" j( d  rt/ d   t0 |  t3 t   |  f }$ | j1 d |$ d | t	 j4 d! t3 t   |   t   } d }  q|" j( d"  rXt5 j+ |"  }# |# r|# j- d  j6   j) d#  r|# j- d  } qq|" j( d$  ssd% |" k rt	 j4 t7 d&   | j8 }% t	 j4 d' |%  i  }& x- |% D]% }' |' j9 s|' |& t: |' j;  <qqW|& rC|& t< |& j=    }' t	 j4 d( |' j>  | j? |'  |% j@ |'  |' | jA | <|% |' _8 g  } t } qt/ d)  }$ |$ | _B d* t0 |  |$ f }$ | j1 d |$ d | t j2 | _ q|" j( d+  r4	|" j   }( t, |( d  }) t	 j4 d, |)  d }* | j8 }% i  }& x` |% D]X }' |' j9 rqn  t: |' j;  }+ |* |+ 7}* |+ |& k r1g  |& |+ <n  |& |+ j |'  qWt	 j4 d- |*  t }, |* |) k  r|* d k rt/ d.  t t, |) |*   }$ |$ | _B d* t0 |  |$ f }$ | j1 d |$ d | t jC | _ |* }) t }, n  |* |) k rd }- t } x |- |) k  rt< |& j=    }. |& |. }/ |/ ro|/ jD   }0 | j? |0  |0 |% k rb|% j@ |0  n  |- |. 7}- q|& jD |.  qWt	 j4 d/ |- | jE  |, s1	t/ d0  t |-  }$ t jC | _ | jF t/ d1  |$  q1	qt/ d.  t |)  }$ |$ | _B d* t0 |  |$ f }$ | j1 d |$ d | t j2 | _ q|" j( d2  re	t   } | jF t/ d3  dN  q|" j( d  r	|" j   }( tG |( d d   }1 | jF t/ d3  d4 |1  t jH | _ q|" j( d5  r1
t/ d6  t0 |  t3 t   |  f }$ | j1 d |$ d | t	 j4 d7 t3 t   |   d } q|" j( d8  r(|" jI d9  d k r(xD | D]< }2 |" jI t j j |2  d  d k r\
|	 j |2  Pq\
q\
WtJ j+ |"  }# |# rd: |# j- d  j6   k rd: |# j- d  j6   k rt j j |   d }3 |	 j t j j |3 |# j- d    qqd; |" k rPd< |" k rP| rPt } qd= |" k r| ru| j rut } qt0 |" j    }$ |$ | _B d* t0 |  |$ f }$ | j1 d |$ d | t j2 | _ qd> |" k r-tK j+ |"  }# |# r|# j- d  }4 |# j- d  }5 t	 j
 d? |4 |5  |4 | |5 <qqd@ |" k rt0 |" j    }$ |$ | _B d* t0 |  |$ f }$ | j1 d |$ d | t j2 | _ q|  s|" j( dA  r| jF t/ dB  dC |  t j | _ nC |" j( dD  rn1 tL jM |"  }# |# r| j |# j- d   qn  tN jM |"  }# |# r| d k s=| | k  rv| d 7} | jF t/ dB  dE | | f  t j | _ n  | j |# j- d   qn  tO jM dF |"  }# |# rt, |# j- d   } qqqW| jP   Wn? tQ k
 r}6 |6 d dG k r| rt } qtQ |6   n Xt	 j
 dH d j |   | r| rtR tS | jT dI t }7 x" |7 p_i  D] }8 |7 |8 | |8 <q`WtU | tS | jT  n  | rt	 j
 dJ  tV |  | | | | dK t dL | S| | | | |	 |
 f Sd  S(O   Nt   vR   s   Par2-classic = %sii   s   %s*i    i   t   *s   Starting par2: %sRP   RQ   RR   RS   RT   RV   R   s   
s   s
   Repairing:s   Loading:t   %s   Loaded s   Invalid option specifiedsJ   [%s] PAR2 received incorrect options, check your Config->Switches settingsR  R   s   All files are corrects&   [%s] Verified in %s, all files corrects!   Verified in %s, all files corrects   Repair is requireds'   [%s] Verified in %s, repair is requireds"   Verified in %s, repair is requireds	   Loading "s   .par2s   Main packet not founds    The recovery file does not exists   Main packet not found...s   Extra pars = %ss   Found new par2file %ss+   Invalid par2 files, cannot verify or repairu   [%s] %ss   You needs-   Need to fetch %s more blocks, checking blockss   %s blocks availables2   Repair failed, not enough repair blocks (%s short)s   Added %s blocks to %ss   Fetching %s blocks...t   Fetchings   Repair is possiblet	   Repairings   %2d%%s   Repair completes   [%s] Repaired in %ss   Repaired in %ss   File:s   data blocks froms   .rars   Could not writes   at offset 0:s    cannot be renamed to s   is a match fors   PAR2 will rename "%s" to "%s"s)   No details available for recoverable files   Verifying source filest	   Verifyings   01/%02ds	   Scanning:s	   %02d/%02ds!   There are (\d+) recoverable filest   87s   PAR2 output was
%sR   s$   Retry PAR2-joining with par2-classict   classicR  (   s   
s   s    0%(W   RB   t   never_repairR|   R(   R   t	   VERIFYINGRo   R    t   par2_multicoreR^   Rd   t   sabnzbd.assemblert	   assemblert   GetMD5HashesRe   RE   t
   par_optionRX   R=   R   R"   R#   R%   R;   R   R   R@   R8   R   t   isfileRY   R\   R`   Ra   Rb   Rc   RR   RQ   R   Rf   R   RZ   t   _RE_LOADED_PAR2R   R:   Rn   t   downpathR   R   R   t   FAILEDR   R_   t   _RE_LOADING_PAR2t   lowerR   t	   extraparst	   completedR   t   blockst   mint   keysRj   t   add_parfileR   t   partableR   t   FETCHINGt   popR{   R   t   floatR#  t   findt   _RE_BLOCK_FOUNDt   _RE_IS_MATCH_FORt
   LOADING_RER   t	   TARGET_RER  Rg   R   R6   R   t   workpathR7   R$  (9   R(  R'  R   R   R   R?  R  t   cmdt   retry_classicR*  R+  t   extra_par2_nameR   R5   Rq   t   wildcardR  t   flistRr   Rs   RV   R   R*   R	  R0  R2  t   renamest   linebufR1  R.  t	   verifynumt   verifytotalt   verifiedt   charR  R  R   RM  t   block_tablet   nzft   chunkst   needed_blockst   avail_blocksRO  t   forcet   added_blockst
   block_sizet   extrapar_listt   new_nzft   perR   R   t   old_namet   new_namet   errt   previousRx   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR$    s   		'-
)!(4		
$!")		)			$							
 		
 			)	$%<+				
 	"c          C   sP   t  j rH t j j   }  d |  k r. |  d =n  d |  k rD |  d =n  |  Sd  Sd  S(   Nt
   PYTHONPATHt
   PYTHONHOME(   R5   R8   R"   t   environt   copyR(   (   RU   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR]     s    	 
 
c         C   s  t  j s t rq t j   j   rq t j   j   } | j   x | D] } |  j d |  qD W|  j d t  n  t	 r t j
   j   r t j
   j   } | j   x | D] } |  j d |  q W|  j d t	  n  t } d  } d } n t j j |  d  d j   d k } t j   } t | _ t | _ t } | rhd |  d k rht j |  d  |  d <n  | r}t |   }  n  | | |  | f S(   Ni    i   s   .exes   .comt    (   s   .exes   .com(   R5   R@   RI   RB   R3   R   R;   t   reverseR[   RH   R2   R|   R(   R"   R#   R   RL  R`   t   STARTUPINFOR   t   dwFlagsR   t   wShowWindowR   t   win32apit   GetShortPathNamet   list2cmdline(   Rq   t   lstt   argRs   Rr   RV   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR\     s4    	

	&		c         C   s|   |  j  d  d } | j  d  d } | d k rK | d k rK t |  |  S| d k r[ d S| d k rk d St |  |  Sd  S(   NR,   iR/   i   (   R;   t   cmp(   t   at   bt   aextt   bext(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR   B  s    c         C   so   |  j    j d  d } | j    j d  d } | | k rK t |  |  S| d k r[ d S| d k rk d Sd  S(   NR,   iR-   i   (   RL  R;   R  (   R  R  R  R  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   par_sortR  s    c         C   sG  g  g  g  g  f \ } } } } | r xk t  j |  D]W \ } } }	 xE |	 D]= }
 d | k rJ d | k rJ | j t  j j | |
   qJ qJ Wq4 Wn  |  r| rxk t  j |   D]W \ } } }	 xE |	 D]= }
 d | k r d | k r | j t  j j | |
   q q Wq Wn  | rKg  | D]( } t j |  rt |  r| ^ q} n( g  | D] } t j |  rR| ^ qR} g  | D] } t j |  rz| ^ qz} g  | D] } t	 j |  r| ^ q} g  | D]' } t
 j |  r| | k r| ^ q} t j d |  t j d |  t j d |  t j d |  | | | | f S(   Ns   .AppleDoubles	   .DS_Stores    build_filelists(): joinables: %ss   build_filelists(): zips: %ss   build_filelists(): rars: %ss   build_filelists(): ts: %s(   R"   t   walkR   R#   R%   t   SPLITFILE_RER   R
   t   ZIP_REt   RAR_RER   R^   Rd   (   R   R   R  R   R   R   t   filelistt   roott   dirst   filest   _fileR   R   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR}   `  s,    **8(((4c         C   s   | j  j |   } | d  k r" t St } | j } x | D] } t j j | t  r_ t } q8 n  t } xv | D]n } | | j	 k rl t } | j
 d  k	 r | j
 | | k r t j d |  t } n t j d |  t SPql ql W| s8 t j d |  t Sq8 W| S(   Ns   Quick-check of file %s OKs   Quick-check of file %s failed!s#   Cannot Quick-check missing file %s!(   t   md5packsRD   R(   R|   t   finished_filesR5   t   misct   on_cleanup_listRe   Rj   t   md5sumR^   Rd   R_   (   R   R   t   md5packR-  t   nzf_listR   t   foundRi  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR!    s.    	"	c         C   sm   g  } x` t  j |   D]O } t j |  } | r | j d  | k r | j d  r | j |  q q W| S(   Ni   i   (   R"   R  t   FULLVOLPAR2_RER   Rn   R   (   t   wdirR   t   listR   R  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR    s    *c         C   s   |  d k r d Sd Sd  S(   Ni   t   sR   (    (   R  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   add_s  s    c         C   sn   |  rj y t  |   } Wn t SXt j d |  } | rj t | j d   t | j d   f d k Sn  t S(   Ns&   RAR\s(\d+)\.(\d+)\s+.*Alexander Roshali   i   i   iP   (   i   iP   (   R9   R|   R  R   R:   Rn   (   R/   t   versionR  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyRJ     s    1c   	      C   s  g  } y t  |  d  } Wn+ t j d |   | j t |    | SXt j j |   d } x| D]} | j d  } | rd | d d k rd | j	 d  } | d k rtt
 | |  j    } | | j   } t j j | |  } t j j |  rEt | |  rt j d |  qnt j d t |   | j t |   qqt j d	 t |   | j t |   qtqd qd W| j   | S(
   NR   s   Cannot open SFV file %si    s   
 R   R{  s   File %s passed SFV checks   File %s did not pass SFV checks   File %s missing in SFV check(   R   R^   R_   R   R   R"   R#   R;   R   t   rfindR   R%   R   t	   crc_checkRd   R   R   (	   t   sfv_patht   failedt   fpR  R  R   Rj   t   checksumR#   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt	   sfv_check  s2    
c         C   s   y t  |  d  } Wn t SXt j d  } x/ | j d  } | sI Pn  t j | |  } q0 W| j   d | d @f } | j   | j   k S(   NR   R   i   s   %08xI    (   R   R|   t   binasciit   crc32Rf   R   RL  (   R#   t
   target_crcR  t   crct   data(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR    s    
c         C   s   t  d  |  d  d   } | j d t  | j   r> | j   n  | j } | j d d  | j d d  | j d d  | j d d  f S(   NRm  t	   show_nameR   t
   season_numt   episode_numt   ep_name(   R   R(   R   Re   t   is_matcht
   get_valuest	   show_infoRD   (   Rx   t   jobR_   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   analyse_show  s    	c         C   s  d   } d |  | | | | d  g } t t j    }	 |	 r|	 |  | |  | |  | |  | |  t |  d j |  g }
 |
 j t |    t |
  \ } } }
 } t	   } t
 j d |
  yF t j |
 d | d t j d t j d t j d	 | d
 | d | } Wn t
 j d |	 d t | SX| j j   } | j   } | d k rd } x^ | j d  D]J } | j d  } | t |  k  r| rt |  | | <n  | d 7} qiWn  t | d  d k  rt
 j d |   qt
 j d |   n  | S(   Nc         S   s7   |  s t  |   j   d k r# d St t  |    Sd  S(   Nt   noneR   (   RX   RL  R   (   R*   (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   fix
  s    i   R{  s   Running pre-queue script %sRP   RQ   RR   RS   RT   RU   RV   s   Failed script %s, Traceback: RW   i    s   
s   
 '"s   Pre-Q refuses %ss   Pre-Q accepts %s(   R(   R   RB   t
   pre_scriptRX   R%   RY   R  R\   R]   R^   R_   R`   Ra   Rb   Rc   Rd   Re   RR   Rf   Rg   R;   R   R   R   R   (   Rx   t   ppRm   t   scriptt   priorityR   t   groupsR  t   valuest   script_pathRq   Rr   Rs   RV   RU   R*   Rt   Ru   R   R  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt	   pre_queue  s:    	E	c         C   s   g  } x |  D] } | s) | j  d  q d | k sq d | k sq d | k sq d | k sq d | k sq d | k r | j  d |  q | j  |  q Wd j |  S(	   Ns   ""R{  s   	t   &t   |R   t   ,s   "%s"(   R   R%   (   R  t   nlstR  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR  5  s    Hc   
      C   s*  d |  k r t  j r t j d k  r t  j j r t  j j d |  g } t |  \ } } } } t j | d | d t j	 d t j	 d t j	 d	 | d
 | } | j
 j   } | j   nq d d  l } t j d k  r d } n  y= | r | j |  d | }	 n | j |   }	 |	 j   } Wn d  } n X| S(   Ns   https:i   i   s   -kRP   RQ   RR   RS   RT   RV   ii    t   timeout(   i   i   (   i   i   (   R5   R@   R   t   version_infoR<   RG   R\   R`   Ra   Rb   RR   Rf   Rg   t   urllib2t   urlopenR(   (
   t   urlR  Rq   Rr   Rs   RV   R*   Rt   R  R  (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   get_from_urlE  s&    0	
c         C   sD   t  j |  d t  j d t  j d t } | j j   } | j   | S(   NRR   RS   RP   (   R`   Ra   Rb   Re   RR   Rf   Rg   (   R]  R*   t   txt(    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyR9   b  s    '
(k   R"   R   R  R`   R^   R    R  R   R5   t   sabnzbd.encodingR   R   R   R   R   R   R   R   t   sabnzbd.utils.rarfileR	   R
   t   sabnzbd.miscR   R   R   R   R   R   R   t   sabnzbd.tvsortR   t   sabnzbd.cfgRB   t   sabnzbd.constantsR   R   R   R(   R6   R7   R@   R  t   win32conR   t   win32processR   R   t   ImportErrort	   ExceptionR   t   compilet   IR  R   RZ  R[  R  R  R  t
   VOLPAR2_RER  R   R=   RE   R?   RH   RF   RI   R|   RK   RG   RN   Rv   Ry   R   R   R   R   R   R   R   R   R4   R  R7  RX  RY  RK  RH  R$  R]   R\   R   R  Re   R}   R!  R  R  RJ   R  R  R  R  R  R  R9   (    (    (    s&   /var/www/SABnzbd/sabnzbd/newsunpack.pyt   <module>   s   :4
		7		M				\	I	6		8		y ^		%		%		
				"			.	