
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 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 y e j e Z Wn e Z n Xd  d l Z d  d l m Z d  d l m Z m Z m Z m Z m Z m Z d  d l j Z d  d l j Z d  d l m  Z  m! Z! d  d l" j# Z# e j$ d  Z% e j$ d e j&  Z' dx Z( e) e	 j* d e	 j+     Z, d   Z- d   Z. d d  Z/ d d d d  Z1 i d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d d% 6d& d' 6d( d) 6d* d+ 6d, d 6Z2 d-   Z3 d.   Z4 e j5 rTd/ Z6 d0 Z7 n d1 Z6 d$ Z7 d2   Z8 e6 d3 Z9 e7 d4 Z: e9 j; d5  Z< e: j; d5  Z= e d6  Z> d7   Z? e d8  Z@ e d9  ZA d:   ZB e d;  ZC d<   ZD d=   ZE d> ZF d? ZG d@   ZH dA   ZI dB   ZJ dC   ZK dD   ZL dE dF d dG  ZM dH   ZN dI   ZO dJ   ZP dK   ZQ e jR   ZS e eS  dE e dL   ZT e eS  dM    ZU e eS  dN    ZV e eS  dO    ZW e eS  dP    ZX e eS  dQ    ZY dR   ZZ dS   Z[ d e e dT  Z\ e dU  Z] dV   Z^ dW   Z_ dX   Z` y e  ja dY  Zb Wn dE Zb n Xeb ohe`   Zc dZ   Zd dE d[  Ze d\   Zf d]   Zg e j5 ry d  d lh Zh Wn n Xd^   Zi d_   Zj nC y e  jk d`   Zi da   Zj Wn# el k
 rdb   Zi dc   Zj n Xdd   Zm de   Zn e j$ df  Zo e j$ dg e j&  Zp dh   Zq di   Zr dj   Zs d e e dk  Zt dl   Zu dm   Zv e j$ dn  Zw do   Zx dp   Zy dq   Zz dr   Z{ e ds  Z| dt e} f du     YZ~ dv e j f dw     YZ d S(y   iN(   t   synchronized(   t   DEFAULT_PRIORITYt   FUTURE_Q_FOLDERt	   JOB_ADMINt   GIGIt   Statust   MEBI(   t   unicodert   latin1s#   (\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)s   (\d+\.*\d*)\s*([KMGTP]{0,1})t    t   Kt   Mt   Gt   Tt   Ps   %pc         C   s6   t  j   r. t r. |  j d d  j d d  S|  Sd  S(   Ns   %H:%M:%Ss   %I:%M:%S %ps   %H:%Ms   %I:%M %p(   t   cfgt   ampmt	   HAVE_AMPMt   replace(   t   format(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   time_format9   s    c         C   s   |  r |  j    Sd Sd  S(   NR	   (   t   lower(   t   txt(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   safe_lowerB   s    
t   *c         C   sK   | r. t  j  t j j |  |  j d d   St  j  |  j d d   Sd  S(   Nt   [s   [[](   t   globt   ost   patht   joinR   (   R   t   pattern(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   globberK   s    (c         C   s  t  j d  } t |   }  |  d k r0 d }  n  y t  j   |  } Wn t k
 r] | } n X| d  k r | j   } | d k r | j   } q n  | s | j   } t |  d k r | j   } q n  | d  k s | t k r| j   } | t k r| j   } qn  |  | | | f S(   NR   R	   t   nonet   default(   R	   R    R!   (   R	   R!   (	   t   configt   get_categoriesR   t   KeyErrort   Nonet   ppt   scriptR   t   priority(   t   catR&   R'   R(   t   def_catt   my_cat(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   cat_to_optsS   s*    	
s   \\s   \s   \^t   ^s   \$t   $s   \.t   .s   \[R   s   \]t   ]s   \(t   (s   \)t   )s   \+t   +t   ?s   \|t   |s   \{t   {s   \}t   }s   .*c         C   s,   d j  g  |  D] } t j | |  ^ q  S(   NR	   (   R   t   _wildcard_to_regext   get(   t   textt   ch(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   wildcard_to_re   s    c         C   s\  |  } t  } |  rJ|  j   d k rJt j   } x | D] } y8 | | j   } t |  t g   k rt | g } n  Wn g  } n Xxu | D]m } t j d t |  |  t j	  r d | k r t
 j d |  |  n t
 j d |  |  | } t } Pq q W| r7 Pq7 q7 W| sJx3 | D]( } |  j   | j   k rt } PqqWqJn  | rT| Sd  Sd  S(   NR    s   ^%s$R/   s1   Convert index site category "%s" to user-cat "%s"s#   Convert group "%s" to user-cat "%s"(   t   FalseR   R"   R#   t   newzbint   typet   ret   searchR<   t   It   loggingt   debugt   TrueR%   (   R)   t   newcatt   foundt   catst   ucatR>   t   name(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   cat_convert   s:    
"s   \/<>?*|"s   ++{}!@#`t   /c         C   s  |  s
 |  St  } t } d |  k rf t j r@ |  j d d  }  qf t j rf |  |  j d  d }  qf n  g  } xC |  j   D]5 } | | k r | | j |  } n  | j	 |  qy Wd j
 |  }  |  s d }  n  t j j |   \ }  } | j   } | d k r| | k r| } n  |  | S(   Nt   :t   3Ai   R	   t   unknowns   .par2(   t
   CH_ILLEGALt   CH_LEGALt   sabnzbdt   WIN32R   t   DARWINt   rfindt   stript   findt   appendR   R   R   t   splitextR   (   RJ   t   illegalt   legalt   lstR;   t   extt   lowext(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   sanitize_filename   s,    				s   :"s   -''s   latin-1c         C   sN  |  s
 |  St  |  t  r( t } t } n t } t } t j   rW | d 7} | d 7} n  t j   } g  } xY |  j	   D]K } | | k r | r | | j
 |  } | j |  q qv | j |  qv Wd j |  }  |  j	   }  |  d k r
