
    *bi/                         S SK Jr  S SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJr  SS	KJrJr  SS
 jr " S S5      rS rS rg)    )Aria2WebsocketClient)create_client)gatherTimeoutError)ClientError)Path)iscoroutinefunction)retrystop_after_attemptwait_exponentialretry_if_exception_type   )LOGGERaria2_optionsc           
      &   [        U 5       H  nUR                  S5      (       a  M  [        X5      n[        U5      (       d  M8  [	        [        U5      [        SSSS9[        [        [        [        45      S9nU" U5      n[        XU5        M     U $ )N_      )
multiplierminmax)stopwaitr
   )dir
startswithgetattrr	   r
   r   r   r   r   r   RuntimeErrorsetattr)objmax_retries	attr_nameattrretry_policywrappeds          /app/bot/core/torrent_manager.pywrap_with_retryr&      s    X	$$s&t$$ '4%qA- ,=L #4(GCG,  J    c                       \ rS rSrSrSr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S 5       r\S	 5       rS
rg)TorrentManager$   Nc                    #    [        [        R                  " S5      [        S5      5      I S h  vN u  U l        U l        [        U R
                  5      U l        g  N,7f)Nzhttp://localhost:6800/jsonrpczhttp://localhost:8090/api/v2/)r   r   newr   aria2qbittorrentr&   clss    r%   initiateTorrentManager.initiate(   sL     +1 $$%DE9:,
 &
"	3? *#//:	&
s   -AA-Ac                    #    [        U R                  R                  5       U R                  R                  5       5      I S h  vN   g  N7f)N)r   r-   closer.   r/   s    r%   	close_allTorrentManager.close_all0   s-     SYY__&(=(=(?@@@s   A A
AA
c                   #    UR                  SS5      S;   a4  U R                  R                  UR                  SS5      5      I S h  vN   g  U R                  R                  UR                  SS5      5      I S h  vN   g  N: N!    g = f7f)Nstatus )activepausedwaitinggid)getr-   forceRemoveremoveDownloadResult)r0   downloads     r%   aria2_removeTorrentManager.aria2_remove4   sy     <<"%)HH))''UB(?@@@ii44X\\%5LMMM A Ns<   ABBB.B <B=B BB B
Bc                   ^ #    T R                  5       I S h  vN   [        T R                  R                  R	                  SS5      T R
                  R                  5       5      I S h  vN   / n[        T R
                  R                  5       T R
                  R                  SS5      5      I S h  vN nU H  nUR                  U5        M     / nUR                  U 4S jU 5       5         [        U6 I S h  vN   g  N N NQ N!    g = f7f)NallFr     c              3   x   >#    U  H/  nTR                   R                  UR                  S 5      5      v   M1     g7f)r=   N)r-   r?   r>   ).0rA   r0   s     r%   	<genexpr>,TorrentManager.remove_all.<locals>.<genexpr>J   s/      
GP8CII!!(,,u"566ys   7:)
	pause_allr   r.   torrentsdeleter-   purgeDownloadResult
tellActivetellWaitingextend)r0   	downloadsresultsrestaskss   `    r%   
remove_allTorrentManager.remove_all>   s     mmoOO$$++E59II))+
 	
 	
 	syy335syy7L7LQPT7UVVCS!  
GP
 	
	%.   		

 W !	s_   DC=AD'C?(AD/D0;D,D 7D8D <D?DDD D	Dc                 T  #    [        U R                  R                  R                  5       U R                  R                  5       5      I S h  vN u  pUR                  [        UR                  SS5      5      -   nUR                  [        UR                  SS5      5      -   nX44$  NY7f)NdownloadSpeed0uploadSpeed)
r   r.   transferinfor-   getGlobalStatdl_info_speedintr>   up_info_speed)r0   s1s2download_speedupload_speeds        r%   overall_speedTorrentManager.overall_speedR   s     OO$$))+SYY-D-D-F
 
 ))C0L,MM''#bff]C.H*II++
s   A
B(B&AB(c                    #    [        U R                  R                  5       U R                  R                  R                  S5      5      I S h  vN   g  N7f)NrE   )r   r-   forcePauseAllr.   rL   r   r/   s    r%   rK   TorrentManager.pause_all[   s7     SYY,,.0H0H0M0Me0TUUUs   AAAAc                   #    / n[        U R                  R                  5       U R                  R                  SS5      5      I S h  vN nU H  nUR	                  U5        / nM     U HV  nUR                  SS5      S:w  d  M  WR                  U R                  R                  UR                  S5      X05      5        MX     W(       a   [        U6 I S h  vN   US;  a.  U R                  R                  X05      I S h  vN   U[        U'   g g  N N;! [         a   n[        R                  " U5         S nAN^S nAff = f N@7f)Nr   rF   r8   r9   completer=   )checksumz	index-outoutpausezselect-file)r   r-   rO   rP   rQ   r>   appendchangeOption	Exceptionr   errorchangeGlobalOptionr   )	r0   keyvaluerR   rS   rT   rU   rA   es	            r%   change_aria2_option"TorrentManager.change_aria2_option_   s    	syy335syy7L7LQPT7UVVCS!E  "H||Hb)Z7SYY33HLL4G#VW "  en$$ NN))..|<<<!&M# O W %  Q  =sa   AED9EAED DD %E EED 
D>D94E9D>>E )__name__
__module____qualname____firstlineno__r-   r.   classmethodr1   r5   rB   rV   rf   rK   rx   __static_attributes__rz   r'   r%   r)   r)   $   s    EK; ; A A    & , , V V ' 'r'   r)   c                 t   SU ;   a$  U S   R                  S5      (       a  U S   S   S   $ U R                  S5      (       ax  U S   S   S   R                  S5      (       a  U S   S   S   $ U S   S   S   nU S   nUR                  U5      (       a'  [        U[        U5      S	-   S  5      R                  S   $ g
g
)N
bittorrentr]   namefilesr   path
[METADATA]r   r   r9   )r>   r   r   lenparts)download_info	file_pathdir_paths      r%   
aria2_namer   s   s    }$|)D)H)H)P)P\*626::			7	#	#!!$V,77EE )!,V44!'*1-f5	 '))	#h-!"3"567==a@@r'   c                 F    [        S U R                  S/ 5       5       5      $ )Nc              3   H   #    U  H  oS    R                  S5      v   M     g7f)r   r   N)r   )rH   fs     r%   rI   is_metadata.<locals>.<genexpr>   s$      4Rq&	\**4Rs    "r   )anyr>   )r   s    r%   is_metadatar      s)     4A4E4Egr4R  r'   N)   )aioaria2r   aioqbt.clientr   asyncior   r   aiohttpr   pathlibr   inspectr	   tenacityr
   r   r   r   r9   r   r   r&   r)   r   r   rz   r'   r%   <module>r      sB    ) ' (   '  %&L' L'^ r'   