
    \i,                        U 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
 d dlmZ d dlmZmZmZmZmZ d dlmZmZ d dlZd dlmZ  G d	 d
      Z e       Zej7                  d       dZej:                  j=                  ej:                  j?                  ej:                  jA                  e!            e      Z"ddddda#ee$ef   e%d<    e       Z&ddZ'ddZ( e'         G d d      Z)y)    N)datetime)	CookieJar)Pool)Lock)AnyDictListTupleUnion)unquote	urlencode)prettyPrinterc                   ,    e Zd ZdZdZddZdeddfdZy)	ProxyManager
http_proxyhttps_proxyreturnNc                     t         j                  j                  | j                  d      | _        t         j                  j                  | j
                  d      | _        y N )osenvirongetHTTP_PROXY_KEYr   HTTPS_PROXY_KEYr   )selfs    ,/config/qBittorrent/nova3/engines/jackett.py__init__zProxyManager.__init__   s;    **..)<)<bA::>>$*>*>C    enablec                    |rO| j                   t        j                  | j                  <   | j                  t        j                  | j
                  <   nTt        j                  j                  | j                  d        t        j                  j                  | j
                  d        	 t        j                  |       y # t        $ r Y y w xY wN)
r   r   r   r   r   r   pophelpersenable_socks_proxyAttributeError)r   r    s     r   enable_proxyzProxyManager.enable_proxy   s    .2ooBJJt**+/3/?/?BJJt++,JJNN4..5JJNN4//6	&&v. 		s   'B= =	C	C	r   N)__name__
__module____qualname__r   r   r   boolr'    r   r   r   r      s%    !N#OD4 D r   r   Fzjackett.jsonYOUR_API_KEY_HEREzhttp://127.0.0.1:9117   )api_keyurltracker_firstthread_countCONFIG_DATAc                  B   	 t        t        d      5 } t        j                  |       ad d d        t        d dD              r	dt        d<   dt        vrdt        d<   t                y y # 1 sw Y   AxY w# t
        $ r dt        d<   Y Xt        $ r t                Y lw xY w)	Nutf-8encodingT	malformedc              3   ,   K   | ]  }|t         v  y wr"   )r4   ).0items     r   	<genexpr>z%load_configuration.<locals>.<genexpr>P   s     
S/Rt4{"/Rs   )r0   r2   r1   r3   r/   )	openCONFIG_PATHjsonloadr4   
ValueError	Exceptionsave_configurationanyfs    r   load_configurationrH   B   s    	+0A))A,K 1 
S/R
SS#'K  [(&(N# ) 10 (#'K  s-   A5 A)A5 )A2.A5 5B	BBc                      t        t        dd      5 } | j                  t        j                  t
        dd             d d d        y # 1 sw Y   y xY w)Nwr6   r7      T)indent	sort_keys)r>   r?   writer@   dumpsr4   rF   s    r   rD   rD   Y   s5    	k3	1Q	