|  d k r
|  j d  }  n  |  sd }  n  t j   } | rJt |   | k rJ|  |  }  n  |  S(   Ns	   \/<>?*|":s	   ++{}!@#`;R	   R/   s   ..RO   (   t
   isinstancet   unicodet   uFL_ILLEGALt	   uFL_LEGALt
   FL_ILLEGALt   FL_LEGALR   t   sanitize_safet   replace_illegalRV   RW   RX   R   t   rstript   folder_max_lengtht   len(   RJ   t   limitRZ   R[   t   replR\   R;   t   maxlen(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   sanitize_foldername   s8    	
	c         C   s   |  j    }  |  j d d  }  |  j d  } t j rz t | d  d k rz d | d k rz | d d } | j d  n6 |  j d  r d } n |  j d  r d } n d } x) | D]! } t j	 j
 | t |   } q Wt j	 j t j	 j |   S(   Ns   \RL   i    i   RM   s   //R	   (   RV   R   t   splitRR   RS   Rj   t   popt
   startswithR   R   R   Rn   t   abspatht   normpath(   R   t   partst   new_patht   part(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   sanitize_and_trim_path  s    /		c         C   s   t  j j |  t  }  t  j j |  |  }  | rv y. t |  d  } | j d  | j   t SWq t k
 rr t	 SXn t  j j
 |   Sd  S(   Nt   ws   ok
(   R   R   R   R   t   opent   writet   closeRE   t   IOErrorR=   t   exists(   R   t   flagt   createt   f(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   flag_file$  s    
c         C   s  t  } t j r3 y t j |   Wqt } qXn g  } | j |  j d   d }  x | D] } | r\ |  d | 7}  t j j	 |   s y t j
 |   t  } Wn t } n X| r t j   } | r y! t j |  t | d  d B Wq q Xq q q q\ q\ W| S(   NRL   R	   i   i  (   RE   RR   RS   R   t   makedirsR=   t   extendRo   R   R}   t   mkdirR   t   umaskt   chmodt   int(   R   R   t   resultt   listt   dt   mask(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   create_all_dirs7  s4    	

!c         C   s  | r | j    } n d } | rt j rU | j d  rU | j d t j d  } n  t j r^| j d d  } t |  d k r | d j   r | d d k r t |  d	 k s | d	 d k r[| j d d
 d  } q[q| j d  r q| j d  rFt |   d k r[|  d j   r[|  d d k r[|  d	  | } q[qt j	 j
 |  |  } q| d d k rt j	 j
 |  |  } qn |  } t j	 j t j	 j |   S(   NR	   s   ~/t   ~i   RL   s   \i    RM   i   s   :\s   \\(   RV   RR   RS   Rq   R   t   DIR_HOMERj   t   isalphaR   R   R   Rs   Rr   (   t   locR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   real_pathY  s*    	2"2c         C   s   | r t  | |  } t j j |  sl t j d |  |  t | |  sl t j t d  |  t	 | f Sn  t j
 | t j t j  r t | f St j t d  |  |  t	 | f Sn
 t	 d f Sd  S(   Ns1   %s directory: %s does not exist, try to create its   Cannot create directory %ss    %s directory: %s error accessingR	   (   R   R   R   R}   RC   t   infoR   t   errort   TaR=   t   accesst   R_OKt   W_OKRE   (   RJ   R   R   R   t   my_dir(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   create_real_path~  s    
c    	      C   s  d d  l  }  i  } y |  j d  |  j  } Wn% t k
 rR t j t d   | SXy |  j | d  } Wn5 t k
 r t j t d  d  |  j	 |  | SXy x t
 d |  j |  d  D] } |  j | |  \ } } } y | j d  | | <Wnp t k
 rky8 d d  l } t j j |  r@| j |  | | <n  Wqlt j d d	 t d
 | | <qlXn X| d 7} q W|  j	 |  |  j	 |  | SWn? t k
 rt j t d   |  j	 |  |  j	 |  i  SXd  S(   Nis2   Cannot connect to registry hive HKEY_CURRENT_USER.s@   Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folderss   Cannot open registry key "%s".i    i   s   latin-1s   Traceback: t   exc_infos   c:\s0   Failed to read registry keys for special folders(   t   _winregt   ConnectRegistryR%   t   HKEY_CURRENT_USERt   WindowsErrorRC   R   R   t   OpenKeyt   CloseKeyt   ranget   QueryInfoKeyt	   EnumValuet   encodet   UnicodeEncodeErrort   win32apiR   R   R}   t   GetShortPathNameRE   (	   R   t   valuest   hivet   keyt   iRJ   t   valuet   val_typeR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_user_shellfolders  sF    #c          C   s   d d l  m }  d d l m } d d  l } t } } |    \ } } } } }	 | | k r | d k } | r | j | j d  }
 x^ t | j	 |
  d  D]C } | j
 |
 |  \ } } } | d k r | j   d k } Pq q W| j |
  q n  | | f S(	   Ni(   t   GetVersionEx(   t   VER_PLATFORM_WIN32_NTi   s<   SYSTEM\CurrentControlSet\Control\Session Manager\Environmenti   t   PROCESSOR_ARCHITECTUREu   AMD64(   R   R   t   win32conR   R   R=   R   t   HKEY_LOCAL_MACHINEt   xrangeR   R   t   upperR   (   R   R   R   t
   vista_plust   x64t   majt   mint   buildnot   platt   csdR   t   nRJ   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   windows_variant  s"    
	 s"   SYSTEM\CurrentControlSet\services\t   CommandLinec         C   s   d d  l  } g  } yy | j | j t |   } xL t | j |  d  D]1 } | j | |  \ } } } | t k rH PqH qH W| j |  Wn t	 k
 r n Xx. t t
 |   D] } t | |  | | <q W| S(   Nii   (   R   R   R   t   _SERVICE_KEYR   R   R   t   _SERVICE_PARMR   R   Rj   R   (   t   serviceR   R   R   R   RJ   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_serv_parms  s     c         C   s   d d  l  } g  } x! | D] } | j t |   q WyF | j | j t |   } | j | t d  | j	 |  | j
 |  Wn t k
 r t SXt S(   Ni(   R   RX   R   t	   CreateKeyR   R   t
   SetValueExR   R%   t   REG_MULTI_SZR   R   R=   RE   (   R   t   argsR   t   uargst   argR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   set_serv_parms  s    c         C   s   d } t  } t j |   } | r t | j d   d t | j d   d t | j d   d } ym | j d  j   d	 k r | d
 } n( | j d  j   d k r | d } n  | t | j d   } Wq | d } t } q Xn  | | f S(   Ni    i   i@B i   i'  i   id   i   t   rciP   t   betai(   i   ic   (   RE   t
   RE_VERSIONRA   R   t   groupR   R=   (   R:   t   versiont   testt   m(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   convert_version2  s    G
c          C   s  t  j   s d  St t j  \ }  } |  sB t j d t j  d  SyI t j d  d } t	 | d  } | j
   } | j   t j |  Wn d  SXy | j   d } Wn d } n Xy | j   d } Wn d } n Xy | j   d } Wn d } n Xy | j   d } Wn | } n Xt |  \ }	 }
 t |  \ } }
 t j d	 |  |	 |  | rt  j   d k r| }	 | } n  | r|  |	 k  rd
 | | f t _ nJ |  |	 k  rd
 | | f t _ n( | r|  | k  rd
 | | f t _ n  d  S(   Ns/   Unsupported release number (%s), will not checks1   http://sabnzbdplus.sourceforge.net/version/latesti    t   rR	   i   i   i   s6   Checked for a new release, cur= %s, latest= %s (on %s)s   %s;%s(   R   t   version_checkR   RR   t   __version__RC   RD   t   urllibt   urlretrieveRy   t   readR{   R   t   removeRo   t   NEW_VERSION(   t   currentt   testvert   fnR   t   datat   latest_labelt   urlt   latest_testlabelt   url_betat   latestt   dummyt   latest_test(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   check_latest_versionE  sT    




	c         C   s   t  |   j   j   }  |  d k r( |  St j |   } | r | j d  r t | j d   }  | j d  } d } x: | t | k r |  d }  | d } qy Wn | j d  }  y t |   SWq d SXn d Sd  S(   Ns   -1i   i   i    g      @g        (   t   strRV   R   t   RE_UNITSRA   R   t   floatt	   TAB_UNITS(   t   valR   t   unitR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   from_units  s$    
i    i   c   	      C   s   d } |  d k  r d } n d } t  t |    j   }  d } y t |   }  Wn d SXx0 |  d k r | d k  r |  d }  | d } q] Wt | } | s d | } n  | | k r d } n d } d	 | } | | |  | | f S(
   Ni    t   -R	   g     @i   g      @i   t    s   %%s%%.%sf %%s%%s(   R   t   absRV   R   R   (	   R   t   spacest	   dec_limitt   postfixt   decimalst   signR   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   to_units  s*    	

	
c         C   s   t  j j t  j j |    }  t  j j t  j j |   } t j sN t j ri |  j   }  | j   } n  | j |   r| d Sd t  j j	 k r y t
 t  j j |  |   SWq d SXn t
 |  | k  Sd  S(   Ni   t   samefilei    (   R   R   Rs   Rr   RR   RS   RT   R   Rq   t   __dict__R   R   (   t   at   b(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   same_file  s    c         C   si   t  j j   t  j j   t t  d d   d k rX t t _ d d l	 m
 } | j   n  t  j |   d  S(   Nt   frozent
   macosx_appi(   t	   AppHelper(   t   syst   stderrt   flusht   stdoutt   getattrR%   RE   RR   t   SABSTOPt   PyObjCToolsR   t   stopEventLoopt   exit(   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   exit_sab  s    	c         C   si   |  j  d  } | d k  r$ |  } n |  d | !} |  | d } y t |  } Wn d  } n X| | f S(   NRM   i    i   (   RU   R   R%   (   t   srvt   markt   hostt   port(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   split_host  s    	
c         C   s   t  j r$ t j d |  t j  } n6 t  j rH t j d |  t j  } n t j d |   } | r xh t t j   pu d  D]K } t	 j
 j | j d   r t St j d | j d   t j d  qy Wn  | S(   Ns   ^(/Volumes/[^/]+)/s   ^([a-z]:\\)s   ^(/(?:mnt|media)/[^/]+)/i   s   Waiting for %s to come online(   RR   RT   R@   RA   RB   RS   R   R   t   wait_ext_driveR   R   R}   R   RE   RC   RD   t   timet   sleep(   R   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   check_mount  s    		c         C   sv   t  |   s |  S|  } | r/ d |  | f } n  t j j |  sX | rQ t |  S| Sn t |  d | d d | Sd  S(   Ns   %s.%sR   i   t
   create_dir(   R  R   R   R}   t   create_dirst   get_unique_path(   t   dirpathR   R  R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s    
c         C   s   d } xx t  j j |   r t  j j |   \ }  } t  j j |  \ } } d | | | f } | d 7} t  j j |  |  }  q	 W|  S(   Ni   s   %s.%d%s(   R   R   R}   Ro   RY   R   (   R   t   numt   fnameRJ   R]   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_unique_filename  s    
c         C   sR   t  j j |   sN t j d |   t |  t  sN t j t d  |   d  Sn  |  S(   Ns   Creating directories: %ss   Failed making (%s)(
   R   R   R}   RC   R   R   RE   R   R   R%   (   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR  '  s    c         C   s\  t  } t j   } | rN t j j |  rN y t j |  WqN t } qN Xn  | sc t |  } n  | rRt	 j
 d |  | |  y t |  |  WqRyX t j j t j j |   s t t j j |   n  t j |  |  t j |   WqOt j   ot j   |  k sAt	 j t d  |  |  t	 j d d t  n  t } qOXqRXn  | | f S(   Ns-   Moving. Old path:%s new path:%s overwrite?:%ss   Failed moving %s to %ss   Traceback: R   (   RE   R   t   overwrite_filesR   R   R}   R   R=   R  RC   RD   t   renamert   dirnameR  t   shutilt   copyfilet   marker_fileR   R   R   (   R   Ru   t   okt	   overwrite(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   move_to_path2  s4    	c         C   s   t  j j |   }  xx t } xa t  j |  d t D]J \ } } } | r1 | r1 | |  k r1 y t |  t } Wq{ q{ Xq1 q1 W| s Pq q Wy t |   Wn n Xd  S(   Nt   topdown(   R   R   Rs   R=   t   walkt
   remove_dirRE   (   R   t   repeatt   roott   dirst   files(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   cleanup_empty_directoriesV  s     %

c   
      C   s1  | j  } | j } | } | s xb t d  D]T } | } | rT | d t |  7} n  y! t j t j j |  |   PWq+ q+ Xq+ W| | _  t | _ n  t j j t j j |  |  |  } t j j	 |  \ } } d } xP t r,| r d | | | f }	 n
 | | }	 t j j
 |	  r(| d } q Pq W|	 S(   Ni   R/   i    s   %s.%d%si   (   t	   work_namet   createdR   R   R   R   R   R   RE   RY   R}   (
   R   t   nzot   filenameR  R+  t   dNameR   t   fPathR]   t   fullPath(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_filepathl  s4    		 	$	
c         C   sm   d  } t j j   } | ri |  ri |  j   d k ri t j j | |   } t j j |  sf d  } qf qi n  | S(   NR    R!   (   R    R!   (	   R%   R   t
   script_dirt   get_pathR   R   R   R   R}   (   R'   t   s_pathR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   make_script_path  s    c         C   sg   |  rV | r( t  j j t j j   t  St  j j t  j j t j j   |  t  Sn t j	 j   Sd  S(   N(
   R   R   R   R   t	   admin_dirR3  R   t   download_dirR   t	   cache_dir(   t   newstyleRJ   t   future(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_admin_path  s
    .c         C   s+  | r t  |  } n d } |  j } | d  k r9 d } n d t |  } |  j } | rn d t j |  } n d } |  j } | r d t j |  } n d } t j	 |  _
 | r | |  _ | j   |  _ n  | r t d  } n d | d } | r~|  j } | rd t j |  } n d } t d	  d
 t d  d }	 | t j   t j |  |  j | | | | f }
 |	 |
 |  _ n	 | |  _ t | t  s| j   rd | } n  t j t d	  d d | | f d  t j   d k rt j j | |  n  d d l m } | j j  |  j d t! d  S(   NR	   s   &pp=%ss   &cat=%ss
   &script=%ss   Unusable NZB files    (R2   s   &nzbname=%ss   URL Fetching failed; %ss5   , <a href="./retry?session=%s&url=%s&job=%s%s%s%s%s">s	   Try agains   </a>s   Newzbin #%ss   %s
%st   otheri    i(   t   NzbQueuet   add_to_history("   R   R&   R%   R   R)   R   t   quoteR'   R   t   FAILEDt   statusR-  RV   t
   final_nameR   t   custom_nameR   t   api_keyt   nzo_idt   fail_msgR`   R   t   isdigitt   growlert   send_notificationt   email_endjobRR   t   emailert   badfetch_mailt   sabnzbd.nzbqueueR=  t   doR   RE   (   R,  R   t   msgt   retryt   contentR&   R)   R'   t   nzbnameR:   t   parmsR=  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   bad_fetch  sL    						0	'c         C   s   t  j   } | r t j j |   \ } } | j   j   } | j   } xq | D]f } | j   j d  j   } d | } | | k s | d k rO | | k rO | o | d k rO t SqO Wn  t S(   NR/   R	   s   .nzb(	   R   t   cleanup_listR   R   RY   RV   R   RE   R=   (   R-  t   skip_nzbR\   RJ   R]   t   kt   item(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   on_cleanup_list  s    
7c         C   s-   y t  j j |   d j   SWn d SXd  S(   Ni   R	   (   R   R   RY   R   (   R-  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_ext  s    c         C   s'   y t  j j |   d SWn d SXd  S(   Ni   R	   (   R   R   Ro   (   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_filename  s    c          C   s   y t  d t j    }  |  j   j   } |  j   t t t | d  t  } t t t | d  t  } d | | f SWn d SXd  S(   Ns   /proc/%d/statmi    i   s   V=%sM R=%sMR	   (	   Ry   R   t   getpidR   Ro   R{   R   t
   _PAGE_SIZER   (   t   tt   vt   virtt   res(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   memory_usage  s    
t   SC_PAGE_SIZEc          C   s|   d }  t  j rx t  j rx t j   } | rx y d t j   }  Wn n X| d k ru t ru d |  t   f }  qu qx n  |  S(   NR	   s   %.2f | %.2f | %.2fi   s   %s | %s(	   RR   RS   RT   R   t   show_sysloadR   t
   getloadavgt   _HAVE_STATMRb  (   t   pt   opt(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   loadavg  s    c         C   sZ  t  |   }  g  } | r; | j d | t d |  f  n  |  d d k r | j d |  d t d |  d  f  |  |  d d 8}  n  |  d d k r | j d |  d t d |  d  f  |  |  d d 8}  n  |  d k r| j d |  t d	 |   f  n# | s'| j d
 t d	 d   n  d j |  } t | t  rR| j d  S| Sd  S(   Ns   %s %st   dayi  i   t   houri<   t   minutei    t   seconds   0 %sR   s   latin-1(   t   int_convRX   t
   s_returnerR   R`   Ra   R   (   t   secondst   dayst   completestrRg  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   format_time_string/  s$    #((#c         C   s(   | d k r t  |   St  |  d  Sd  S(   Ni   t   s(   t   Tx(   RX  R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyRo  G  s    
c         C   s$   y t  |   }  Wn d }  n X|  S(   Ni    (   R   (   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyRn  O  s
    
c         C   s3   y$ t  j |   \ } } } | t SWn d SXd  S(   Ng        (   R   t   GetDiskFreeSpaceExR   (   t   _dirt	   availablet	   disk_sizet
   total_free(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   diskfreeb  s
    c         C   s3   y$ t  j |   \ } } } | t SWn d SXd  S(   Ng        (   R   Rv  R   (   Rw  Rx  Ry  Rz  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   disktotalj  s
    c         C   sw   y^ t  j |   } | j d k  r? t t j  t | j  t St | j  t | j  t SWn t k
 rr d SXd  S(   Ni    g        (	   R   t   statvfst   f_bavailR   R   t   maxintt   f_frsizeR   t   OSError(   Rw  Rt  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR{  v  s    "c         C   sw   y^ t  j |   } | j d k  r? t t j  t | j  t St | j  t | j  t SWn t k
 rr d SXd  S(   Ni    g        (	   R   R}  t   f_blocksR   R   R  R  R   R  (   Rw  Rt  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR|    s    "c         C   s   d S(   Ng      $@(    (   Rw  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR{    s    c         C   s   d S(   Ng      4@(    (   Rw  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR|    s    c         C   sg  y< d d l  m } d d l m } m } m } m } m } Wn t j	 t
 d   t SX| | d  } | | d d }	 | |	 |	 | f | d d f  }
 d } | | d  } | | d | } | | |
 | f | d d f  } yN t | d  j | j | j |   t |  d  j | j | j |   Wn. t j t
 d   t j d d t t SXt S(   Ni(   t   crypto(   t   createKeyPairt   createCertRequestt   createCertificatet   TYPE_RSAt   serials9   pyopenssl module missing, please install for https accessi   t   CNs   Certificate Authorityi    i<   i   im  i
   t   SABnzbdRx   s&   Error creating SSL key and certificates   Traceback: R   i  iQ i3i i  iQ i3i (   t   OpenSSLR  t   sabnzbd.utils.certgenR  R  R  R  R  RC   t   warningR   R=   Ry   Rz   t   dump_privatekeyt   FILETYPE_PEMt   dump_certificateR   R   RE   (   t   ssl_certt   ssl_keyR  R  R  R  R  R  t   cakeyt   careqt   cacertt   cnamet   pkeyt   reqt   cert(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   create_https_certificates  s*    ,!!%)c         C   s   t  j r$ t j d  j d  } n t j d  j d  } t |  t  rW |  f }  n  xk | D]c } xZ |  D]R } t j j t j j	 | |   } t j j
 |  rk t j | t j  rk | Sqk Wq^ Wd  S(   Nt   PATHt   ;RM   (   RR   RS   R   t   getenvRo   R`   t
   basestringR   Rr   R   t   isfileR   t   X_OKR%   (   t   targetst   pathsR   t   targett   target_path(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   find_on_path  s    	!'s*   inet\s+(addr:\s*){0,1}(\d+\.\d+\.\d+\.\d+)s#   inet6\s+(addr:\s*){0,1}([0-9a-f:]+)c          C   s  g  }  t  d  } | r' | d g } n t  d  } | rE | g } n  t j sU | r y t j t j   d   } Wn t j d d   } n Xx | D] } |  j | d d  q Wn t j	 | d t
 d t j d	 t j d
 t j d d  d d } | j j   } | j   x{ | j d  D]j } t j |  } | oB| j d  sWt j |  } n  | r| j d  r|  j | j d   qqW|  S(   Nt   ipR   t   ifconfigt	   localhosti   i    t   shellt   stdinR  R   t   startupinfot   creationflagss   
i   (   R  RR   RS   t   sockett   getaddrinfot   gethostnameR%   RX   t
   subprocesst   PopenR=   t   PIPEt   STDOUTR  R   t   waitRo   t   _RE_IP4RA   R   t   _RE_IP6(   t   ipst   programR   RX  Rg  t   outputt   lineR   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   ip_extract  s4     
c         C   s  t  j j |  \ } } t  j j | t | t   } t j d |  |  t j	 rd } x | d k r y t  j
 |  |  d  SWne t k
 r } t j d |  | |  | d d k r t j d |  |  | d 8} q t |   n Xt j d  q[ Wt |   n t  j
 |  |  d  S(	   Ns   Renaming "%s" to "%s"i   i    s    Error renaming "%s" to "%s" <%s>i    s   Retry rename %s to %si   i   (   R   R   Ro   R   Rn   R=   RC   RD   RR   RS   t   renameR   R  R  (   t   oldt   newR   RJ   t   retriest   err(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s$    	c         C   s   t  j r d } x | d k r y t j |   d  SWnL t k
 r } | d d k rr t j d |   | d 8} q t |   n Xt j d  q Wt |   n t j |   d  S(   Ni   i    i    s   Retry delete %si   i   (	   RR   RS   R   t   rmdirR   RC   RD   R  R  (   R   R  R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR$  	  s    	c         C   s   t  j j |   r t |  |  } | d k rP t j rP | j t |  d   n  xj | D]b } t  j j |  r y t  j |  Wq t	 j
 d |  q XqW | rW t | | t t  qW qW W| s y t  j |   Wq t	 j
 d |   q Xq n  d  S(   NR   s   .*s   Cannot remove file %ss   Cannot remove folder %s(   R   R   R}   R   RR   RS   R   R  R   RC   R   t
   remove_allR=   RE   R  (   R   R   t   keep_foldert	   recursiveR(  R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s"    c         C   s7   t  j j |   r/ t t  j |   j t j @ St Sd  S(   N(   R   R   R  t   boolt   statt   st_modet   S_IWUSRRE   (   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   is_writable4  s    c         C   sR   t  r d } n d } |  rJ t |   j   rJ d | t j   t |   f S|  Sd  S(   Nt   httpss   http:s   %s://%s/browse/post/%s/(   t	   _HAVE_SSLR   RG  R   t   newzbin_url(   R   t   prot(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   format_source_url<  s    	s   ://([^/]+)/c         C   s*   t  j |   } | r" | j d  Sd Sd  S(   Ni   R	   (   t   RE_URLRA   R   (   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   get_base_urlH  s    c         C   s%   x | D] } | |  k r | Sq Wd  S(   N(   R%   (   R:   t   matchest   match(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   match_strO  s    c         C   s<   t  j s t  j r+ |  j   j | j    S|  j |  Sd  S(   N(   RR   RS   RT   R   Rq   (   R   t   prefix(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   starts_with_pathV  s    c         C   sx   y t  j |  |  Wn] |  j   } | rt d | k rt d | k rt t j t d  |   t j d d t qt n Xd  S(   Ns   .appledoubles	   .ds_stores   Cannot change permissions of %ss   Traceback: R   (   R   R   R   RC   R   R   R   RE   (   R   t   permissionst   reportt   lpath(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   set_chmod`  s    c   	      C   s3  t  j s/t j   } y& t | d  t d d  B} t } Wn: t k
 rw t d d  t  j t d d  A@} t } n X| t d d  @} t	 j
 j |   r| r	xs t	 j |   D]O \ } } } t | | |  x- | D]% } t t	 j
 j | |  | |  q Wq Wq,t |  | |  q/t |  | |  n  d  S(   Ni   t   0400t   0777t   7666(   RR   RS   R   R   R   RE   t
   ValueErrort	   ORG_UMASKR=   R   R   t   isdirR#  R  R   (	   R   R  R   R  t
   umask_fileR&  R'  R(  RJ   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   set_permissionsl  s"    	
#
*t   OrderedDictc           B   s  e  Z d    Z e j d  Z e j d  Z d   Z d   Z d   Z e	 d  Z
 d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z e Z e   Z e d  Z d d  Z i  d  Z d   Z d   Z e d d   Z d   Z d   Z d   Z d   Z  d   Z! RS(   c         O   s   t  |  d k r+ t d t  |    n  y |  j Wn7 t k
 ro g  |  _ } | | d  g | (i  |  _ n X|  j | |   d  S(   Ni   s$   expected at most 1 arguments, got %d(   Rj   t	   TypeErrort   _OrderedDict__roott   AttributeErrorR%   t   _OrderedDict__mapt   _OrderedDict__update(   t   selfR   t   kwdsR&  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __init__  s    c         C   s\   | |  k rH |  j  } | d } | | | g | d <| d <|  j | <n  | |  | |  d  S(   Ni    i   (   R  R  (   R  R   R   t   dict_setitemR&  t   last(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __setitem__  s
    	
)c         C   s@   | |  |  |  j  j |  \ } } } | | d <| | d <d  S(   Ni   i    (   R  Rp   (   R  R   t   dict_delitemt	   link_prevt	   link_next(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __delitem__  s    
c         c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S(   Ni   i   (   R  (   R  R&  t   curr(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __iter__  s
    	
	c         c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S(   Ni    i   (   R  (   R  R&  R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __reversed__  s
    	
	c         C   sm   yH x |  j  j   D]
 } | 2q W|  j } | | d  g | (|  j  j   Wn t k
 r[ n Xt j |   d  S(   N(   R  t
   itervaluesR  R%   t   clearR  t   dict(   R  t   nodeR&  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s    	c         C   s   |  s t  d   n  |  j } | rO | d } | d } | | d <| | d <n( | d } | d } | | d <| | d <| d } |  j | =t j |  |  } | | f S(   Ns   dictionary is emptyi    i   i   (   R$   R  R  R  Rp   (   R  R  R&  t   linkR  R  R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   popitem  s     	








c         C   s
   t  |   S(   N(   R   (   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   keys  s    c         C   s   g  |  D] } |  | ^ q S(   N(    (   R  R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR     s    c         C   s!   g  |  D] } | |  | f ^ q S(   N(    (   R  R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   items  s    c         C   s
   t  |   S(   N(   t   iter(   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   iterkeys  s    c         c   s   x |  D] } |  | Vq Wd  S(   N(    (   R  RW  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s    c         c   s$   x |  D] } | |  | f Vq Wd  S(   N(    (   R  RW  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   iteritems  s    c          O   s&  t  |   d k r. t d t  |   f   n |  sC t d   n  |  d } d } t  |   d k rr |  d } n  t | t  r xw | D] } | | | | <q WnX t | d  r xF | j   D] } | | | | <q Wn! x | D] \ } } | | | <q Wx$ | j   D] \ } } | | | <qWd  S(   Ni   s8   update() takes at most 2 positional arguments (%d given)s,   update() takes at least 1 argument (0 given)i    i   R  (    (   Rj   R  R`   R  t   hasattrR  R  (   R   R  R  R<  R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   update  s&    
c         C   sC   | |  k r! |  | } |  | =| S| |  j  k r? t |   n  | S(   N(   t   _OrderedDict__markerR$   (   R  R   R!   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyRp     s    
c         C   s"   | |  k r |  | S| |  | <| S(   N(    (   R  R   R!   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   setdefault#  s    
c         C   ss   t  |   t   f } | | k r% d Sd | | <z5 |  sI d |  j j f Sd |  j j |  j   f SWd  | | =Xd  S(   Ns   ...i   s   %s()s   %s(%r)(   t   idt
   _get_identt	   __class__t   __name__R  (   R  t   _repr_runningt   call_key(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __repr__)  s    
c         C   s   g  |  D] } | |  | g ^ q } t  |   j   } x' t  t    D] } | j | d   qE W| rx |  j | f | f S|  j | f f S(   N(   t   varst   copyR  Rp   R%   R  (   R  RW  R  t	   inst_dict(    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   __reduce__5  s    #c         C   s   |  j  |   S(   N(   R  (   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR  >  s    c         C   s(   |    } x | D] } | | | <q W| S(   N(    (   t   clst   iterableR   R   R   (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   fromkeysA  s    	c         C   sM   t  | t  r= t |   t |  k o< |  j   | j   k St j |  |  S(   N(   R`   R  Rj   R  R  t   __eq__(   R  R<  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR  H  s    .c         C   s   |  | k S(   N(    (   R  R<  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   __ne__M  s    c         C   s
   t  |   S(   N(   t   KeysView(   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   viewkeysR  s    c         C   s
   t  |   S(   N(   t
   ValuesView(   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt
   viewvaluesU  s    c         C   s
   t  |   S(   N(   t	   ItemsView(   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt	   viewitemsX  s    N("   R  t
   __module__R  R  R  R  R  R  R  RE   R  R  R   R  R  R  R  R  R  t   objectR  Rp   R%   R  R
  R  R  t   classmethodR  R  R  R  R  R  (    (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR    s8   																					t   OrderedSetQueuec           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   | |  _  t   |  _ d  S(   N(   t   maxsizeR  t   queue(   R  R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   _init^  s    	c         C   s   d  |  j | <d  S(   N(   R%   R  (   R  RX  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   _puta  s    c         C   s   |  j  j   d S(   Ni    (   R  R  (   R  (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   _getc  s    (   R  R  R   R!  R"  (    (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyR  ]  s   		(   R	   R
   R   R   R   R   (   R   R   RC   R   R@   R  t	   threadingR  R  R  R   R  t   Queuet   sslRE   R  R=   RR   t   sabnzbd.decoratorsR    t   sabnzbd.constantsR   R   R   R   R   R   t   sabnzbd.configR"   t   sabnzbd.cfgR   t   sabnzbd.encodingR   R   t   sabnzbd.growlerRH  t   compileR   RB   R   R   R  t   strftimet	   localtimeR   R   R   R   R%   R,   R8   R<   RK   RS   RP   RQ   R_   Rd   Re   t   decodeRb   Rc   Rn   Rw   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  R  R  t   RLockt   DIR_LOCKR  R  R  R!  R)  R1  R5  R;  RT  RY  RZ  R[  Rb  t   sysconfR]  Rf  Ri  Rs  Ro  Rn  R   R{  R|  R}  t   ImportErrorR  R  R  R  R  R  R$  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s    /var/www/SABnzbd/sabnzbd/misc.pyt   <module>   s  

.				"
		,			!

*	"	%	3	 		-		;	!					$'		A				
									!		#							
	!