ó
‚•oTc           @   sq   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z e j ƒ  Z d e	 f d „  ƒ  YZ
 e
 ƒ  d S(   iÿÿÿÿN(   t   synchronized(   t   GIGIt   ArticleCachec           B   s§   e  Z 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 d „  Z d „  Z RS(
   c         C   s:   d |  _  d |  _ d |  _ g  |  _ i  |  _ |  t _ d  S(   Ni    (   t   _ArticleCache__cache_limit_orgt   _ArticleCache__cache_limitt   _ArticleCache__cache_sizet   _ArticleCache__article_listt   _ArticleCache__article_tableR   t   do(   t   self(    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   __init__"   s    					c         C   s   t  |  j ƒ |  j |  j f S(   N(   t   lenR   R   R   (   R	   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt
   cache_info+   s    c         C   s7   | |  _  | d k  r! t |  _ n t | t ƒ |  _ d  S(   Ni    (   R   R   R   t   min(   R	   t   limit(    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt	   new_limit/   s    	c   	      C   ss  | j  } | j } | j s$ | j rC t j rC t j d | ƒ qC n  | j  j j } | | k rn | j | ƒ n  |  j	 r_|  j	 d k  r™ |  j
 | | ƒ qot | ƒ } x{ |  j |  j	 | k r"|  j r"|  j j d ƒ } |  j j | ƒ } |  j t | ƒ 8_ | | k r¨ |  j | | ƒ q¨ q¨ W|  j | |  j	 k rL|  j
 | | ƒ qo|  j | | ƒ n |  j | | ƒ d  S(   Ns   %s would be discardedi    (   t   nzft   nzot   deletedt   sabnzbdt   LOG_ALLt   loggingt   debugt   saved_articlest   appendR   t   _ArticleCache__add_to_cacheR   R   R   t   popR   t   _ArticleCache__flush_article(	   R	   t   articlet   dataR   R   R   t	   data_sizet   old_articlet   old_data(    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   save_article9   s.    					c      	   C   sÓ   d  } | j j } | |  j k rw |  j j | ƒ } |  j j | ƒ |  j t | ƒ 8_ t	 j
 r­ t j d | ƒ q­ n6 | j r­ t	 j | j | j d t d t d t ƒ} n  | | j k rÏ | j j | ƒ n  | S(   Ns   Loaded %s from cachet   removet	   do_picklet   silent(   t   NoneR   R   R   R   R   R"   R   R   R   R   R   R   t   art_idt	   load_datat   workpatht   Truet   FalseR   (   R	   R   R   R   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   load_articled   s    		c         C   sQ   d |  _  xA |  j rL |  j j d ƒ } |  j j | ƒ } |  j | | ƒ q Wd  S(   Ni    (   R   R   R   R   R   (   R	   R   R   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   flush_articlesx   s
    	c         C   s¢   t  j r t j d | ƒ n  x | D]w } | |  j k rr |  j j | ƒ |  j j | ƒ } |  j t	 | ƒ 8_ n  | j
 r# t  j | j
 | j j j ƒ q# q# Wd  S(   Ns   Purgable articles -> %s(   R   R   R   R   R   R"   R   R   R   R   R&   t   remove_dataR   R   R(   (   R	   t   articlesR   R   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   purge_articles€   s    		c         C   sª   | j  } | j } | j s$ | j rC t j rC t j d | ƒ qC n  | j ƒ  } | r– t j rq t j d | ƒ n  t j | | | j	 d t
 d t ƒn t j d | ƒ d  S(   Ns   %s would be discardeds   Flushing %s to diskR#   R$   s   Flushing %s failed -> no art_id(   R   R   R   R   R   R   R   t
   get_art_idt	   save_dataR(   R*   R)   t   warning(   R	   R   R   R   R   R&   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   __flush_articleŒ   s    				%c         C   s€   | |  j  k r. |  j t |  j  | ƒ 8_ n |  j j | ƒ | |  j  | <|  j t | ƒ 7_ t j r| t j d | ƒ n  d  S(   Ns   Added %s to cache(	   R   R   R   R   R   R   R   R   R   (   R	   R   R   (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   __add_to_cache¡   s    	N(   t   __name__t
   __module__R%   R   R
   R    t   ARTICLE_LOCKR   R   R!   R+   R,   R/   R   R   (    (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyR      s   		
+	(   R   t	   threadingR   t   sabnzbd.decoratorsR    t   sabnzbd.constantsR   t   LockR7   t   objectR   (    (    (    s(   /var/www/SABnzbd/sabnzbd/articlecache.pyt   <module>   s   