
    |Dj,                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKJrJr  S SKJrJrJr  S SKJr  S SKJrJrJrJrJr  S	 rS
 rS rS r S r!S r"S r#S r$S r%S r&S r'S/S jr(S0S jr)S r*S r+S1S jr,S r-S r.S/S jr/S2S jr0S r1S3S jr2S/S jr3S  r4S! r5S" r6S4S# jr7S$ r8S% r9S& r:S5S' jr;S( r<S) r=S* r>S+ r?S6S, jr@S4S- jrAS. rBg)7    N)unescape)ThreadactiveCount)ZipFile)import_modulereload)datetime	timedeltadate)max_threads)translate_pathsleepshow_busy_dialoghide_busy_dialogpath_existsc                 0    [         R                  " SX5      $ )Nz)(w185|w300|w342|w780|w1280|h632|original)resub)imagereplace_ress     Q/home/rurouni/addon-audit/build/ultimate-nondebrid/resources/lib/modules/utils.pychange_image_resolutionr      s    
;[PP    c                 T    [         R                  R                  [        U 5      5        g N)syspathappendr   locations    r   append_module_to_syspathr"      s    )*r   c                 ,    [        [        U 5      U5      $ r   )getattrr   )r!   function_names     r   manual_function_importr&      s    h'77r   c                 *    [        [        U 5      5      $ r   )
rel_modulemanual_module_importr    s    r   reload_moduler*      s    '122r   c                     [        U 5      $ r   )r   r    s    r   r)   r)      s    hr   c              #      #    [        5       nU HJ  n[        5       U:  a  [        S5        [        5       U:  a  M  [        X4S9nUR	                  5         Uv   ML     g 7fN   )targetargsr   r   r   r   start_target_list_max_threadsitemthreaded_objects        r   make_thread_listr9   !   sM     T$eAh$'8/	 s
   7A#Ac              #      #    [        5       nU HI  n[        5       U:  a  [        S5        [        5       U:  a  M  [        XS9nUR	                  5         Uv   MK     g 7fr-   r1   r3   s        r   make_thread_list_multi_argr;   )   sK     T$eAh$'5/	 s
   7A"Ac              #      #    [        5       n[        U5       HM  u  p4[        5       U:  a  [        S5        [        5       U:  a  M  [	        XU4S9nUR                  5         Uv   MO     g 7fr-   )r   	enumerater   r   r   r2   )r4   r5   r6   countr7   r8   s         r   make_thread_list_enumerater?   1   sV     e$[U$eAh$'>/	 %s   AA*$A*c              #   V   #    [        S[        U 5      U5       H  o X"U-    v   M     g7f)z5
Yield successive limit-sized chunks from item_list.
r   N)rangelen)	item_listlimitis      r   chunksrF   9   s(      3y>5
)Q1Y1G+G
)s   ')c                 z    [        SR                  S U  5       5      5      $ ! [         a    [        U5      s $ f = f)ze
Remove all alpha from string and return a float.
Returns float of "default_return" upon ValueError.
 c              3   ^   #    U  H#  oR                  5       (       d  US :X  d  M  Uv   M%     g7f).Nisdigit.0cs     r   	<genexpr>"string_to_float.<locals>.<genexpr>D   s      IfC11f   -	-)floatjoin
ValueError)stringdefault_returns     r   string_to_floatrX   ?   s3    
 277IfIIJJ05000s    " ::c                 V    SR                  S U  5       5      $ ! [         a    U s $ f = f)zd
