
    ?g                        d dl mZ 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	 d dl
Z
d dlZ ej                  dd       d dlmZmZmZmZmZ d dlmZmZmZ d d	lmZ ej2                  j5                  d
      Zd ZdZdZd ZdZ dZ!dZ"g dZ#dxZ$Z%	  e
jL                         d    Z% e
jL                         d    jO                  d      d    Z$ ed      d        Z(d Z)i Z*d Z+d Z,d Z-d%dZ.d%dZ/ ed      Z0 G d de      Z1d Z2 G d dejf                        Z4 G d d e      Z5 G d! d"ejf                        Z6 G d# d$e      Z7y#  Y xY w)&    )	lru_cacheN)
HTMLParser)entitiesGtkz3.0)Gior   Gdk	GdkPixbufGLib)SettingsPageSettingsWidgetSettingsLabel)ThreadedTaskManager~          )
spawn_syncspawn_command_line_syncGTopget_file_contents_utf8_syncC_)maxsizec                      t        j                  ddgd      j                         d   } | j                  d      D cg c]  }t        |       c}S c c}w )Ncinnamonz	--versionutf-8encodingr   .)
subprocesscheck_outputsplitint)version_strparts     :/usr/share/cinnamon/cinnamon-settings/bin/ExtensionCore.pyget_cinnamon_versionr'   *   sK    )):{*CgV\\^_`aK"-"3"3C"89$CI999s   Ac           	         dg}t               }t        j                  |       D ]  }t        j                  j	                  t        j                  j                  | |            sAt        j                  d|      sX|j                  d      D cg c]  }t        |       }}||cxk  r|k  sn |} |dgk(  r| S t        j                  j                  | dj                  t        t        |                  S c c}w )Nr   z ^[1-9][0-9]*\.[0-9]+(\.[0-9]+)?$r   )r'   oslistdirpathisdirjoinrematchr"   r#   mapstr)	directorylargestcurr_asubdirr%   subdir_as         r&   find_extension_subdirr7   0   s    cG!#F**Y' 
ww}}RWW\\)V<=xx;VD*0,,s*;<$CI<<X''G
 1#~77<<	388CW,=#>?? =s   C:c                    |j                         s|S | t        vr/	 t        j                  | t        dz         j                  t        | <   t        |    rt        |    |      }||k7  r|S t        |      S # t
        $ rD 	 t        j                  | d      j                  t        | <   n# t
        $ r d t        | <   Y nw xY wY uw xY w)Nz/.local/share/localez/usr/share/locale)striptranslationsgettexttranslationhomeIOErrorr   )uuidstringresults      r&   	translaterB   H   s    <<> <	*!(!4!4T4BX;X!Y!a!aL Dd#F+VMV9  	**%,%8%8?R%S%[%[T" *%)T"*	*s5   .A3 3	C ='B%$C %B:7C 9B::C ?C c                     |rO| j                         s>| j                  t        j                  t        j                  j
                               y y y )Norientation)
get_header
set_headerr   	SeparatorOrientation
HORIZONTAL)rowbefore	user_datas      r&   list_header_funcrN   ^   s4    cnn&s}}1K1KLM 'v    c                     |j                         j                         }| j                  | j                  | j                  | j
                  fD ]$  }|j                         |j                         v s$ y y)NTF)get_textlowernamedescriptionr?   author)rK   entrysearch_stringrow_parts       r&   
filter_rowrY   c   s_    NN$**,MXXs#**E  HNN$44 rO   c                 z   t        j                  |dt         j                  j                  t         j                  j
                        }t        j                  |       }|j                  |       |j                          |j                         }|j                          |t         j                  j                  k(  S NT)transient_fordestroy_with_parentmessage_typebuttons)r   MessageDialogMessageTypeQUESTIONButtonsTypeYES_NOhtmlescape
