ó
‚•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 Td  d l m	 Z	 d  d l
 j Z d  d l j Z d  d l m Z m Z m Z m Z m Z d  d l j Z d  d l m Z m Z m Z d  d l j j Z e a d „  Z d „  Z  d „  Z! e" e" e# d	 „ Z$ d
 „  Z% d „  Z& d „  Z' d „  Z( e d „ Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d d d Z0 d „  Z1 e j2 ƒ  Z3 d e4 f d „  ƒ  YZ5 e  j6 d e  j7 ƒ Z8 e9 d d „ Z: d „  Z; d „  Z< d  d! d" d# f Z= d$ „  Z> d S(%   iÿÿÿÿN(   t   *(   t   synchronized(   t   cat_convertt   sanitize_foldernamet   wildcard_to_ret   cat_to_optst	   match_str(   t   latin1t   unicodert   xml_namec           C   s   t  ƒ  a d  S(   N(   t   RSSQueuet   __RSS(    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   init/   s    c           C   s/   t  r+ t  j ƒ  y t  j ƒ  Wq+ q+ Xn  d  S(   N(   R   t   stopt   join(    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   3   s    
c         C   s   t  r t  j |  ƒ n  d  S(   N(   R   t   delete(   t   feed(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   del_feed<   s     c         C   s)   t  r% t  j |  | | d | d | ƒSd  S(   Nt   forcet   readout(   R   t   run_feed(   R   t   downloadt   ignoreFirstR   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   @   s     c         C   s   t  r t  j |  ƒ Sd  S(   N(   R   t   show_result(   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   D   s     c         C   s   t  r t  j |  | ƒ n  d  S(   N(   R   t   flag_downloaded(   R   t   id(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   H   s     c         C   s   t  r t  j |  | ƒ Sd  S(   N(   R   t
   lookup_url(   R   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   L   s     c           C   s   t  r t  j ƒ  Sd  Sd  S(   N(   R   t   runt   None(    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt
   run_methodP   s    
c         C   s0   t  r" |  r |  t  _ q, t  j Sn
 t j ƒ  Sd  S(   N(   R   t   next_runt   time(   t   t(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   W   s
    
c           C   s   t  r t  j ƒ  n  d  S(   N(   R   t   save(    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR!   a   s     c         C   s   t  r t  j |  ƒ n  d  S(   N(   R   t
   clear_feed(   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR"   e   s     c         C   s   t  r t  j |  ƒ n  d  S(   N(   R   t   clear_downloaded(   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR#   i   s     c         C   s4   t  |  ƒ o3 t |  ƒ j ƒ  d d d t t ƒ f k S(   Nt   defaultR    t    (   t   boolt   strt   lowert   DEFAULT_PRIORITY(   t   item(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt
   notdefaultp   s    c          C   s.   g  }  x! t  j ƒ  D] } |  j | ƒ q W|  S(   N(   t   configt   get_rsst   append(   t   urist   uri(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   ListUrisv   s    c         C   sv   |  j  ƒ  j ƒ  }  |  j d ƒ r4 |  d j  ƒ  } n t |  ƒ } y t j | t j ƒ SWn t j d |  ƒ d  SXd  S(   Ns   re:i   s   Could not compile regex: %s(
   t   stripR(   t
   startswithR   t   ret   compilet   It   loggingt   debugR   (   t   textt   txt(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   convert_filter}   s    i   i   i  c         C   s¿   t  j  ƒ  } | t } |  j ƒ  } x– | D]Ž } |  | d } | | k r} |  | j d d ƒ d d	 k r} d |  | d <q} n  |  | d d k r) | | k  r) t j d | ƒ |  | =q) q) Wd  S(
   NR   t   statust    i    t   Gt   Bt   Xs   Purging link %s(   R>   R?   (   R   t   _EXPIRE_SECt   keyst   getR7   R8   (   t   jobst   new_jobst   nowt   limitt   oldst   oldt   tm(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   remove_obsoleteŽ   s    
  R
   c           B   sÚ   e  Z d  „  Z d „  Z e e ƒ d e e e e d „ ƒ Z	 d „  Z
 e e ƒ d „  ƒ Z e e ƒ d „  ƒ Z e e ƒ d „  ƒ Z e e ƒ d „  ƒ Z e e ƒ d „  ƒ Z e e ƒ d	 „  ƒ Z e e ƒ d
 „  ƒ Z RS(   c   
      C   sú  d „  } d „  } i  |  _  t j ƒ  |  _ yŸt j ƒ  j ƒ  } t j t ƒ } t	 | ƒ t	 i  ƒ k rÈx_| D]T} | | k r• t
 j d | ƒ qm n  i  |  j  | <xû| | D]ï} | | | } t	 | ƒ t	 g  ƒ k rŠi  } y‘ | d | d <| d | d <| d | d	 <| d
 | d <| d | d <| d | d <| d | d <t t ƒ | d <d | d <| |  j  | | <Wqœt k
 r†~ qœXq­ yå| | | }	 t |	 t ƒ sÄt |	 j d ƒ t ƒ rÍt ‚ n  |	 j d d ƒ d d" k röd |	 d <n  t |	 j d	 ƒ t ƒ sd |	 d	 <n  |	 d	 j d t j ƒ  ƒ |	 d	 <| |	 j d ƒ ƒ s]d |	 d <n  | |	 j d ƒ ƒ sd |	 d <n  | |	 j d ƒ ƒ s¡d |	 d <n  | |	 j d ƒ ƒ sÃd |	 d <n  | |	 j d ƒ ƒ såd |	 d <n  | |	 j d d ƒ ƒ s
d |	 d <n  t |	 j d ƒ t ƒ s5t j ƒ  |	 d <n  | |	 j d d ƒ ƒ s]d |	 j d <n  |	 |  j  | | <Wq­ t t f k
 r›t
 j d  t |	 ƒ q­ Xq­ Wt |  j  | |  j  | j ƒ  ƒ qm Wn  Wn! t k
 rìt
 j d! t ƒ n Xt |  _ d  S(#   Nc         S   s%   |  d  k p$ |  d k p$ t |  t ƒ S(   NR%   (   R   t
   isinstanceR'   (   t   p(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt	   check_str¢   s    c         S   s!   y t  |  ƒ t SWn t SXd  S(   N(   t   intt   Truet   False(   RM   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt	   check_int¤   s
    
s$   Dropping obsolete data for feed "%s"i    R<   i   t   titlei   t   urli   t   cati   t   ppi   t   scripti   R   t   priot   ruleR=   t   DR>   R?   R@   R%   s   www.newzbin.comt   orgcatt   3R   s   -100t   orders-   Incorrect entry in %s detected, discarding %ss   Cannot read file %s(   RZ   R>   R?   R@   (   RD   R   R   R,   R-   RB   t   sabnzbdt
   load_admint   RSS_FILE_NAMEt   typeR7   R8   R'   t   NORMAL_PRIORITYt
   IndexErrorRL   t   dictRC   t   unicodet   replacet   cfgt   newzbin_urlt   floatt   KeyErrort   infoRK   t   IOErrorRQ   t   shutdown(
   t   selfRN   RR   t   definedt   feedsR   t   linkt   datat   newR*   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   __init__¡   s|    			

)	          ,c         C   s   t  |  _ d  S(   N(   RP   Rm   (   Rn   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   ö   s    c   1         s7
  t  ˆ _ ‡ f d †  } | s" d Sg  } g  } y t j ƒ  | }	 WnE t k
 r‰ t j t d ƒ | ƒ t j d d t	 ƒt
 d ƒ | SX|	 j ƒ  }
 |	 j ƒ  } t | ƒ s· d  } n  |	 j ƒ  } t | ƒ sØ d  } n  |	 j ƒ  } t | ƒ sù d  } n  |	 j ƒ  } t | ƒ sd  } n  g  } g  } g  } g  } g  } g  } g  } x² |	 j ƒ  D]¤ } | d } | d: k rvd  } n  | j | ƒ | j | d	 ƒ | j | d
 ƒ | j | d ƒ | j t | d ƒ ƒ | j | d ƒ | j | d d k ƒ qQWt | ƒ } | ˆ j k o| } d t j j t _ d |
 k rRd |
 k rR|
 d 7}
 n  d  } d  } | rù|
 j d d ƒ }
 t j d |
 ƒ t j |
 j d d ƒ ƒ } t j d |
 ƒ | sät d ƒ |
 d f } t j | ƒ t | ƒ S| j  d d ƒ } | d; k r)t d  ƒ | } t j | ƒ t | ƒ S| d! k rq| d" k rqt d# ƒ | | |
 f } t j | ƒ t | ƒ S| j  d$ ƒ } d% | k rÐ| rÐt d ƒ |
 t! t" | d% ƒ ƒ f } t j | ƒ t | ƒ S| sùt d& ƒ |
 } t j | ƒ qùn  | ˆ j k ri  ˆ j | <n  ˆ j | ‰  | r>| s`t | ƒ Sn" ˆ  j# ƒ  } | j$ ‡  f d' †  ƒ d } x‘| D]‰} ˆ j r€d  S| r$y t% |
 | ƒ \ }  }! WnX t& t' f k
 rùd  }  d }! t j t d( ƒ d |
 ƒ t j d d t	 ƒt
 d( ƒ SXt( |! ƒ }! t( | j) ƒ }" t |" ƒ }# nY | }  ˆ  |  j  d) d ƒ }! |! d< k rUd  }! n  t( ˆ  |  j  d* d ƒ ƒ }" t |" ƒ }# |  rì	|  j* ƒ  j d d ƒ }  | j |  ƒ |  ˆ  k rÑˆ  |  j  d d ƒ d }$ n d+ }$ |$ d, k sõ|$ d- k rì	| rì	t j d. |" ƒ t  }% | }& | }' | }( | }) d }* x*t+ | ƒ D]}* | |* r6|! r•| |* d/ k r•t, j- | |* |! ƒ }+ |+ sOt j d0 |* ƒ t  }% PqOqR| |* r¸t, j- | |* |# ƒ }+ n t  }+ | |* d1 k rï|+ rït j d0 |* ƒ t  }% Pn  |+ r| |* d2 k rt j d3 |* ƒ t	 }% Pn  |+ rR| |* d4 k rRt j d0 |* ƒ t  }% PqRq6q6Wt | ƒ r‘t | |* ƒ r| |* }& n |! r›| r›t. |! ƒ }& n  |& r¼t/ |& ƒ \ }& }, }- }. n d  }& }, }- }. t | |* ƒ rë| |* }' n | |* pø|! s|, }' n  t | |* ƒ r!| |* }( n t | |* ƒ p4|! s@|- }( n  | |* t" t0 ƒ d f k ri| |* }) q‘| |* t" t0 ƒ k p‚|! s‘|. }) q‘n  t1 j2 ƒ  rÚ| |# ƒ rÚt1 j2 ƒ  d	 k rÑt j d5 |" ƒ qmqÚt3 }) n  | oä| }/ |  ˆ  k rM	|/ o	ˆ  |  j  d d ƒ j4 d ƒ }/ |/ p"	| }/ | pG	ˆ  |  j  d d ƒ j4 d ƒ }0 n | }0 |% r¬	t5 ˆ  |  |# d6 |! |& |' |( |/ |0 | d7 |) d8 t" |* ƒ ƒ|/ ræ	| j |# ƒ qæ	qé	t5 ˆ  |  |# d9 |! |& |' |( t  |0 | d7 |) d8 t" |* ƒ ƒqì	n  | d	 7} qmW| r&
t1 j6 ƒ  r&
| r&
t7 j8 | | ƒ n  t9 ˆ  | ƒ d S(=   Nc            s‹   |  j  ƒ  }  xx ˆ  j D]m } xd ˆ  j | D]U } ˆ  j | | } | j d d ƒ d d k r* | j d d ƒ j  ƒ  |  k r* | Sq* Wq Wd S(   NR<   R=   i    RZ   RS   R%   (   R(   RD   RC   (   RS   t   fdt   lkR*   (   Rn   (    s   /var/www/SABnzbd/sabnzbd/rss.pyt	   dup_titleþ   s    s   No such feeds#   Incorrect RSS feed description "%s"s   Traceback: t   exc_infoi    R%   R    i   i   i   i   i   i   t   0s   SABnzbd+/%ss	   nzbs.org/s   &dl=1R=   s   %20s   Running feedparser on %ss   feed://s   http://s   Done parsing %ss"   Failed to retrieve RSS from %s: %st   ?R<   iç  i‘  i’  i“  s,   Do not have valid authentication for feed %siô  iW  s:   Server side error (server code %s); could not get %s on %st   entriest   bozo_exceptions   RSS Feed %s was emptyc            s(   ˆ  |  j  d d ƒ ˆ  | j  d d ƒ S(   NR]   i    (   RC   (   t   xt   y(   RD   (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   <lambda>p  s    s   Incompatible feedR[   RS   t   Nt   NGBR@   s   Trying title %st   Cs   Filter rejected on rule %dt   Mt   As   Filter matched on rule %dt   Rs   Ignoring duplicate job %sR>   t   priorityRY   R?   (   R%   R    (   i‘  i’  i“  (   R%   R    (:   RQ   Rm   R,   R-   Rj   R7   t   errort   TaRk   RP   t   TR0   RU   R+   R   RV   RW   R†   t   filtersR.   R;   t   lenRD   R^   t   versiont   __version__t
   feedparsert
   USER_AGENTRf   R8   t   parseR   RC   R	   R'   RB   t   sortt	   _get_linkt   AttributeErrorRc   R   RS   R2   t   xrangeR4   t   searchR   R   R)   Rg   t   no_dupest   DUP_PRIORITYt   endswitht   _HandleLinkt	   email_rsst   emailert   rss_mailRK   (1   Rn   R   R   R   R   R   Rw   t   newlinkst   new_downloadsRp   R0   t   defCatt   defPPt	   defScriptt   defPriot   regexest   reTypest   reCatst   rePPst   rePriost	   reScriptst	   reEnabledt   filtert   reCatt   regcountt   firstt   msgR{   t   dR<   R]   t   entryRq   t   categoryt   atitleRS   t   jobstatt   resultt   myCatt   myPPt   myScriptt   myPriot   nt   foundt   catPPt	   catScriptt   catPriot   actt   star(    (   RD   Rn   s   /var/www/SABnzbd/sabnzbd/rss.pyR   ù   st   					
	


&
	 	

			&(%c         C   s  t  j st } |  j t j ƒ  k  rG t j ƒ  t j j ƒ  d |  _ n  t j	 ƒ  } x¢ | j
 ƒ  D]” } yz | | j j ƒ  rß t j d | ƒ t } |  j | d t d t ƒx1 t d ƒ D]  } |  j rË d  St j d ƒ q¸ Wn  Wq` t k
 ró q` Xq` W| r|  j ƒ  t j d ƒ qn  d  S(   Ni<   s(   Starting scheduled RSS read-out for "%s"R   R   i   g      ð?s    Finished scheduled RSS read-outs(   R^   t
   PAUSED_ALLRQ   R   R   Rg   t   rss_rateRC   R,   R-   RB   t   enableR7   Rk   RP   R   R”   Rm   t   sleepRj   R!   (   Rn   t   activeRp   R   R}   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   ò  s(    	#	
c         C   s4   | |  j  k r, y |  j  | SWq0 i  SXn i  Sd  S(   N(   RD   (   Rn   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR     s    c         C   s   t  j |  j t  j ƒ d  S(   N(   R^   t
   save_adminRD   R`   (   Rn   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR!     s    c         C   s    | |  j  k r |  j  | =n  d  S(   N(   RD   (   Rn   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR     s    c         C   sa   | |  j  k r] |  j  | } x> | D]3 } | | j d d ƒ | k r# d | | d <q# q# Wn  d  S(   NRT   R%   RZ   R<   (   RD   RC   (   Rn   R   R   t   lstRq   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   !  s
    c         C   s[   | rW | |  j  k rW |  j  | } x2 | D]' } | | j d ƒ | k r) | | Sq) Wn  d  S(   NRT   (   RD   RC   R   (   Rn   R   RT   RÆ   Rq   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR   )  s    c         C   s    | |  j  k r |  j  | =n  d  S(   N(   RD   (   Rn   R   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR"   2  s    c         C   sa   | |  j  k r] xK |  j  | D]9 } |  j  | | d d k r d |  j  | | d <q q Wn  d  S(   NR<   RZ   s   D-(   RD   (   Rn   R   R*   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR#   8  s    N(   t   __name__t
   __module__Rt   R   R   t   LOCKR   RQ   RP   R   R   R   R!   R   R   R   R"   R#   (    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR
       s   	U		ø	
	s2   (newz)(bin|xxx|bin2|xxx2)\.[\w]+/browse/post/(\d+)i    c         C   sÉ  | d k r d  } n  | d k r* d  } n  i  |  | <|
 |  | d <| |  | d <t | ƒ re d  } n | } t j | ƒ } | r½| j d ƒ j ƒ  d k r½| j d ƒ r½| j d ƒ r½| r.d |  | d	 <| |  | d
 <t j d | j d ƒ | ƒ t j	 | j d ƒ d | d | d | d | d | ƒq£|	 rI| d |  | d	 <n | |  | d	 <| |  | d
 <| j d ƒ |  | d <| |  | d <| |  | d <| |  | d <t
 | ƒ |  | d <næ | r d |  | d	 <| |  | d
 <t j d | | ƒ t j | d | d | d | d | d | ƒnƒ |	 r;| d |  | d	 <n | |  | d	 <| |  | d
 <| |  | d <| |  | d <| |  | d <| |  | d <t
 | ƒ |  | d <t j ƒ  |  | d <| |  | d <d  S(   NR%   R]   R[   i   t   newzi   i   RZ   R<   RS   s   Adding %s (%s) to queueRV   RW   RU   R†   t   nzbnameR    RT   RX   R   RY   (   R   t   special_rss_sitet
   RE_NEWZBINR•   t   groupR(   R7   Rk   R^   t	   add_msgidR'   t   add_urlR   (   RD   Rq   RS   t   flagR[   RU   RV   RW   R   R¿   R]   R†   RY   RË   t   m(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR™   C  sT     	 	
	?7.c         C   s|  d  } d } |  j ƒ  }  d |  k sH d |  k sH d |  k sH d |  k r | j } | of d | j ƒ  k sÒ | j d j } qÒ nS | j } | s¡ | j d j } n  t |  | ƒ rÒ y | j d d } WqÒ qÒ Xn  | r^d	 | j ƒ  k r^y | j } WnZ y | j } WqTy | j	 d d
 } WqPy | j
 } WqLd } qLXqPXqTXn X| | f St j t d ƒ | ƒ d Sd  S(   NR%   s   newzbin.s   newzxxx.s	   newzbin2.s	   newzxxx2.s   /post/i    t   hreft   httpt   terms   Empty RSS entry found (%s)(   NR%   (   R   R(   Rq   t   linksRÓ   t
   encl_sitest
   enclosurest   cattextR±   t   tagst   descriptionR7   t   warningRˆ   (   R0   R°   Rq   R±   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR’   w  s@    0		
c         C   s   t  j ƒ  p t |  t  j ƒ  ƒ S(   N(   Rg   t   rss_filenamesR   t   rss_odd_titles(   RT   (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyRÌ   ¢  s    s   nzbindex.nls   nzbindex.coms   animeusenet.orgs   nzbclub.comc         C   s7   x0 t  D]( } | |  k s+ | r | | k r t Sq Wt S(   N(   t   _ENCL_SITESRP   RQ   (   RT   Rq   t   site(    (    s   /var/www/SABnzbd/sabnzbd/rss.pyR×   ©  s    (?   R4   R7   R   t	   threadingt   urllibt   osR^   t   sabnzbd.constantst   sabnzbd.decoratorsR   t   sabnzbd.configR,   t   sabnzbd.cfgRg   t   sabnzbd.miscR   R   R   R   R   t   sabnzbd.emailerR›   t   sabnzbd.encodingR   R   R	   t   sabnzbd.utils.feedparsert   utilsRŽ   R   R   R   R   R   RQ   RP   R   R   R   R   R   R   R!   R"   R#   R+   R1   R;   RA   RK   t   RLockRÉ   t   objectR
   R5   R6   RÍ   Rb   R™   R’   RÌ   Rß   R×   (    (    (    s   /var/www/SABnzbd/sabnzbd/rss.pyt   <module>   sR   
(								
							ÿ ¢3	+	