Remove all alpha from string and return remaining string.
Returns original string upon ValueError.
rH   c              3   R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fr   rK   rM   s     r   rP   )string_alphanum_to_num.<locals>.<genexpr>L   s     61))+QQs   '	')rT   rU   )rV   s    r   string_alphanum_to_numr\   G   s(    
 WW6666!6M!s    ((c                 p    U (       d  g U(       a  [        X5      R                  5       nU$ [        X5      nU$ r   )datetime_workaroundr   )jsondate_object	resformatremove_timedatetime_objects       r   jsondate_to_datetimerc   O   s5    #6#R#W#W#Y -_Hr   c                     [         R                  " 5       nU(       a  U$ U (       a  UR                  S5      $ [         R                  " U5      $ )N%Y-%m-%d)r	   nowstrftimer   )rV   dtds      r   get_datetimerj   U   s4    \\^q
1::j))ar   c                  >    [        [        R                  " 5       5      $ r   )inttime r   r   get_current_timestampro   [   s    DIIKr   c                     U (       d  gU S-  n [        U S5      nU[        US9-   nUR                  S5      nUR                  5       U4$ )N)NNz	 20:00:00z%Y-%m-%d %H:%M:%S)hoursre   )rc   r
   rg   r   )	orig_dateadjust_hoursrb   adjusted_datetimeadjusted_strings        r   adjust_premiered_daterv   ^   sR    *
k'	3FG$y|'DD$--j9 /11r   c                    U(       ar  X-
  R                   nUS:X  a  SnU$ US:X  a  SnU$ US:X  a  SnU$ SUs=:  a  S:  a%  O  O"UR                  " S5      R                  5       nU$ UR                  " U5      nU$ UR                  " U5      nU$ ! [         a    UR                  " S	5      n U$ f = f! [         a    UR                  " S	5      n U$ f = f)
N	YESTERDAYr   TODAYr.   TOMORROW   z%Are   )daysrg   upperrU   )todayr   date_format	use_wordsday_diffdays         r   make_dayr   f   s    l  (^;S 	 1}Gc 	 1}Jc 	 	8at}}T288: 	 mmK(
 	 ]];'s	 5DMM*5c 		 6 
44==4S 5s$   &B :B1 B.-B.1CCc                     X-
  R                   $ r   )r}   r   )date1date2s     r   subtract_datesr   u   s    	r   c                     [         R                  " X5      nU$ !   [        [        R                  " X5      SS 6 n U$ = f)Nr      )r	   strptimerm   )data
str_formatrb   s      r   r^   r^   y   s?     ))$;o M8dmmD&Ea&JLs    !=c                 h     [        X5      nU(       d  US:  a  g[        U5      nXB:  a  gg!    g= f)Nr   FT)r   abs)current_datecompare_datedifference_toleranceallow_postive_difference
differences        r   date_differencer   ~   s7    l9*	!j1nU_
&u	s   - - 1c                     [        X5      n U(       d  [        R                  " 5       nO[        X!5      nUR                  U R                  -
  UR                  UR
                  4U R                  U R
                  4:  -
  $ )z0born and died are str objects e.g. '1972-05-28' )r^   r   r   yearmonthr   )bornr   diedr   s       r   calculate_ager      sZ    D-djjle"44u