set_markupshow_allrundestroyResponseTypeYES)msgwindowdialogescresponses        r&   show_promptrr   k   s    V37,/OO,D,D'*'='=?F ++c
C
c
OOzz|H
NNs''++++rO   c                 B   t        j                  |dt         j                  j                  t         j                  j
                        }t        j                  |       }|j                  |       |j                          |j                          |j                          y r[   )r   r`   ra   ERRORrc   OKre   rf   rg   rh   ri   rj   )rm   rn   ro   rp   s       r&   show_messagerv   x   sl    V37,/OO,A,A'*'9'9;F ++c
C
c
OO
JJL
NNrO      c                   *    e Zd Zd Zd Zd Zd Zd Zy)MyHTMLParserc                 <    t        j                  |        g | _        y N)r   __init__stringsselfs    r&   r|   zMyHTMLParser.__init__   s    D!rO   c                 :    | j                   j                  |       y r{   )r}   append)r   datas     r&   handle_datazMyHTMLParser.handle_data   s    D!rO   c                     |d   dv rt        |dd  d      n
t        |      }| j                  j                  t        |             y )Nr   )xXr      )r#   r}   r   chr)r   number	codepoints      r&   handle_charrefzMyHTMLParser.handle_charref   s;    +1!9
+BCqr
B'F	C	N+rO   c                 r    t         j                  |   }| j                  j                  t	        |             y r{   )r   name2codepointr}   r   r   )r   rS   r   s      r&   handle_entityrefzMyHTMLParser.handle_entityref   s(    ++D1	C	N+rO   c                 8    dj                  | j                        S )N )r-   r}   r~   s    r&   rQ   zMyHTMLParser.get_text   s    wwt||$$rO   N)__name__
__module____qualname__r|   r   r   r   rQ    rO   r&   ry   ry      s    ",,%rO   ry   c                     t               }|j                  |        |j                         }|j                  d      j                  d      j	                  dd      j	                  dd      j	                  dd      S )Nz
 
 z  \r   )ry   feedrQ   r9   replace)r@   parsertexts      r&   sanitize_htmlr      sd    ^F
KK??D::e""4(00s;CCD#NVVW[]_``rO   c                   V     e Zd Z fdZd Zd Zd ZddZd Zd Z	d Z
d	 Zd
 Z xZS )ManageSpicesRowc                    t         |           || _        || _        i | _        t        |j                  d            | _        | j                  d   | _        t        | j                  d   | j                  d         | _
        t        | j                  d   | j                  d         | _        t        j                  j                  | j                  d   d      }d| _        d|v r6|d   j!                         d	k7  r |d   j!                         d
k7  r
|d   | _        	 t#        | j                  d         | _        | j$                  dk  rd| _        	 | j                  d   | _        |j                  dd      | _        t/        | j                  d         | j                  d<   d| _        d | _        | j                  j                  d      sd| j                  v r?t        j                  j                  | j                  d   | j                  d         | _        | j2                  8t        j                  j5                  | j2                        rd| _        nd | _        | j2                  6t        j                  j5                  | j                  d    d      rd| _        t7               }| j9                  |       t;        j<                         }|j?                  d       |jA                  |ddd       t;        jB                         }|jE                  d       |d   jG                  |       t:        jH                  jK                  dd      | _&        | j                  dk(  r%| jL                  jO                  tQ        d             ng| j                  dk(  r%| jL                  jO                  tQ        d             n3| j                  dk(  r$| jL                  jO                  tQ        d             | jL                  jS                  d       |jU                  | jL                  ddd       |jW                          |jY                  |dddd       d }d | j                  v rt| j                  d    }	t:        jZ                  j]                         j_                  |	      r8t:        jH                  jK                  |	t:        j`                  jb                        }t        j                  j5                  |      r	 t:        j`                  je                  t:        j`                  jb                        \  }
}}| jg                         }th        jj                  jm                  |||z  ||z  d      }to        jp                  ||d       }t:        jH                  js                  |      }|<t:        jH                  jK                  d!| d"t:        j`                  jb                        }|jy                  ||t:        jz                  j|                  dd       t;        jB                  t:        j~                  j                  #      }d|j                  _B        t:        j                  j                  |j                  _E        |jE                  d       t;        j                         }t        j                  | j                        }| j                  s|j                  d$| d%       n0tQ        d&      | j                  z  }|j                  d$| d'| d(       d)|j                  _J        |j9                  |       t;        j                         }t        j                  | j                        }|j                  d*| d+       d)|j                  _J        |j9                  |       t               }t        j                  t        | j                              }|j                  d,| d(       |j                  d       |j9                  |       |jy                  ||t:        jz                  j|                  dd       t;        jB                         | _N        | j                  jE                  d       |jy                  | j                  |t:        jz                  j|                  dd       |d   jG                  | j                         t;        jB                         | _O        | j                  j                  t:        j                  j                         |jy                  | j                  | j                  t:        jz                  j|                  dd       |d   jG                  | j                         | j0                  rt:        jH                  jK                  d-d      }t;        j                  |.      | _S        | j                  jO                  tQ        d/             | j                  jA                  | j                  ddd       | j                  j                  d0| j                         | j                          | j                  s| j                  dk(  r| j                  d1d2tQ        d3             nz| j                  dk(  r| j                  d1d2tQ        d4             nN| j                  dk(  r| j                  d1d2tQ        d5             n"| j                  d6k(  r| j                  d1d2d       | j                  r-| j                  d6k7  r| j                  | j                  d          | j                         | _Z        y # t&        t(        f$ r d| _        Y 	w xY w# t&        t(        f$ r d | _        Y 	w xY w# tt        $ r}
tw        |
       d }Y d }
~
d }
~
ww xY w)7Nwritabler?   rS   rT   r+   zicon.pngr   rU   noneunknownzmax-instancesr   roledisable_aboutFzhide-configurationzexternal-configuration-appTz/settings-schema.json   r      object-select-symbolicr   appletz This applet is currently enableddeskletz!This desklet is currently enabled	extensionz#This extension is currently enablediconzcs-srD   <b></b>by %s</b><small> </small>        
<small><i></i></small><small>zsystem-run-symbolic)image	Configureclickedlockedzchanges-prevent-symbolicz.This is a system applet. It cannot be removed.z/This is a system desklet. It cannot be removed.z1This is a system extension. It cannot be removed.action)[superr|   extension_typemetadata
status_idsboolgetr   r?   rB   rS   rT   r)   r+   r-   rU   rR   r#   max_instancesKeyError
ValueErrorr   disabled_aboutr7   
has_configext_config_appexistsr   addr   Gridset_column_spacing
pack_startBoxset_spacing
add_widgetImagenew_from_icon_nameenabled_imageset_tooltip_textr   set_no_show_allpack_endshowattach	IconThemeget_defaulthas_iconIconSizeLARGE_TOOLBARlookupget_scale_factorr	   Pixbufnew_from_file_at_scaler    cairo_surface_create_from_pixbufnew_from_surface	Exceptionprintattach_next_toPositionTypeRIGHTrI   VERTICALpropshexpandAlignSTARThalignLabelr
   markup_escape_textrg   xalignr   r   set_margin_top
