
    :Djs                         S SK r S SKrS SKJrJr  S SKJr  S SKJrJ	r	  \R                  \R                  \R                  sr
rr\R                  \R                  srrSrSrSr " S S	5      r " S
 S5      rg)    N)
kodi_utilssource_utils)TorrServerAPI)clean_file_name	normalizez&ultimate_nondebrid.internal_results.%szhttps://zilean.elfhosted.comzUltimateNonDebrid/1.0c                   2    \ rS rSrS rS rS rS rS rSr	g)	source   c                      SU l         / U l        g )N
torrserverscrape_providersources)selfs    W/home/rurouni/addon-audit/build/ultimate-nondebrid/resources/lib/scrapers/torrserver.py__init__source.__init__   s    +    c                 z    / U l         UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nU R                  X4XVU5      nU(       d  U R                  X4XVU5      nU(       d   [	        U R
                  U R                   5      $ U H  n [        UR                  SS5      S	9u  pUR                  SU5      UR                  SU5      U	UR                  S
S5      UR                  S
5      (       a!  S[        UR                  S
S5      5      S-  -  OSU
SUS   -   US   US   U R
                  U R
                  SSS.nU R                   R                  U5        M     [	        U R
                  U R                   5      $ !    M  = f!    N,= f)N
media_typemovietitle yearseasonepisodename)urlsizer   z%.2f GBi   @Unknownmagnet:?xt=urn:btih:hashTF)r   display_namequalityr   
size_label	extraInfor   r"   idr	   r   torrentdirect)	r   get_search_jackett_search_dmminternal_resultsr   get_file_infofloatappend)r   infor   r   r   r   r   hash_resultsitemr$   detailssource_items               r   resultssource.results   s   )	DL,8JHHWb)E88FB'DXXh+Fhhy"-G  //VjYL  #//VjY'(<(<dllKK %'4&"9M'N$G $ 7(,(?#* $ 3_c_g_ghn_o_oi5&!9L3MPZ3Z&[u~%,5VD $V"6l"&"6"6+/+?+?#'"'#K LL''4% %.   4 4dllCC		s+   B4F6 7F6 =CF.
F6 .F30F6 6F:c                    SSK Jn  U" SS5      nU" SS5      nU" SS5      n	U(       a  U(       d  g Un
US	:X  a/  U< S
U	< SU< S[        R                  R	                  U
5      < 3nO6U< S
U	< SU< S[        R                  R	                  U
5      < SU< SU< 3n[        R
                  " USS[        0S9nU R                  UR                  5      nU$ !    g= f)zASearch via Jackett API (user must run their own Jackett instance)r   )get_settingzultimate_nondebrid.jackett_hostr   z!ultimate_nondebrid.jackett_apikeyzultimate_nondebrid.jackett_port9117Nr   :z2/api/v2.0/indexers/all/results/torznab/api?apikey=z&t=movie&q=z&t=tvsearch&q=z&season=z&ep=   
User-Agent)timeoutheaders)	caches.settings_cacher9   requestsutilsquoter*   
USER_AGENT_parse_torznabtext)r   r   r   r   r   r   r9   hostapikeyportqueryr   respr6   s                 r   r+   source._search_jackettC   s    5<bA@"E<fE6	EW$$(<(<U(CE $(<(<U(CVWV <<R,
9STD))$))4GN	s   B%C Cc                 "    UnUS:X  a  XcUS.n[         S-   nO[         S-   nSU0n[        R                  " XSS[        0S9n	U	R                  S	:w  a  g
U	R                  5       n
/ n[        U
[        5      (       a  U
OU
R                  S/ 5       Hs  nUR                  SUR                  SS5      5      nU(       d  M.  UR                  UUR                  SUR                  SU5      5      UR                  SS5      S.5        Mu     US
S $ !    g
= f)z1Search via DMM/Zilean API (free, public endpoint)r   )rJ   r   r   z/dmm/filteredz/dmm/searchrJ   
   r=   )paramsr>   r?      Nr6   infoHashr"   r   filenamer   r   r   r"   r   r   2   )	DMM_APIrA   r*   rD   status_codejson
isinstancelistr0   )r   r   r   r   r   r   rJ   rO   r   rK   datar6   r3   	info_hashs                 r   r,   source._search_dmm\   s   	EY&#(wO/-!5)<<BWaHbcD3&99;DG *4 6 6DHHYPR<SS HHZ&"1EF	9NN ) $TXXfe5L M $ 3$  T 3B<	s   AD
 A%D
 <AD
 
Dc           
      @   SSK Js  Jn  / n UR                  U5      nUR	                  S5       H  nUR                  S5      nSnUb  UR                  SS5      nU(       dT  UR                  SS5      nSU;   a<  SSKn	U	R                  S	U5      n
U
(       a  U
R                  S
5      R                  5       nU(       d  M  UR                  SS5      nUR                  UUR                  SS5      U(       a  [        [        U5      5      OSS.5        M     USS $ !    N	= f)z'Parse Torznab XML response from Jackettr   Nz.//itemz?.//{http://torznab.com/schemas/2015/feed}attr[@name="infohash"]r   valueguidzbtih:zbtih:([a-fA-F0-9]{40})   z8{http://torznab.com/schemas/2015/feed}attr[@name="size"]0r   rS   d   )xml.etree.ElementTreeetreeElementTree
fromstringfindallfindr*   findtextresearchgrouplowerr0   intr/   )r   xml_textETr6   rootr3   	hash_elemr[   r_   rj   mr   s               r   rE   source._parse_torznaby   s   **	==*DY/ II&ij		( )gr :I ==4D$!II&?F!''!**:*:*<i9==)egjkDNN ) $gr :48E$K 0a$  0( t}	s   B-D >AD Dr   N)
__name__
__module____qualname____firstlineno__r   r6   r+   r,   rE   __static_attributes__ r   r   r	   r	      s    +DZ2:r   r	   c                   ,    \ rS rSrSr\SS j5       rSrg)resolver   z:Resolves a torrent source to a playable URL via TorrServerc                     [        XX#5      nUR                  (       d  [        SU < SU< 3S5        g  UR                  5       n[	        U[
        5      (       aN  U HH  nUR                  SS5      R                  5       UR                  5       :X  d  M7  UR                  XE5      s  $    SU-   n	 UR                  U	5        UR                  XE5      $ !    N,= f!    g = f!    g = f)NzTorrServer not reachable at r;   i  r"   r   r!   )
r   alivenotificationtorrentsrX   rY   r*   rm   play_torrent
add_magnet)
rG   rI   usernamepasswordr[   file_idtsr   tmagnets
             r   resolveresolver.resolve   s    	t8>B88D$OQUV;;=h--%55,224	8II#%??9#FF & ,i7Ff%y::	sG   1C AC C &C (C .!C CC CC C C"rz   N)r   )ru   rv   rw   rx   __doc__staticmethodr   ry   rz   r   r   r|   r|      s    D r   r|   )rW   rA   modulesr   r   modules.torrserver_apir   modules.utilsr   r   r-   r.   release_info_formatset_propertyr   int_window_proprU   rD   r	   r|   rz   r   r   <module>r      s      , 0 47C7T7TVbVpVpr~  sS  sS 4 -!4'44j6M6M l:
($
B BJ r   