;qDAB 
2	1	1s   ,AAc            	       Z   e Zd ZdZed   d   dk7  red   ned   dd Zed   Zed   Zddgd	gd
dgdgdgdgdgdZde	ddfdZ
d#de	de	ddfdZde	dee	   fdZde	deee	   df   de	ddfdZde	de	fdZde	dee	df   fdZde	de	ddfdZd ee	ef   ddfd!Zd ee	ef   dee	ef   fd"Zy)$jackettJackettr1   /Nr0   r3   5070800010004000200030005000)allanimebooksgamesmoviesmusicsoftwaretvdownload_urlr   c                 D   |j                  d      rt        |dz   |z          t        j                  d       | j	                  |      }t        j                  d       |#|j                  d      rt        |dz   |z          y t        t        j                  |             y )Nzmagnet:? TF)
startswithprintproxy_managerr'   get_responser$   download_file)r   rd   responses      r   download_torrentzjackett.download_torrentr   s    "":.,$|34""4($$\2""5)H$7$7
$C(S.</0'''56r   whatcatc                 "   t        |      }| j                  |j                            }dt        v r| j	                  d|       y | j
                  dk(  r| j	                  d|       y | j                  dkD  r|g }| j                  |      }|D ]  }|j                  |||f        t        t        t        |      | j                              5 }|j                  | j                  |       d d d        y | j                  ||d       y # 1 sw Y   y xY w)Nr9   zmalformed configuration filer.   zapi key error   r\   )r   supported_categorieslowerr4   handle_errorr0   r3   get_jackett_indexersappendr   minlenstarmapsearch_jackett_indexer)r   rn   ro   categoryargsindexersindexerpools           r   searchzjackett.search~   s    t},,SYY[9 +%<dC <<..ot4 q BDD006H#T8W56 $c#h-):):;<T88$? =< ''h> =<s   DDc                 h   t        d| j                  fddg      }| j                   d| }| j                  |      }|| j	                  d|       g S t
        j                  j                  j                  |      }g }|j                  d      D ]   }|j                  |j                  d          " |S )Napikey)tr}   )
configuredtruez+/api/v2.0/indexers/all/results/torznab/api?z%connection error getting indexer listr~   id)r   r0   r1   rj   rt   xmletreeElementTree
fromstringfindallrv   attrib)r   rn   params
jacket_urlrl   response_xmlr}   r~   s           r   ru   zjackett.get_jackett_indexers   s    t||$"
 
 z!LVHU
$$Z0EtLIyy,,77A #++I6GOOGNN401 7r   r{   
indexer_idc                 P   dt         t        d f   dt        fddt         t        j                  j                  j
                  d f   dt        ffd}d| j                  fd|fg}|"|j                  dd	j                  |      f       t        |      }| j                   d
| d| }| j                  |      }|| j                  d|z   |       y t        j                  j                  j                  |      }	|	j                  d      }
|
y |
j                  d      D ]o  }i }|j                  d      }||j                   }n' ||j                  d            }t"        d   rd| d| |d<   n| d| d|d<   |j                  | j%                  d            |d<   |d   |d   j&                  d   |d<   n-|j                  d      |d<   |d   |d   j                   |d<   n|j                  d      |d<   |d   dn |d   j                         dz   |d<   |j                  | j%                  d            |d<   |d   dnt)        |d   j&                  d         |d<   |j                  | j%                  d            |d <   |d    dnt)        |d    j&                  d         |d <   |d   dk7  r|d    dk7  r|d xx   |d   z  cc<   |j                  d!      |d"<   |d"   |d"   j                   |d"<   n-|j                  d#      |d"<   |d"   d$n|d"   j                   |d"<   | j                  |d%<   	 t+        j,                   ||j                  d&            d'      }t)        |j/                               |d(<   | j3                  |       r y # t0        $ r d|d(<   Y %w xY w))Nsr   c                     | | S dS r   r-   )r   s    r   toStrz-jackett.search_jackett_indexer.<locals>.toStr   s    1-2-r   ec                 8     | | j                         S d      S r   )text)r   r   s    r   getTextPropz3jackett.search_jackett_indexer.<locals>.getTextProp   s    1=99b99r   r   qro   ,z/api/v2.0/indexers/z/results/torznab/api?zconnection error for indexer: channelr<   titlejackettindexerr2   [z] namez []	magneturllinkvaluesizerS   z Bseedersseedspeersleechcomments	desc_linkguidr   
engine_urlpubDatez%a, %d %b %Y %H:%M:%S %zpub_date)r   strr   r   r   Elementr0   rv   joinr   r1   rj   rt   r   findr   r   r4   generate_xpathr   intr   strptime	timestamprC   pretty_printer_thread_safe)r   rn   r{   r   r   
params_tmpr   r   rl   r   r   resultres	title_tmpr   trackerdater   s                    @r   rz   zjackett.search_jackett_indexer   s   	.U39% 	.# 	.	:5!6!6!>!>!DE 	:# 	:
 t||$$K

 uchhx&89::&z!4ZL@UV\U]^
$$Z0>KTRyy,,77A##I.?oof-F"$CG,I$!!&++.>"?@G?+ !'"UG4F!&r'!4F ++d&9&9+&FGCK6{&!&k009F$kk&1Fv;*"%f+"2"2CK ++f-CK #F 3"%F@P@P:QTX:XCK!;;t':':9'EFCL!$W!523s7|?R?RSZ?[;\CL!;;t':':7'CDCL!$W!523s7|?R?RSZ?[;\CL7|r!c'lb&8GG,%{{:6C;+#&{#3#8#8K #);;v#6K ),[)9)A2s;GWG\G\K  !%C%((V[[5K)LNhi"%dnn&6"7J ++C0k .d  %"$J%s   8ANN%$N%tagc                     d|z  S )Nz8./{http://torznab.com/schemas/2015/feed}attr[@name="%s"]r-   )r   r   s     r   r   zjackett.generate_xpath   s    ICOOr   queryc                    d }	 t         j                  j                  t         j                  j                  t	                           }|j                  |      j                         j                  d      }|S # t         j                  j                  $ r&}|j                  dk(  r|j                  }Y d }~|S d }~wt        $ r Y |S w xY w)Nr6   i.  )urllibrequestbuild_openerHTTPCookieProcessorr   r>   readdecode	HTTPErrorcoder1   rC   )r   r   rl   openerr   s        r   rj   zjackett.get_response   s    
	 ^^001S1ST]T_1`aF{{5)..077@H  ~~'' 	!vv}55   		s   A2A8 8CB66CC	error_msgc                 |    | j                  | j                  d| dt         d| dddd| j                  ddd       y )Nz	Jackett: z]! Right-click this row and select 'Open description page' to open help. Configuration file: 'z' Search: ''rS   zRhttps://github.com/qbittorrent/search-plugins/wiki/How-to-configure-Jackett-plugin)r   r   r   r   r   r   r   r   )r   r1   r?   )r   r   rn   s      r   rt   zjackett.handle_error  sq     	''HH	{  +H  IT  HU  U`  ae  `f  fg  h((m	)
 		r   
dictionaryc                 r    | j                  |      }t        5  t        |       d d d        y # 1 sw Y   y xY wr"   )escape_pipePRINTER_THREAD_LOCKr   )r   r   escaped_dicts      r   r   z"jackett.pretty_printer_thread_safe  s)    ''
3 ,' !  s   -6c                     |j                         D ].  }t        ||   t              s||   j                  dd      ||<   0 |S )N|z%7C)keys
isinstancer   replace)r   r   keys      r   r   zjackett.escape_pipe  sC    ??$C*S/3/",S/"9"9#u"E
3 % r   )r\   )r)   r*   r+   r   r4   r1   r0   r3   rr   r   rm   r   r	   ru   r   rz   r   rj   rt   r   r   r   r   r-   r   r   rQ   rQ   b   s{   D +E 22 6# =+e
;uCUVYWYCZC)$G~.L&!(Hh	
7S 
7T 
7?3 ?S ?T ?2 c $N13 N1%S	4:P N1^a N1fj N1`P# P# P# %T	*: c   (T#s(^ ( (
d38n c3h r   rQ   r(   )*r@   r   urllib.requestr   xml.etree.ElementTreer   r   http.cookiejarr   multiprocessing.dummyr   	threadingr   typingr   r   r	   r
   r   urllib.parser   r   r$   novaprinterr   r   ri   r'   CONFIG_FILEpathr   dirnamerealpath__file__r?   r4   r   __annotations__r   rH   rD   rQ   r-   r   r   <module>r      s     	    $ &  0 0 +  % 4    5 !
 ggll277??277+;+;H+EFT""	T#s(^  f .C
  A Ar   