status_box
button_box
set_valignCENTERButtonconfig_buttonconnect	configureset_can_config
add_statusscan_extension_for_danger#is_compatible_with_cinnamon_versionversion_supported)r   r   r   size_groups	icon_pathwidgetgridenabled_boxr   	icon_nameewidthheightscalepixbufsurfacedesc_box
name_labelname_markup	by_author
uuid_labeluuid_markupdescription_labeldescription_markupconfig_icon	__class__s                            r&   r|   zManageSpicesRow.__init__   s   , X\\*56MM&)	dmmF3T]]65JK	$T]]6%:DMM-<XYGGLLv!6
C	x!'')V38J8P8P8RV_8_&x0	#!$T]]?%C!DD!!B&%&"	f-DI 'll?EB !6dmmF6K Lf
  "}}  !56+t}}<&(ggll4==3H$--XtJu&v#"".77>>$"5"56&*DO*.D'""*rww~~vAV@WWl>m/n"&!xxz#$dA.ggi"A!!+. YY99:RTUV(*//2T0UV  I-//2U0VW  K///2W0XY**40T//qAKAq!,T]]"f-I}}((*33I>yy33Is||?Y?YZ77>>)$	#&<<#6#6s||7Q7Q#R 5&--/"))@@ETYM[`ch[hjno>>vudSyy11':
 <99//#n5EQ0GIcIcdDD+s/?/?/E/Eq!L77s'?'?@!% #		QYY[
--dii8{{!!C}D"9:'
T[[0I!!C}L8"TU"%
Z YY[
--dii8
;-|DE"%
Z )O!44]4CSCS5TU$$w/A.B(%KL((+&'HdC,<,<,B,BAqI'')##A&DOOXs7G7G7M7MqRSTA!!$//2'')""399#3#34DOOT__c>N>N>T>TVWYZ[A!!$//2??))667LaPK!$+!>D//+?OO&&t'9'95%K&&y$..A!}}""h.*DaHxFyz$$	1*DaHyFz{$$3*DaH{F|}$$0*DbI==T00H<**4==+@A!%!I!I!KS *% 	#!"D	#
 *% 	DI	~  as=   3l l; ,B)m l87l8;mm	m9!m44m9c           
         	 t               }| j                  d   D ]  }|j                  d      D cg c]  }t        |       }}|d d |k  s3t        j
                  j                  | j                  d   | j                  dz         }t        j
                  j                  |      r yt        d| j                   d| j                   d	| d
        y t        d| j                   d| j                   d       yc c}w #  Y yxY w)Nzcinnamon-versionr   r   r+   .jsTzThe r   z. is not properly structured. Path not found: ''Fz1 is not compatible with this version of Cinnamon.)r'   r   r"   r#   r)   r+   r-   r   r   r   r?   )r   curr_verversionr%   	spice_verr+   s         r&   r   z3ManageSpicesRow.is_compatible_with_cinnamon_versionF  s    	 ,-H==);< !3:==3EF4SYF	FRa=H,77<<f(=t?R?RUZ?Z[Dww~~d+#D1T-@-@,AAoptouuvwx ! D1T%8%8$99jkl G	s/   /D C<
D AD )*D 'D <D Dc                     | j                   sy y r{   )r   r   argss     r&   r   zManageSpicesRow.set_can_config\  s     rO   c                     | j                   sy | j                  r!t        j                  | j                  g       y t        j                  d| j                  | j
                  g       y )Nzxlet-settings)r   r   r    Popenr   r?   r  s     r&   r   zManageSpicesRow.configure`  sK    d1123ot/B/BDIINOrO   c                     || j                   v ry t        j                  j                  |d      }| j                  j                  |ddd       || j                   |<   |j                  |       |j                          y Nr   Fr   )r   r   r   r   r   r   r   r   r   	status_idr  tooltip_textr   s        r&   r   zManageSpicesRow.add_statusi  sd    'yy++Iq9  ueQ7%)	"l+		rO   c                 v    || j                   vry | j                   |   j                          | j                   |= y r{   r   rj   r   r$  s     r&   remove_statuszManageSpicesRow.remove_statuss  2    DOO+	"**,OOI&rO   c                     || _         | j                   r| j                  j                          n| j                  j                          | j                  r| j
                  j                  |       y y r{   )enabledr   r   hider   r   set_sensitive)r   r,  s     r&   set_enabledzManageSpicesRow.set_enabledz  sT    <<##%##%??,,W5 rO   c                 \    t         j                  | j                  | j                  |f       y r{   )background_work_queuepushscan_extension_threadon_scan_complete)r   r2   s     r&   r   z)ManageSpicesRow.scan_extension_for_danger  s$    ""4#=#=t?T?TW`VbcrO   c                 F    d}d fd	  |       |S #  d}Y |S xY w)NFc                     | j                  d      rBt        | d      5 }|j                         }t        D ]  }||v st	        d       	 d d d        y y # 1 sw Y   y xY w)Nr  r   r   unsafe)endswithopenreadUNSAFE_ITEMSr   )item	scan_filecontentsunsafe_items       r&   	scan_itemz8ManageSpicesRow.scan_extension_thread.<locals>.scan_item  sg    }}U#$1 6Y(~~/H'3 6&(2"+H"5566 6 $6 6s   AAAc                     t        j                  |       D ]R  }t         j                  j                  | |      }t         j                  j	                  |      r	 |       K |       T y r{   )r)   r*   r+   r-   r,   )r5   r<  	item_pathscan_dirr@  s      r&   rC  z7ManageSpicesRow.scan_extension_thread.<locals>.scan_dir  sO    

