ó
‚•oTc           @   s<  y d  d l  Z  Wn$ y d  d l j Z  Wq7 q7 Xn Xd  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
 m Z d  d l m Z d  d l m Z m Z d  d l m Z d a e a d „  Z d „  Z d e f d	 „  ƒ  YZ d
 „  Z d d d d d d „ Z d „  Z d „  Z d S(   iÿÿÿÿN(   t   DB_HISTORY_NAME(   t   unicoder(   t	   this_weekt
   this_month(   t   format_source_urlc           C   s4   t  s* t j j t j j j ƒ  t ƒ a  n  t	 t  ƒ S(   N(
   t   _HISTORY_DBt   ost   patht   joint   sabnzbdt   cfgt	   admin_dirt   get_pathR    t	   HistoryDB(    (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   get_history_handle.   s    $c         C   s§   |  s d }  n |  j  d d ƒ j  d d ƒ }  |  ra |  j d ƒ ra |  j  d d ƒ }  |  d 7}  nB |  r• |  j d ƒ r• |  j  d d ƒ }  d |  }  n d |  d }  |  S(   Nt    t   *t   %t    t   ^t   $(   t   replacet
   startswitht   endswith(   t   search(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   convert_search6   s    	R   c           B   s­   e  Z d  „  Z d e d „ Z d „  Z d „  Z d „  Z d d „ Z	 d d „ Z
 d d „ Z d d „ Z d	 „  Z d d d d
 d „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sÃ   t  j j | ƒ s t } n t } t j r` t | t ƒ r` t	 j
 | j d ƒ j d ƒ ƒ |  _ n t	 j
 | ƒ |  _ t |  j _ |  j j ƒ  |  _ | r£ |  j ƒ  n t s¿ t a |  j d ƒ n  d  S(   Ns   latin-1s   utf-8t   VACUUM(   R   R   t   existst   Truet   FalseR	   t   WIN32t
   isinstancet   strt   sqlite3t   connectt   decodet   encodet   cont   dict_factoryt   row_factoryt   cursort   ct   create_history_dbt   _DONE_CLEANINGt   execute(   t   selft   db_patht   create_table(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   __init__N   s    	'c         C   sÉ   yV | r. t  | t ƒ r. |  j j | | ƒ n |  j j | ƒ | rQ |  j ƒ  n  t SWnl t j t d ƒ ƒ t j	 d | ƒ t j
 d d t ƒy |  j j ƒ  Wn t j	 d d t ƒn Xt SXd  S(   Ns   SQL Command Failed, see logs   SQL: %ss   Traceback: t   exc_infos   Rollback Failed:(   R   t   tupleR)   R,   t   saveR   t   loggingt   errort   Tat   debugt   infoR%   t   rollbackR   (   R-   t   commandt   argsR3   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR,   d   s     c         C   s   |  j  d ƒ d  S(   Ns  
        CREATE TABLE "history" (
            "id" INTEGER PRIMARY KEY,
            "completed" INTEGER NOT NULL,
            "name" TEXT NOT NULL,
            "nzb_name" TEXT NOT NULL,
            "category" TEXT,
            "pp" TEXT,
            "script" TEXT,
            "report" TEXT,
            "url" TEXT,
            "status" TEXT,
            "nzo_id" TEXT,
            "storage" TEXT,
            "path" TEXT,
            "script_log" BLOB,
            "script_line" TEXT,
            "download_time" INTEGER,
            "postproc_time" INTEGER,
            "stage_log" TEXT,
            "downloaded" INTEGER,
            "completeness" INTEGER,
            "fail_message" TEXT,
            "url_info" TEXT,
            "bytes" INTEGER,
            "meta" TEXT
        )
        (   R,   (   R-   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR*   x   s    c         C   sE   y |  j  j ƒ  Wn- t j t d ƒ ƒ t j d d t ƒn Xd  S(   Ns   SQL Commit Failed, see logs   Traceback: R1   (   R%   t   commitR4   R5   R6   R8   R   (   R-   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR3   –   s
    c         C   sR   y |  j  j ƒ  |  j j ƒ  Wn- t j t d ƒ ƒ t j d d t ƒn Xd  S(   Ns!   Failed to close database, see logs   Traceback: R1   (   R)   t   closeR%   R4   R5   R6   R8   R   (   R-   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR=      s    c         C   s%   t  | ƒ } |  j d | f d t ƒS(   Ns>   DELETE FROM history WHERE name LIKE ? AND status = 'Completed'R3   (   R   R,   R   (   R-   R   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   remove_completed¥   s    c         C   sX   t  | ƒ } |  j d | f ƒ } | rP g  |  j j ƒ  D] } | j d ƒ ^ q7 Sg  Sd  S(   Ns@   SELECT path FROM history WHERE name LIKE ? AND status = 'Failed'R   (   R   R,   R)   t   fetchallt   get(   R-   R   t   fetch_okt   item(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   get_failed_paths©   s
    )c         C   s%   t  | ƒ } |  j d | f d t ƒS(   Ns;   DELETE FROM history WHERE name LIKE ? AND status = 'Failed'R3   (   R   R,   R   (   R-   R   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   remove_failed²   s    c         C   sf   | d  k r |  j ƒ  n? t | t ƒ s4 | g } n  x! | D] } |  j d | f ƒ q; W|  j ƒ  d  S(   Ns"   DELETE FROM history WHERE nzo_id=?(   t   NoneR>   R   t   listR,   R3   (   R-   t   jobst   job(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   remove_history¶   s    c         C   s>   t  | | | | | | ƒ } |  j d | ƒ r: |  j ƒ  n  d  S(   NsN  INSERT INTO history (completed, name, nzb_name, category, pp, script, report,
        url, status, nzo_id, storage, path, script_log, script_line, download_time, postproc_time, stage_log,
        downloaded, completeness, fail_message, url_info, bytes)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)(   t   build_history_infoR,   R3   (   R-   t   nzot   storageR   t   postproc_timet   script_outputt   script_linet   t(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   add_history_dbÂ   s    i    c         C   s.  t  | ƒ } | r* |  j d | f ƒ } n |  j d | f ƒ } d } | r~ y |  j j ƒ  j d ƒ } Wq~ t k
 rz q~ Xn  | s d } n  | sœ | } n  | | | f } | rÆ |  j d | ƒ } n |  j d | ƒ } | rð |  j j ƒ  }	 n g  }	 t |	 ƒ }
 g  |	 D] } t | ƒ ^ q	}	 |	 |
 | f S(   NsD   select count(*) from History WHERE name LIKE ? AND STATUS = "Failed"s.   select count(*) from History WHERE name LIKE ?iÿÿÿÿs   count(*)i    s`   SELECT * FROM history WHERE name LIKE ? AND STATUS = "Failed" ORDER BY completed desc LIMIT ?, ?sJ   SELECT * FROM history WHERE name LIKE ? ORDER BY completed desc LIMIT ?, ?(	   R   R,   R)   t   fetchoneR@   t   AttributeErrorR?   t   lent   unpack_history_info(   R-   t   startt   limitR   t   failed_onlyt   rest   total_itemsRP   RA   t   itemst   fetched_itemsRB   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   fetch_historyÍ   s0    		c         C   s!  d } |  j  d ƒ rH y |  j j ƒ  j d ƒ } WqH t k
 rD qH Xn  t t t j ƒ  ƒ ƒ } d } |  j  d | f ƒ r® y |  j j ƒ  j d ƒ } Wq® t k
 rª q® Xn  t t t j ƒ  ƒ ƒ } d } |  j  d | f ƒ ry |  j j ƒ  j d ƒ } Wqt k
 rqXn  | | | f S(   Ni    s   SELECT sum(bytes) FROM historys
   sum(bytes)s2   SELECT sum(bytes) FROM history WHERE "completed">?(	   R,   R)   RR   R@   RS   t   intR   t   timeR   (   R-   t   totalt   month_timestt   montht   week_timestt   week(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   get_history_sizeõ   s*    c         C   sW   d } | f } |  j  d | ƒ rS y% t j |  j j ƒ  j d ƒ ƒ } WqS qS Xn  | S(   NR   s-   SELECT script_log FROM history WHERE nzo_id=?t
   script_log(   R,   t   zlibt
   decompressR)   RR   R@   (   R-   t   nzo_idt   dataRP   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   get_script_log  s    	%c         C   sX   | f } d } |  j  d | ƒ rT y |  j j ƒ  j d ƒ } WqT t k
 rP qT Xn  | S(   NR   s'   SELECT name FROM history WHERE nzo_id=?t   name(   R,   R)   RR   R@   RS   (   R-   Ri   RP   Rl   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   get_name%  s    	c         C   sX   | f } d } |  j  d | ƒ rT y |  j j ƒ  j d ƒ } WqT t k
 rP qT Xn  | S(   NR   s'   SELECT path FROM history WHERE nzo_id=?R   (   R,   R)   RR   R@   RS   (   R-   Ri   RP   R   (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR   0  s    	(    N(   t   __name__t
   __module__R0   R   R,   R*   R3   R=   RE   R>   RC   RD   RI   RQ   R]   Re   Rk   Rm   R   (    (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR   M   s   						(	&	
	c         C   s<   i  } x/ t  |  j ƒ D] \ } } | | | | d <q W| S(   Ni    (   t	   enumeratet   description(   R(   t   rowt   dt   idxt   col(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR&   :  s    R   i    c   "      C   si  | s |  j  } n  t | ƒ } t | ƒ } t | ƒ } |  j \ } } }	 t |  j ƒ }
 t |
 j d d ƒ ƒ } | r„ t | ƒ } n t |  j ƒ } t t j ƒ  ƒ } t |  j	 ƒ } t |  j
 ƒ } t |  j ƒ } d d d d g } y | t j | | |	 ƒ } Wn d } n Xt |  j ƒ } t |  j ƒ } |  j } |  j } | rbt j t j | ƒ ƒ } n d } t |
 j d d ƒ ƒ } |  j } d } t |  j ƒ } |
 j d d ƒ p¿|
 j d	 d ƒ } t |  j ƒ } g  } x: | j ƒ  D], \ } }  | j d
 | d j |  ƒ f ƒ qäWd j | ƒ }! | | | | | | | | | | | | | | | | |! | | | | | f S(   Nt   msgidR   t   Rt   Ut   Dt   download_timei    t   detailst	   more_infos   %s:::%st   ;s   
(   t   downpatht   decode_factoryt   repair_optst   nzo_infoR@   R   t   urlR^   R_   t
   final_namet   filenamet   catR	   t
   opts_to_ppt   scriptt   statusRi   t   bytes_downloadedR!   t   BinaryRg   t   compresst   fail_msgt   unpack_infot	   iteritemst   appendR   ("   RK   RL   R~   RM   RN   RO   R   t
   flagRepairt
   flagUnpackt
   flagDeleteR   t   reportR‚   t	   completedRl   t   nzb_namet   categoryt   ppst   ppR‡   Rˆ   Ri   t   bytesRf   Rz   t
   downloadedt   completenesst   fail_messaget   url_infot   stagest   linest   keyt   resultst	   stage_log(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyRJ   @  sP    
			$$$c         C   s¯  |  d rjy |  d j  d ƒ } WnE t j t d ƒ d t |  d ƒ ƒ t j d |  d ƒ g  } n Xg  |  d <xô | D]é } i  } y | j  d ƒ \ } } Wn# t j d | ƒ | } d	 } n X| | d <g  | d
 <y | j  d ƒ } WnA t j t d ƒ d t |  d ƒ ƒ t j d | ƒ g  } n Xx | D] } | d
 j | ƒ q7W|  d j | ƒ qz Wn  |  d rt j |  d ƒ |  d <n  |  j	 d ƒ s«d	 |  d <n  |  S(   NR¢   s   
s'   Invalid stage logging in history for %ss    (\r\n)Rl   s	   Lines: %ss   :::s   Missing key:::logs "%s"R   t   actionsR}   s    (;)s   Logs: %sRf   t   action_line(
   t   splitR4   R5   t   TR   R7   R   Rg   Rh   t   has_key(   RB   RŸ   t   linet   stageR    t   logst   log(    (    s$   /var/www/SABnzbd/sabnzbd/database.pyRU     s@    
$




$

c         C   sœ   t  |  t ƒ r t |  ƒ St  |  t ƒ rV g  } x! |  D] } | j t | ƒ ƒ q5 W| St  |  t ƒ r” i  } x" |  D] } t |  | ƒ | | <qr W| S|  Sd  S(   N(   R   R    R   RF   R   R   t   dict(   t   textt   new_textRP   R    (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyR   ¨  s    
(   R!   t   pysqlite2.dbapi2t   dbapi2R   R_   t   datetimeRg   R4   R	   t   sabnzbd.cfgt   sabnzbd.constantsR    t   sabnzbd.encodingR   t   sabnzbd.bpsmeterR   R   t   sabnzbd.miscR   RE   R   R   R+   R   R   t   objectR   R&   RJ   RU   R   (    (    (    s$   /var/www/SABnzbd/sabnzbd/database.pyt   <module>   s4   		í	?	)