TYY5;;		":djj$((=S"STTr   c                 Z    U H$  n[        U 5      R                  US   US   5      n M&     U $ Nr   r.   )strreplace)sreplace_infors      r   batch_replacer      s-    
Q	!fnnQqT1Q4 ! 	r   c                     SS/SS/SS/SS/S	S
/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS /S!S/S"S/S#S$/S%S&//nS'S(/S)S*/S+S,/S-S./S/S0/S1S2/S3S4/S5S6/S7S8//	nS'S9/S+S9/S-S&/S/S9/S1S9/S3S9/S5S9/S7S9/S:S9/S;S9/S<S9/SS&/S=S9/SS9/S>S&/S?S&/S.S&//n[        X5      n U(       a  [        X5      n U(       a  [        X5      n U R                  5       n U $ !    U $ = f)@Nz&#x26;&z&#x27;'z&#xC6;AEz&#xC7;Cz&#xF4;oz&#xE9;ez&#xEB;z&#xED;rE   z&#xEE;z&#xA2;rO   z&#xE2;az&#xEF;z&#xE1;z&#xE8;z%2ErJ   z&frac12;z%BDz&#xBD;z&#xB3;z%B3z&#xB0;z%B0&amp;z&#xB7;z&#xE4;Au   ârH   "z%22*z%2A/z%2F:,<z%3C>z%3E?z%3F\z%5C|z%7C z%BD;z%B3;z%B0;z - !;)r   strip)r   use_encoding
use_blankshex_entitiesspecial_encodedspecial_blankss         r   clean_file_namer      s   S/Hd#3h5ERU_xo#3_xo#3_xos|j%5H5)He+<wn_xo';=, 5\C<#uSzCQV<U|c5\D%=3,@/ #Jc
S"ISzSzC:c{S#J}vsmc2YsCjRy3)c2Y(. A$!}Q81]15ggi!	 	s   CC C!c                     [        U [        5      (       a  U R                  S5      $ [        U [        5      (       a  U  Vs/ s H  n[	        USS9PM     sn$ [        U [
        5      (       aG  U(       d@  [        U R                  5        VVs/ s H  u  p4[	        USS9[	        USS94PM     snn5      $ U $ s  snf s  snnf !    U $ = f)Nutf-8T)ignore_dicts)
isinstanceunicodeencodelistbyteifydict	iteritems)r   r   r7   keyvalues        r   r   r      s    gt{{7'; ;dRV$WRV$WT%ERV$WWdL
gkgugugwxgwYcY\40'%d2STgwx
yy	 %Xxs4   %C C B6C 4C  B;
,C 6C Cc                 6    [         R                  " SSU 5      n U $ )Nz[^\x00-\x7f]rH   r   txts    r   	normalizer      s    	vvoc3'r   c                      [        U 5      $ ! [         a%    U R                  SS5      R                  SS5      s $    g= f!   U s $ = f)Nr   ignoreasciirH   )r   UnicodeEncodeErrorr   decodeobjs    r   safe_stringr      sC    #h	[CJJw$A$H$HRZ$[[s!   
 ,>A >A A Ac                      SU -  n SR                  S [        R                  " SU 5       5       5      n U $ !    N3= f!    U $ = f)Nz%srH   c              3   ^   #    U  H#  n[         R                  " U5      S :w  d  M  Uv   M%     g7f)MnN)unicodedatacategoryrM   s     r   rP   !remove_accents.<locals>.<genexpr>   s(     `<a@T@TUV@W[_@_<rR   NFD)rT   r   r   r   s    r   remove_accentsr      sJ    S[s
`;00<``# $s   6 -= := Ac                     U(       a1  [         R                  " SU-   S-   U-   U 5      R                  S5      nU$ [         R                  " SU-   S-   U-   S-   U 5      R                  S5      nU$ )Nz(?i)z
([\S\s]+?)r.   (?i)([\S\s]+?))r   searchgroup)textfrom_string	to_string	excludingr   s        r   regex_from_tor      sl    299W{2]BYNPTU[[\]^q	 99X+k9IEKTRXXYZ[q	r   c                 L    [         R                  " SU-   S-   U-   S-   U 5      nU$ )Nr   r   r   )r   findall)r   
start_withend_withr   s       r   regex_get_allr      s+    ZZ:%3h>DdK	r   c                    [         R                  " SSU 5      n [        U 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                  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 $ )Nz(&#[0-9]+)([^;^0-9]+)z\1;\2z<ul>
z</ul>z<li>z
* z</li>rH   z
<br/><br/>z&quot;r   r   r   z	[spoiler]z
[/spoiler])r   r   r   r   r   s    r   replace_html_codesr      s    	vv&	37}
{{64 
{{7D!
{{66"
{{7B
{{<&
{{8T"
{{7C 
{{;#
{{<$r   c                      [         R                  " 5       n[        U S5       nUR                  5       nUR	                  U5        UR                  5       sS S S 5        $ ! , (       d  f       g = f!    g = f)Nrb)hashlibmd5openreadupdate	hexdigest)filemd5_hashafilebufs       r   gen_file_hashr     sU    [[](D$5	3??3



  s(   !A/ 1A	A/ 
A,(A/ ,A/ /A3c                    [        U S5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U S5      u  p2[        US5      u  pC[        US5      u  pTUS:  a  SUS-   U4-  nOSnUS:X  a  XdX24-  $ SU-   XTX24-  $ s  snf )	z*Convert seconds to 'D days, HH:MM:SS.FFF' __len__<      r   z%%02d:%%02d:%%0%d.%df   z%02d:%02d:%02dz	%d days, )hasattrsec2timedivmod)secn_msecr   mhri   patterns          r   r  r     s    C	#=AHQK#==sBq"q"
QJ1VAXv4FF!wF7Y&&	w	1,.. $>s   Bc                 T    SU ;   a  U S   =(       d    S$ SU ;   a  U S   =(       d    S$ g)Nreleasedz
2050-01-01first_airedrn   )r7   s    r   released_keyr     s3    $tJ/?<?T$}"5"EEr   c                      U c  Sn / SQn[         R                  " SU R                  5       5      nU(       a0  UR                  S5      U;   a  [	        UR                  S5      5      nOSnXS  $ !   U s $ = f)NrH   )ther   anz^((\w+)\s+)   r.   r   )r   matchlowerr   rB   )titlearticlesr  offsets       r   	title_keyr     sf    
]BE(
((>5;;=
1%
u{{1~)CA4G6	ws   A*A- -A3c                 .   ^ U R                  U4S jS9  U $ )Nc                 V   > [         R                  " SSU T   R                  5       5      $ )Nz(^the |^a |^an )rH   )r   r   r  )k_keys    r   <lambda>"sort_for_article.<locals>.<lambda>   s    "&&!4b!D'--/Jr   r   )sort)r5   r   s    `r   sort_for_articler%     s    JKr   c                 f    US:g  nU S:X  a  [        US US9$ U S:X  a  [        US US9$ U S:X  a  [        US US9$ U S	:X  a  [        US
 US9$ U S:X  a  [        US US9$ U S:X  a  [        US US9$ U S:X  a  [        US US9$ U S:X  a  [        US US9$ U S:X  a  [        US S9$ U$ !   Us $ = f)Nascrankc                     U S   $ )Nr(  rn   xs    r   r!  sort_list.<locals>.<lambda>  s    &	r   )r   reverseaddedc                     U S   $ )N	listed_atrn   r*  s    r   r!  r,    s    ;r   r  c                 @    [        X S      R                  S5      5      $ )Ntyper  )r  getr*  s    r   r!  r,    s    1vY<K[K[\cKdAer   r  c                 "    [        X S      5      $ )Nr2  )r  r*  s    r   r!  r,  	  s    LQRU[S\Q]D^r   runtimec                 0    X S      R                  SS5      $ )Nr2  r5  r   r3  r*  s    r   r!  r,  
  s    1vY<CSCST]_`Car   
popularityc                 0    X S      R                  SS5      $ Nr2  votesr   r7  r*  s    r   r!  r,    s    a&	lFVFVW^`aFbr   
percentagec                 0    X S      R                  SS5      $ )Nr2  ratingr   r7  r*  s    r   r!  r,    s    a&	lFVFVW_abFcr   r;  c                 0    X S      R                  SS5      $ r:  r7  r*  s    r   r!  r,    s    V9AQAQRY[\A]r   randomc                 ,    [         R                   " 5       $ r   )r@  )r  s    r   r!  r,    s
    &--/r   r#  )sorted)sort_keysort_direction	list_datar-  s       r   	sort_listrF    s    e#'y6ISZ [[	7OY`!aa	7eov!wwF9:^ho$pp6)9akr#ssfY<bls&ttfY<cmt&uu	7]gn!oo&8Q"RR			s>   B* B* B* B* B* !B* 3B* B* B* (B* *B0c                     U(       a+  XS  n [        [        X5      5      nUR                  S/ 5        O[        [        X5      5      nXAS-
     [        U5      4nU$ r   )r   rF   insertrB   )rC   pagerD   paginate_startpagesresults         r   paginate_listrM    sT    ()
vi'
(%,,q"F9,-u?CJ
'r   c                     U(       a
  [        5          [        U 5      nUR                  US9  [        U5      (       a  SnOSn U(       a
  [	        5         U$ !   Sn N= f)N)r   TF)r   r   
extractallr   r   )zip_locationdestination_locationdestination_check	show_busyzipfilestatuss         r   unziprV    sZ    !L!'	./"##dV! %s   ,A  A Ac                    [         R                  S:X  a4   SSKJn  SU R	                  SS5      R                  5       -   S-   nU" USS	9$ [         R                  S
:X  a$   SSKJn  SU R                  5       -   S-   nU" USS	9$ [         R                  S:X  a"   SSKJnJn  U" SS/US9nUR                  U S9  g g !    g = f!    g = f!    g = f)Nwin32r   )
check_callzecho r   z^&z|clipT)shelldarwinz|pbcopylinux)PopenPIPExselz-pi)stdin)input)	r   platform
subprocessrY  r   r   r]  r^  communicate)r   rY  cmdr]  r^  ps         r   	copy2cliprg  &  s    LLG$	3;;sD)//1	1G	;3
S
%%LLH$	399;		*3
S
%%LLG%fe_D)1==s=	  & & &s#   2B8 "B?  C 8B<?CC
)F)FF)re   Tr   )FT)T)r  )   r   )Cr   r   rm   r   r@  	_strptimer   htmlr   	threadingr   r   rT  r   	importlibr   r   r(   r	   r
   r   modules.settingsr   modules.kodi_utilsr   r   r   r   r   r   r"   r&   r*   r)   r9   r;   r?   rF   rX   r\   rc   rj   ro   rv   r   r   r^   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  rF  rM  rV  rg  rn   r   r   <module>ro     s    	 
       )  9 . . ( e eQ+83 H1"2
U


,


	/
	r   