6* )GGLL6	77==+Y'i()rO   Tr   )r   r2   	dangerousrC  r@  s      @@r&   r3  z%ManageSpicesRow.scan_extension_thread  s9    		6	)	Y 	Is     c                    |r| j                   dk(  r| j                  ddt        d             y | j                   dk(  r| j                  ddt        d             y | j                   dk(  r| j                  ddt        d             y y y )	Nr   rD  zdialog-warning-symboliczThis applet contains function calls that could potentially cause Cinnamon to crash or freeze. If you are experiencing crashes or freezing, please try removing it.r   zThis desklet contains function calls that could potentially cause Cinnamon to crash or freeze. If you are experiencing crashes or freezing, please try removing it.r   zThis extension contains function calls that could potentially cause Cinnamon to crash or freeze. If you are experiencing crashes or freezing, please try removing it.)r   r   r   )r   is_dangerouss     r&   r4  z ManageSpicesRow.on_scan_complete  s    ""h.-F  Ko  Ip  q$$	1-F  Kp  Iq  r$$3-F  Kr  Is  t 4 rO   r   )r   r   r   r|   r   r   r   r   r)  r/  r   r3  r4  __classcell__r  s   @r&   r   r      s;    aLF,P'6d4trO   r   c                   p     e Zd Z fdZddZd Zd Zd ZddZd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )ManageSpicesPagec                 |   t         |           d| _        | j                  d       | j	                  d       || _        || _        || _        d| _        || _	        g | _
        t        j                         | _        | j                  | j                  ddd       t        j                         | _        | j                   j#                  t        j$                  j&                  d       | j                   j)                  t+        d             | j                   j-                  d| j.                         | j                  j1                  | j                   ddd	       t        j2                         }|j5                  t        j6                  j8                         |j;                         }|j=                  d
       | j                  |ddd       t        j                  t        j>                  j@                        }|jC                  |       t        jD                         }d|_        |jG                  t        jH                  jJ                  t        jH                  jL                         |j5                  t        j6                  jN                         |j                  |ddd       t        j                  t        j>                  j@                        | _(        |jC                  | jP                         t        j2                  t        j6                  jN                        | _)        | jP                  jC                  | jR                         d }	t        jT                         | _+        | jV                  jY                  t        jZ                  j\                         | jV                  j_                  |	       | jV                  ja                  tb        d        | jV                  j-                  d| jd                         | jP                  jC                  | jV                         t        jf                  ji                         }
t        jj                  j=                  t        jl                  j;                  |
      d       | jC                  |
       t        jn                         }|jq                  d       |
jC                  |       t        j                  t        j>                  jr                        }|ju                  t        jv                  jx                         |jC                  |       t        jz                  j}                  dt        j~                  j                        | _A        | j                  j                  dd       | j                  j                  | j                         | j                  j-                  d| j                         |jC                  | j                         | j                  j                  d       t        jz                  j}                  dt        j~                  j                        | _G        | j                  j                  dd       | j                  j                  | j                         | j                  j-                  d| j                         |jC                  | j                         | j                  j                  d       t        jz                  j}                  dt        j~                  j                        | _J        | j                  j                  dd       | j                  j                  | j                         | j                  j-                  d| j                         |jC                  | j                         | j                  j                  d       t        jz                  j}                  dt        j~                  j                        | _M        | j                  j                  dd       | j                  j                  | j                         | j                  j-                  d| j                         |jC                  | j                         t        jz                  j}                  dt        j~                  j                        | _P        | j                  j                  dd       | j                  j                  t+        d             | j                  j-                  d| j                         |jC                  | j                         | j                  j                  d       | j                  j                         | _S        t        j                         }|j	                  d       |j                  | j                  ddd       | j1                  |ddd       | j                          | j-                  d| j                         | j                  j-                  d| j                         | j                  j-                  d| j                         y )NTr   rw   F
   edit-find-symbolicSearchchangedr   viewrD   shadow_typec                     | j                   |j                   k(  rA| j                  j                         }|j                  j                         }||k  ry||k  ryy| j                   ryy)Nr   r   r   )r   rS   rR   )row1row2name1name2s       r&   	sort_rowsz,ManageSpicesPage.__init__.<locals>.sort_rows  sV    }}-		)		)5=5=}}rO   row-selectedinline-toolbarzlist-add-symbolic2   r   r   zlist-remove-symbolicedit-delete-symboliczedit-undo-symboliczhelp-about-symbolicAbout   r0   installed-changedzstatus-changed)Wr   r|   expandr   r   parentcollection_typespices
