
    Tg                        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m	Z	 d dl
mZ e j                  j                   ej                         dd      Z G d de      Z G d	 d
      Z G d de      Z G d de	j(                        Zy)    N)Path)GLibGObject)print_timingmintinstallzreviews.jsonc                   (    e Zd Zd Zedefd       Zy)Reviewc                 \    || _         || _        || _        t        |      | _        || _        y N)datepackagenameusernameintratingcomment)selfr   r   r   r   r   s         )/usr/lib/linuxmint/mintinstall/reviews.py__init__zReview.__init__   s*    	& &k    	json_datac                      | di |S )N r   )clsr   s     r   	from_jsonzReview.from_json   s    Yr   N)__name__
__module____qualname__r   classmethoddictr   r   r   r   r	   r	      s"          r   r	   c                   0    e Zd ZddZd Zedefd       Zy)
ReviewInfoc                 X    || _         g | _        g | _        || _        || _        || _        y r   )namereviews
categoriesscore
avg_ratingnum_reviews)r   r#   r&   r'   r(   s        r   r   zReviewInfo.__init__   s-    	
$&r   c                    d}t        | j                        | _        d| _        | j                  D ]  }||j                  z   } | j                  dkD  rst        t        |      t        | j                        z  d      | _        t        d| j                        }d|z
  }t        | j                  |z  d|z  z   dz  d      | _        y d| _        y )Nr      
   g      @)	lenr$   r(   r'   r   roundfloatminr&   )r   
sum_ratingreviewsignificant_votesmissing_votess        r   update_statszReviewInfo.update_stats%   s    
t||,ll 	4F#fmm3J	4a#E*$5d>N>N8O$OQRSDO #B(8(8 9!22M0A A#mBS SUWWYZ[DJDJr   r   c                     t        t        t        j                  |d               } | |d   |d   |d   |d         }||_        |S )Nr$   r#   r&   r'   r(   )listmapr	   r   r$   )r   r   r$   insts       r   r   zReviewInfo.from_json5   sU    s6++Yy-ABC9V$W%\*]+- r   N)r   r   r   )r   r   r   r   r4   r   r   r   r   r   r   r!   r!      s'    '    r   r!   c                   4     e Zd Z fdZedefd       Z xZS )
JsonObjectc                 X    t         t        |           || _        t	        |      | _        y r   )superr:   r   cacher   size)r   r=   r>   	__class__s      r   r   zJsonObject.__init__A   s"    j$(*
I	r   r   c                     i }|d   j                         D ]"  }|d   |   }t        j                  |      ||<   $  | ||d         S )Nr=   r>   )keysr!   r   )r   r   new_dictkey	info_datas        r   r   zJsonObject.from_jsonG   s[    W%**, 	<C!'*3/I&00;HSM	< 8Yv.//r   )r   r   r   r   r   r   r   __classcell__)r?   s   @r   r:   r:   @   s#     0$ 0 0r   r:   c                       e Zd Zdej                  j
                  ddfiZed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zed        ZddZd Zy)ReviewCachereviews-updatedNr   c                     t         j                  j                  |        t        j                         | _        | j                         \  | _        | _        d | _	        | j                          y r   )r   Objectr   	threadingLock_cache_lock_load_cache_reviews_sizeproc_update_cacher   s    r   r   zReviewCache.__init__T   sM    %$>>+$($4$4$6!tz	r   c                 t    	 | j                   j                          d | _         y # t        $ r
}Y d }~y d }~ww xY wr   )rQ   	terminateAttributeError)r   es     r   killzReviewCache.kill`   s1    	II!DI 		s   !$ 	77c                 z    | j                   5  | j                  j                         cd d d        S # 1 sw Y   y xY wr   )rM   rO   rA   rS   s    r   rA   zReviewCache.keysg   s0     	(==%%'	( 	( 	(   1:c                 z    | j                   5  | j                  j                         cd d d        S # 1 sw Y   y xY wr   )rM   rO   valuesrS   s    r   r\   zReviewCache.valuesk   s0     	*=='')	* 	* 	*rZ   c                     | j                   5  	 | j                  |   cd d d        S # t        $ r t        |      cY cd d d        S w xY w# 1 sw Y   y xY wr   )rM   rO   KeyErrorr!   )r   rC   s     r   __getitem__zReviewCache.__getitem__o   s[     	''}}S)	' 	'  '!#&		' 	''	' 	's%   A
'AA
AA

Ac                 b    | j                   5  || j                  v cd d d        S # 1 sw Y   y xY wr   )rM   rO   )r   r#   s     r   __contains__zReviewCache.__contains__v   s,     	)4==(	) 	) 	)s   %.c                 p    | j                   5  t        | j                        cd d d        S # 1 sw Y   y xY wr   )rM   r,   rO   rS   s    r   __len__zReviewCache.__len__z   s,     	&t}}%	& 	& 	&s   ,5c           	         d }d}d }	 t        t              }|j                  j                  dd       |a	 |j                  dd      5 }t        j                  t        j                  |            }|j                  }|j                  }d d d        ||fS ||fS # t        $ r d }Y tw xY w# 1 sw Y   "xY w# t        $ r(}t        dt        |      z         i }d}Y d }~||fS d }~ww xY w# |	 |j                  dd      5 }t        j                  t        j                  |            }|j                  }|j                  }d d d        w # 1 sw Y   w xY w# t        $ r%}t        dt        |      z         i }d}Y d }~w d }~ww xY ww xY w)Nr   Tparentsexist_okrutf8modeencodingz*MintInstall: Cannot open reviews cache: %s)r   REVIEWS_CACHEparentmkdir	Exceptionopenr:   r   jsonloadr=   r>   printstr)r   r=   r>   pathfjson_objectrW   s          r   rN   zReviewCache._load_cache~   s   	&DKKdT: f= 0&0&:&:499Q<&H + 1 1*//0 d{ud{  	D	
0 0 ! FQOPEDd{ f= 0&0&:&:499Q<&H + 1 1*//0 0 0 ! FQOPED  s   ,B B8 
AB,B8 B)&C, (B))C, ,B51B8 8	C)C$$C),F0EAEEFEEFE	F"F=FFFc           	         d }	 t        t              }|j                  j                  dd       	 |j                  dd      5 }t        ||      }t        j                  ||d d       d d d        y y # t        $ r d }Y Rw xY w# 1 sw Y   xY w# t        $ r!}t        d	t        |      z         Y d }~y d }~ww xY w# 	 |j                  dd      5 }t        ||      }t        j                  ||d d       d d d        w # 1 sw Y   w xY w# t        $ r!}t        d	t        |      z         Y d }~w d }~ww xY wxY w)
NTre   wri   rj   c                     | j                   S r   )__dict__)os    r   <lambda>z)ReviewCache._save_cache.<locals>.<lambda>   s
     r      )defaultindentz,MintInstall: Could not save review cache: %s)r   rm   rn   ro   rp   rq   r:   rr   dumprt   ru   )r   r=   r>   rv   rw   pobjrW   s          r   _save_cachezReviewCache._save_cache   s:   	O&DKKdT:OYYC&Y9 OQ%eT2DIIdA/CANO O	  	D	O O  ODs1vMNNO	OYYC&Y9 OQ%eT2DIIdA/CANO O O  ODs1vMNNOs   ,A5 B 'B+B 5B B? BB? BB 	B<B77B<?D=D'D;DD=D	DD=D	D:D50D=5D::D=c                 d    t        j                  | j                        }|j                          y )N)target)rK   Thread_update_reviews_threadstart)r   threads     r   rR   zReviewCache._update_cache   s!    !!)D)DEr   c                 
   t        j                  dd      }t        j                  d| j                        }t        j                  | j                  ||f      | _        | j
                  j                          | j
                  j                          d | _        |j                  rR| j                  5  | j                         \  | _        | _        t        j                  | j                         d d d        y y # 1 sw Y   y xY w)NbFd)r   args)multiprocessingValuerP   Process_update_cache_processrQ   r   joinvaluerM   rN   rO   r   idle_addemit_reviews_updated)r   successcurrent_sizes      r   r   z"ReviewCache._update_reviews_thread   s     "''U3&,,S$**=#++43M3MU\^jTkl						==!! 9,0,<,<,>)tzd7789 9 9 9s   2=C99Dc                 &    | j                  d       y )NrH   )emit)r   datas     r   r   z ReviewCache.emit_reviews_updated   s    		#$r   c           	      0   i }	 t        j                  dd      }|j                  dk(  r{t        |j                  j                  d            |j                  k7  r=t        j
                  dd      }d }|j                         D ]  }|j                         }|j                  d      }t        |      dk(  s3t        |d	   t        |d
         |d   |d   |d         }	|.|j                  |d	   k(  r|j                  j                  |	       ||j!                          	 ||d	      }
|
}|
j                  j                  |	        ||j!                          | j'                  ||j                  j                  d             t)        d       d|_        y t)        d       y t)        d|j*                  z         d|_        y # t"        $ r t%        |d	         }
|
||d	   <   Y w xY w# t"        $ r!}t)        dt-        |      z         Y d }~y d }~ww xY w)Nz5https://community.linuxmint.com/data/new-reviews.listr+   )timeout   zcontent-length   z~~~   r   r*         r   z#MintInstall: Downloaded new reviewsTzMintInstall: No new reviewsz3MintInstall: Could not download updated reviews: %sFz9MintInstall: Problem attempting to access reviews url: %s)requestsheadstatus_coder   headersgetr   
iter_linesdecodesplitr,   r	   r.   r#   r$   appendr4   rp   r!   r   rt   reasonru   )r   r   r   new_reviewsrh   last_packagelinedecodedelementsr1   packagerW   s               r   r   z!ReviewCache._update_cache_process   s   ,	XU_abA}}#qyy}}%567<;M;MM %\fhiA#'L ! ?"&++-#*==#7x=A-%+HQKx{9KXVW[ZbcdZegopqgr%sF+7L<M<MQYZ[Q\<\ , 4 4 ; ;F C#/#;$0$=$=$?!G.9(1+.FG
 07 ' 6 6v >)?, $/$113$$[!))--@P2QR?@$(GM78KahhVW %# (1 !G.8!.EG?FK$<!G$  	XMPSTUPVVWW	XsP   B4G+ 9A)G+ #G+A.G+ G+ &G+ G(%G+ 'G((G+ +	H4HHr   )r   r   r   r   SignalFlagsRUN_LAST__gsignals__r   r   rX   rA   r\   r_   ra   rc   rN   r   rR   r   r   r   r   r   r   rG   rG   P   s    G//88$CL 	 	(*')&2O  9 9(%/Xr   rG   )osrK   rr   r   r   pathlibr   gi.repositoryr   r   miscr   rv   r   get_user_cache_dirrm   objectr	   r!   r:   rJ   rG   r   r   r   <module>r      sv    	      ' 4T446~V
 V 
 " "H0 0 bX'.. bXr   