has_filterrn   extension_rowsr   r   top_boxr   Entrysearch_entryset_icon_from_icon_nameEntryIconPositionPRIMARYset_placeholder_textr   r   on_entry_refilterr   Frameset_shadow_type
ShadowTypeINget_style_context	add_classrI   r   r   ScrolledWindow
set_policy
PolicyTypeNEVER	AUTOMATICNONEboxinfobar_holderListBoxlist_boxset_selection_modeSelectionModeSINGLEset_sort_funcset_header_funcrN   update_button_statesToolbarnewStyleContextWidgetToolItem
set_expandrJ   
set_halignr   r   r   r   r   MENUinstance_buttonset_size_requestr   instance_button_textadd_instancer.  remove_buttonremove_button_textremove_all_instancesuninstall_buttonuninstall_button_textuninstall_extensionrestore_buttonrestore_button_textrestore_to_defaultabout_buttonaboutget_progressbarprogress_barload_extensionson_page_mapupdate_status)r   rb  rc  rd  rn   frameframe_stylemain_boxscwrY  button_toolbarbutton_holderr{  pb_containerr  s                 r&   r|   zManageSpicesPage.__init__  s   A. wwyeUB7IIK11#2G2G2O2OQef..q{;!!)T-C-CDd//qA		cnn//0--/f%tT1-77s'?'?@		(  "
s~~++S^^-E-EFCNN//0CtQ/77s'?'?@!iiCNN4G4GHT(()	 (():):)A)AB##I.%%&6=nd.G.GHT]]#*""3::#?#?#OQab   &=)gg#//"<"<=syy''(#  #zz<<=PRUR^R^RcRcd--b"5--d.G.GH$$Y0A0AB$$%**51 ZZ::;QSVS_S_SdSde++B3++D,C,CD""9d.G.GH""#((/ #

 = =>TVYVbVbVgVg h..r26..t/I/IJ%%i1I1IJ%%&++E2!jj;;<PRUR^R^RcRcd,,R4,,T-E-EF##It/F/FG##$JJ99:OQTQ]Q]QbQbc**2r2**1W:6!!)TZZ8!!"''. !KK779wwy##B' 1 14qAlE5!4UD,,-/1E1EF,d.@.@ArO   c                 4   | j                   j                         dk(  r#| j                  j                  d        d| _        y | j                  r| j                  j                          y | j                  j                  t        | j                          d| _        y Nr   FTri  rQ   r~  set_filter_funcre  invalidate_filterrY   r   r  r   s      r&   rn  z"ManageSpicesPage.on_entry_refilter'  m    %%'2-MM))$/#DO??MM++-MM))*d6G6GH"DOrO   c                     | j                   D ]6  }|j                  | j                  j                  |j                               8 | j                          y r{   )rf  r/  rd  get_enabledr?   r  r   r  rK   s      r&   enabled_changedz ManageSpicesPage.enabled_changed3  sD    && 	?COODKK33CHH=>	? 	!!#rO   c                    | j                   j                         }|m| j                  j                  d       | j                  j                  d       | j
                  j                  d       | j                  j                  d       n| j                  j                  |j                  dk(  xs |j                  dk7         | j                  j                  |j                         | j
                  j                  |j                         | j                  j                  d       | j                  dk(  r4t        |d      r'| j                  j                  |j                          y y y )NFr   r   Tr   r   )r~  get_selected_rowr  r.  r  r  r  r,  r   r   rc  hasattrr   r  s      r&   r  z%ManageSpicesPage.update_button_states9  s   mm,,.;  ..u5,,U3!!//6++E2  ..s{{a/?/Y3CTCTXYCYZ,,S[[9!!//=++D18+=M0N++0B0B,BC 1O+rO   c                     | j                   j                         }| j                  |j                  |j                  |j
                         y r{   )r~  r  enable_extensionr?   rS   r   r   r  extension_rows      r&   r  zManageSpicesPage.add_instanceI  s8    668m00-2D2DmFeFefrO   c                 p    |s#t        t        d      |z  | j                         y | j                  |       y )Nz=Extension %s is not compatible with your version of Cinnamon.)rv   r   rn   enable)r   r?   rS   version_checks       r&   r  z!ManageSpicesPage.enable_extensionM  s1    Z[^bbdhdodopDrO   c                 :    | j                   j                  |       y r{   )rd  r  )r   r?   s     r&   r  zManageSpicesPage.enableT  s    $$T*rO   c                     | j                   j                         }|j                  dkD  r"t        d      }t	        || j
                        sy | j                  j                  |j                         y )Nr   zRThere are multiple instances enabled. Are you sure you want to remove all of them?)	r~  r  r,  r   rr   rn   rd  disable_extensionr?   )r   r  r  rm   s       r&   r  z%ManageSpicesPage.remove_all_instancesW  sV    668  1$hiCsDKK0%%m&8&89rO   c                 &   | j                   j                         }t        t        d      |j                  z  | j
                        sy | j                  j                  |j                         | j                  j                  |j                         y Nz.Are you sure you want to completely remove %s?	r~  r  rr   r   r?   rn   rd  r  	uninstallr  s      r&   r  z$ManageSpicesPage.uninstall_extensiona  j    6681MNQ^QcQcceiepepq%%m&8&89m001rO   c                    t        d      t        d      t        d      t        d      d}|j                  | j                        }t        || j                        r| j                  dk(  rdnd}t
        j                  j                  |      }| j                  dk(  rx| j                  j                         D ]Z  }|j                  d	      }| d
}||v r#|j                  |       |j                  d	|       | j                  j                  |       \ y | j                  dk7  r|j                  d| j                   d       |j                  d| j                   d       y y )NzWThis will restore the default set of enabled applets. Are you sure you want to do this?zXThis will restore the default set of enabled desklets. Are you sure you want to do this?zJThis will disable all active extensions. Are you sure you want to do this?z?This will remove all actions. Are you sure you want to do this?)r   r   r   r   r   zorg.nemo.pluginszorg.cinnamonzdisabled-actionsz.nemo_actionr   znext-z-idzenabled-r   )r   r   rc  rr   rn   r   Settingsr  rd  get_installedget_strvremoveset_strvr  reset)	r   r  collection_msgsrm   gio_settsettr?   	disableds	uuid_names	            r&   r  z#ManageSpicesPage.restore_to_defaulti  sP   %&  (A  &BqrefWXZ !!$"6"67sDKK(-1-A-AX-M)SaH<<##H-D##x/ KK557 0D $.@ AI#'& 5I I-!((3&8)DKK))$/0 ##{2

U4#7#7"8<=JJ$"6"6!7q9: )rO   c                     | j                   j                         }t        j                  d| j                  dz   |j
                  g       y )Nzxlet-about-dialogr   )r~  r  r    r   rc  r?   r  s      r&   r  zManageSpicesPage.about  s9    mm,,.-t/C/Cc/I388TUrO   c                    | j                   D ]  }|j                           g | _         t        d      D cg c]9  }t        j                  j                  t        j                  j                        ; }}| j                  j                         j                         D ]}  \  }}	 t        | j                  ||      }| j                  j                  |       | j                   j                  |       |j!                  | j                  j#                  |              | j                  j)                          y c c}w # t$        $ r}t'        d| d|        Y d }~d }~ww xY w)N   zFailed to load extension z: )rf  rj   ranger   	SizeGroupr  SizeGroupModerJ   rd  r  itemsr   rc  r~  r   r   r/  r  r   r   rh   )	r   r  rK   ir   r?   r   r  rm   s	            r&   r  z ManageSpicesPage.load_extensions  s,   && 	CKKM	 !PUVWPXY1s}}(():):)E)EFYY"kk779??A 	AND(A /0D0DhP[ \!!-0##**=9))$++*A*A$*GH	A 	  Z  A1$r#?@@As   >D9%A7D>>	E"EE"c                    | j                   D ]  }| j                  j                  |j                        }|j	                  |       |r^| j                  j                  |j                        s9| j                  dk7  r*|j                  ddt        d      |j                  z         |j                  d        | j                          y )Nr   errorzdialog-error-symboliczSomething went wrong while loading %s. Please make sure you are using the latest version, and then report the issue to its developer.)rf  rd  r  r?   r/  get_is_runningrc  r   r   r)  r  )r   r  rK   r,  s       r&   r  zManageSpicesPage.update_status  s    && 	+Ckk--chh7GOOG$t{{99#((CH\H\`hHhw(?  DK  BL  OR  OW  OW  BW  X!!'*	+ 	!!#rO   c                 8    | j                   j                          y r{   )ri  
grab_focusr  s     r&   r  zManageSpicesPage.on_page_map  s    $$&rO   r{   )T)r   r   r   r|   rn  r  r  r  r  r  r  r  r  r  r  r  r  rH  rI  s   @r&   rK  rK    sO    yBv
#$D g+:2;.V!&	$'rO   rK  c                   2     e Zd Z fdZd ZddZd Z xZS )DownloadSpicesRowc                    t         |           || _        || _        || _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _	        d| _
        d|v r6|d   j                         dk7  r |d   j                         d	k7  r
|d   | _
        d
|j                         v rvdt         dt         fD ]&  }||d
   j                         v s|d
   |   | _         n dt         dt         fD ]&  }||d
   j                         v s|d
   |   | _         n d| _        i | _        | j                  j#                  |      | _        t'               }|j)                  d       | j+                  |       t-        j.                         }|j)                  d       |j1                  |ddd       |d   j3                  |       t,        j4                  j7                  dd      }|j9                  |ddd       |j;                  t=        d             |j?                  d       | j$                  r|jA                          n|jC                          |jE                  |      }	|j1                  |	ddd       t-        j.                  t,        jF                  jH                        }
|
jK                  d       |
jM                  t,        jN                  jP                         |
j)                  d       t-        jR                         }tU        jV                  | j
                        }| j                  dk(  r|jY                  d| d       n0t=        d      | j                  z  }|jY                  d| d| d       |jK                  d       |jM                  t,        jN                  jZ                         |
j1                  |ddd       t-        jR                         }tU        jV                  | j                        }|jY                  d| d       d|j\                  _/        |
j+                  |       ta               }tU        jV                  tc        | j                              }| j                  je                  |      rAtU        jV                  tc        | j                              }|jY                  d| d | d       n|jY                  d| d       |jg                  d       |
j1                  |ddd       |j1                  |
ddd       t-        j.                         }t,        j4                  j7                  d!d      }|j1                  |ddd       t-        jR                  | j                        }|j1                  |ddd"       |j1                  |ddd       |d   j3                  |       t-        j.                         | _4        | jh                  j)                  d       |j1                  | jh                  ddd       |d   j3                  | jh                         t-        j.                         | _5        | jj                  jm                  t,        jN                  jn                         | jj                  jq                  t,        jr                  jn                         |j1                  | jj                  ddd       |d#   j3                  | jj                         | j$                  sut,        jt                  j7                  d$d      }| jj                  j1                  |ddd       |jw                  d%| jx                         |j;                  t=        d&             y | j                  je                  |      r|d| _        t,        jt                  j7                  d'd      }| jj                  j1                  |ddd       |jw                  d%| jx                         |j;                  t=        d(             y y ))NrS   rT   scorelast_editedlast_commit_subjectr   author_userr   r   r:   name_description_Fr   r   r   r   r   	InstalledTrD   r   r   r   r   r   r   r   r   r   r   z</small>
<small><i>zstarred-symbolicrw   r  zfolder-download-symbolicr   Installzview-refresh-symbolicUpdate)=r   r|   r?   r   rd  rS   rT   r  	timestampsubjectrU   rR   keysLONG_LANGUAGE_CODELANGUAGE_CODE
has_updater   get_is_installed	installedr   r   r   r   r   r   r   r   r   r   r   r   r   r   r-  get_iconrI   r   set_hexpandr  r   FILLr   r
   r   rg   r   r   r   r   r   get_has_updater   r   r   r   r   set_baseline_positionBaselinePositionr   r   download)r   r?   r   rd  r   keyr  installed_boxinstalled_imager   r  r  r  r  r  r  r  r  subject_markup	score_boxscore_imagescore_labeldownload_buttonr  s                          r&   r|   zDownloadSpicesRow.__init__  s   		L	.']
m,12D M"((*f4m9L9R9R9TXa9a"=1TYY[( 234m_6MN $~.3355 $^ 4S 9DI
 ''9&:;|M?=[\ $~.3355'+N';C'@D$
  55d;!2	!!!$-q9A!!-0))667OQRSua@((;8''->>  "  "t$$ua077s'?'?@T"CIINN+QYY[
--dii8;;"!!C}D"9:'
T[[0I!!C}L8"TUt$ciioo.Jua8YY[
--dii8
;-|DE"%
Z )O!44]4CSCS5TU;;%%d+!44]4<<5PQN((73E2FFZ[iZjjv)wx((73E2Fh)OP((+-ueQ?(D$2GGI	ii223EqI[%:ii

+[%:)UE15A!!),'')##A&$//5%;A!!$//2'')""399#3#34--c.B.B.I.IJ$//5%;A!!$//2~~!jj;;<VXYZOOO&&uaH##It}}=,,Qy\:[[''-"DO!jj;;<SUVWOOO&&uaH##It}}=,,Qx[9 .rO   c                 N    | j                   j                  | j                         y r{   )rd  installr?   r  s     r&   r  zDownloadSpicesRow.download  s    DII&rO   c                     || j                   v ry t        j                  j                  |d      }| j                  j                  |ddd       || j                   |<   |j                  |       y r"  )r   r   r   r   r   r   r   r#  s        r&   r   zDownloadSpicesRow.add_status!  s[    'yy++Iq9  ueQ7%)	"l+rO   c                 v    || j                   vry | j                   |   j                          | j                   |= y r{   r'  r(  s     r&   r)  zDownloadSpicesRow.remove_status*  r*  rO   rG  )r   r   r   r|   r  r   r)  rH  rI  s   @r&   r  r    s    u:n','rO   r  c                   \     e Zd Z fdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )DownloadSpicesPagec                 l   t         |           d| _        | j                  d       | j	                  d       || _        || _        || _        || _        d| _	        g | _
        g | _        d| _        t        j                         | _        | j!                  | j                  ddd       t        j"                         }|j%                  t'        d             | j                  j!                  |ddd       t        j(                         | _        t        j,                  t.        t.              }| j*                  j1                  |       t        j2                         }| j*                  j!                  |d       | j*                  j5                  |dd	       | j*                  j7                  d       |j9                  d
t'        d      g       |j9                  dt'        d      g       |j9                  dt'        d      g       |j9                  dt'        d      g       |j9                  dt'        d      g       | j*                  j;                  d	       | j*                  j=                  d| j>                         | j                  j!                  | j*                  ddd       t        j@                         | _!        | jB                  jE                  t        jF                  jH                  d       | jB                  jK                  t'        d             | jB                  j=                  d| jL                         | j                  jO                  | jB                  ddd       t        jP                         }|jS                  t        jT                  jV                         |jY                         }	|	j[                  d       | j!                  |ddd       t        j                  t        j\                  j^                        }
|ja                  |
       t        jP                  t        jT                  jb                        | _2        |
j!                  | jd                  ddd       t        jf                         }d|_        |ji                  t        jj                  jl                  t        jj                  jn                         |jS                  t        jT                  jb                         |
j!                  |ddd       t        j                  t        j\                  j^                        | _8        |ja                  | jp                         t        jr                         | _:        | jt                  jw                  t        jx                  jz                         | jt                  j}                  t~        d        | jt                  j=                  d| j                         | jp                  ja                  | jt                         t        j                  j                         }t        j                  j[                  t        j                  jY                  |      d       | ja                  |       t        j                         }|j                  d       |ja                  |       t        j                  t        j\                  j                        }|j                  t        j                  j                         |ja                  |       t        j                  j                  dt        j                  j                        | _O        | j                  j                  dd       | j                  j                  t'        d             | j                  j=                  d | j                         |ja                  | j                         | j                  j                  d       t        j                  j                  d!t        j                  j                        | _T        | j                  j                  dd       | j                  j                  t'        d"             | j                  j=                  d | j                         |ja                  | j                         | j                  j                  d       t        j                  j                  d#t        j                  j                        | _V        | j                  j                  dd       | j                  j=                  d | j                         |ja                  | j                         | j                  j                  d       t        j                  j                  d$t        j                  j                        | _X        | j                  j                  dd       | j                  j                  t'        d%             | j                  j=                  d | j                         |ja                  | j                         | j                  j                         | _[        t        j                         }|j	                  d&       |j!                  | j                  ddd       | jO                  |ddd       g | _\        i | _]        d| _^        | j?                          | j=                  d'| j                         | j                  j=                  d(| j                         | j                  j=                  d)| j                         y )*NTr   rw   FrM  zSort byr   r   r   rS   Namer  
PopularitydateDater  r  update
UpgradablerP  rN  rO  rQ  rD   rR  rZ  r[  zdialog-information-symbolicr\  r   z	More infor   r]  	Uninstallz"software-update-available-symboliczemblem-synchronizing-symbolicRefreshr_  r0   zcache-loadedr`  )ar   r|   ra  r   r   rb  rc  rd  rn   re  rf  _signalsinitial_refresh_doner   r   rg  r   r   set_textr   ComboBox
sort_combo	ListStorer1   	set_modelCellRendererTextadd_attributeset_id_columnr   
set_activer   sort_changedrh  ri  rj  rk  rl  rm  rn  r   ro  rp  rq  rr  rs  rt  rI   r   r   rz  r|  ru  rv  rw  rx  ry  r{  r}  r~  r  r  r  r  rN   on_row_selectedr  r  r  r  r  r  rJ   r  r   r   r   r   r   r  more_info_buttonr  r   get_more_infor.  r  r  update_all_button
update_allrefresh_buttonrefreshr  r  install_listupdate_listcurrent_num_updatesr  
build_list)r   rb  rc  rd  rn   
sort_label
sort_typesrenderer_textr  r  r  r  r  r  r{  r  r  s                   r&   r|   zDownloadSpicesPage.__init__3  s   A. $)!wwyeUB7YY[
AiL)
E5!<,,.]]3,
!!*-,,.""=$7%%mVQ?%%a(61V9-.7AlO4561V9-.;+788Q|_56""1%	4+<+<=qAIIK11#2G2G2O2OQef..q{;!!)T-C-CDd//qA		cnn//0--/f%tT1-77s'?'?@		(!iiCNN4G4GHD//qA  "
s~~++S^^-E-EFCNN//0CtQ/77s'?'?@(():):)A)AB%%&6=nd.B.BCT]]#*""3::#?#?#OQab   &=)gg#//"<"<=syy''(# !$

 = =>[]`]i]i]n]n o..r26..q~>%%i1C1CD%%&++E2 #

 = =>TVYVbVbVgVg h..r26..q~>%%i@%%&++E2!$!>!>?ceheqeqevev!w//B7&&y$//B&&',,U3!jj;;<[]`]i]i]n]no,,R4,,Qy\:##It||<##$ !KK779wwy##B' 1 14qAlE5!4#$ UD,,-NDOO</ArO   c                 4   | j                   j                         dk(  r#| j                  j                  d        d| _        y | j                  r| j                  j                          y | j                  j                  t        | j                          d| _        y r  r  r  s      r&   rn  z$DownloadSpicesPage.on_entry_refilter  r  rO   c                    d }d }d }d }d }| j                   j                         }|dk(  r| j                  j                  |       y |dk(  r| j                  j                  |       y |dk(  r| j                  j                  |       y |d	k(  r| j                  j                  |       y | j                  j                  |       y )
Nc                     |j                   j                         | j                   j                         k(  ry|j                   j                         | j                   j                         k  ryy)Nr   r   r   )rS   rR   rU  rV  s     r&   	sort_namez2DownloadSpicesPage.sort_changed.<locals>.sort_name  sG    yy DIIOO$55yy 499??#44rO   c                 4    |j                   | j                   z
  S r{   )r  r-  s     r&   
sort_scorez3DownloadSpicesPage.sort_changed.<locals>.sort_score  s    ::

**rO   c                 4    |j                   | j                   z
  S r{   )r  r-  s     r&   	sort_datez2DownloadSpicesPage.sort_changed.<locals>.sort_date  s    >>DNN22rO   c                 R    | j                   |j                   k(  ry| j                   ryyNr   r   r   )r  r-  s     r&   sort_installedz7DownloadSpicesPage.sort_changed.<locals>.sort_installed  s"    ~~/~~rO   c                     | j                   |j                   k(  r&| j                   s|j                  | j                  z
  S y| j                   ryyr4  )r  r  r-  s     r&   sort_updatez4DownloadSpicesPage.sort_changed.<locals>.sort_update  s<    $//1>>DNN::rO   rS   r  r
  r  )r  get_active_idr~  r  )r   r  r.  r0  r2  r5  r7  	sort_types           r&   r  zDownloadSpicesPage.sort_changed  s    		+	3		 OO113	MM''	2'!MM''
3& MM''	2+%MM''7MM''4rO   c                     |7| j                   j                  d       | j                  j                  d       y | j                   j                  d       | j                  j                  |j                         y )NFT)r  r.  r  r  )r   r~  rK   s      r&   r  z"DownloadSpicesPage.on_row_selected  s[    ;!!//6!!//6!!//5!!//>rO   c                 &   | j                   j                         }t        t        d      |j                  z  | j
                        sy | j                  j                  |j                         | j                  j                  |j                         y r  r  r  s      r&   r  zDownloadSpicesPage.uninstall  r  rO   c                 n    | j                   j                  d       | j                  j                          y )NF)r!  r.  rd  refresh_cacher  s     r&   r"  zDownloadSpicesPage.refresh  s&    ))%0!!#rO   c                    | j                   j                         }|y t        | j                        dkD  r(| j                  D ]  }|j	                           g | _        t        d      D cg c]9  }t        j                  j                  t        j                  j                        ; }}|j                         D ]S  \  }}t        ||| j                   |      }| j                  j                  |       | j                  j                  |       U | j                   j!                         }| j"                  j%                  |       |dkD  r#t'        d      dz   t)        dd|      |z  z   dz   }	nt'        d      }	| j"                  j+                  |	       | j,                  j%                  d	       | j                  j/                          y c c}w )
Nr   r   z
Update allz (z%d update availablez%d updates available)zNo updates availableT)rd  	get_cachelenrf  rj   r  r   r  r  r  rJ   r  r  r   r~  r   get_n_updatesr  r.  r   ngettextr   r!  rh   )
r   r  spices_datarK   r  r   r?   r   updates_availablemsg_texts
             r&   r&  zDownloadSpicesPage.build_list  s   kk++-t""#a'** "$DPUVWPXY1s}}(():):)E)EFYY%++- 	#JD$#D$[IC&&s+MMc"	#
 !KK557,,->?q -9NPfhy0z  ~O  1O  O  SV  VH/0H//9))$/  Zs   +>G
c                     | j                   j                         }| j                  j                  |j                         y r{   )r~  r  rd  open_spice_pager?   r  s      r&   r  z DownloadSpicesPage.get_more_info  s,    668##M$6$67rO   c                 8    | j                   j                          y r{   )rd  r   r  s     r&   r   zDownloadSpicesPage.update_all  s     rO   c                 B    t        j                  | j                         y r{   )r
   idle_addon_page_shownr  s     r&   r  zDownloadSpicesPage.on_page_map  s    d(()rO   c                     | j                   s| j                          | j                  s7| j                  j                  s!d| _        | j                  j                          | j                  j                          y )NT)rf  r&  r  rd  processing_jobsr=  ri  r  r  s     r&   rL  z DownloadSpicesPage.on_page_shown"  sT    ""OO((1L1L(,D%KK%%'$$&rO   r{   )r   r   r   r|   rn  r  r  r  r"  r&  r  r   r  rL  rH  rI  s   @r&   r  r  2  s>    ~B@
#(5T?2$!68!*'rO   r  r{   )8	functoolsr   r)   r.   re   r    r;   html.parserr   r   localegirequire_versiongi.repositoryr   r   r   r	   r
   xapp.SettingsWidgetsr   r   r   Spicesr   r+   
expanduserr=   SHOW_ALLSHOW_ACTIVESHOW_INACTIVESETTING_TYPE_NONESETTING_TYPE_INTERNALSETTING_TYPE_EXTERNALROW_SIZEr;  r  r  	getlocaler"   r'   r7   r:   rB   rN   rY   rr   rv   r1  ry   r   
ListBoxRowr   rK  r  r  r   rO   r&   <module>ra     s     	 	    "   	   5%   8 8 L L &	ww#   _%( ("	)))+A.$F$$&q)//4Q7M
 4: :
@* ,N

,	 ,A. %: %(aFtcnn FtRx'| x'vI' I'Xx' x'Y	s   :E E