
    ?gj              
       <   d dl Z d dlZd dlZd dlZd dl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mZ d dlZ ej$                  dd       d dlmZmZmZmZmZmZ d dlmZ d d	l  ej:                  d
d       d ed      fd ed      fd ed      fgZd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fd ed      fgZ d Z!d!Z"d"Z#e jH                  jK                   ejL                         d
d#      Z'e jH                  jQ                  d$      Z)d%Z*d&Z+ e,d'      \  Z-Z.Z/Z0Z1d( Z2d) Z3d* Z4d+ Z5d, Z6d- Z7d. Z8dd/ e2e4e3e7e6e8e5g	Z9d0 Z: G d1 d2e;      Z< G d3 d4      Z= G d5 d6e>      Z? e?       Z@ G d7 d8ej                        ZBy)9    N)BytesIO)ElementTree)ImageGtkz3.0)Gior   Gdk	GdkPixbufPangoGLib)SidePage)*cinnamonz/usr/share/localesolidzSolid color
horizontalzHorizontal gradientverticalzVertical gradientnonez
No picture	wallpaperMosaiccenteredCenteredscaledScaled	stretched	StretchedzoomZoomspannedSpannedd   	directoryxmlbackgroundsz~/.cinnamon/backgroundszuser-folders.lst      c                 @    | j                  t        j                        S N)	transposer   FLIP_LEFT_RIGHTims    ?/usr/share/cinnamon/cinnamon-settings/modules/cs_backgrounds.pyflip_horizontalr,   ;   s    U-B-B CC    c                 @    | j                  t        j                        S r&   )r'   r   FLIP_TOP_BOTTOMr)   s    r+   flip_verticalr0   <   s    bll5+@+@AAr-   c                 @    | j                  t        j                        S r&   )r'   r   
ROTATE_180r)   s    r+   
rotate_180r3   =       2<<(8(899r-   c                 @    | j                  t        j                        S r&   )r'   r   	ROTATE_90r)   s    r+   	rotate_90r7   >   s    ",,u77r-   c                 @    | j                  t        j                        S r&   )r'   r   
ROTATE_270r)   s    r+   
rotate_270r:   ?   r4   r-   c                 *    t        t        |             S r&   )r7   r,   r)   s    r+   r'   r'   @   s    )OB$788r-   c                 *    t        t        |             S r&   )r7   r0   r)   s    r+   
transverser=   A   s    9]2%677r-   c                     | S r&    xs    r+   <lambda>rB   C   s    q r-   c                     	 d}t        | d      r(| j                         }|||   }t        |   } ||       S | S #  Y | S xY w)aW  
    Extract the oritentation EXIF tag from the image, which should be a PIL Image instance,
    and if there is an orientation tag that would rotate the image, apply that rotation to
    the Image instance given to do an in-place rotation.

    :param Image im: Image instance to inspect
    :return: A possibly transposed image instance
    i  _getexif)hasattrrD   orientation_funcs)r*   kOrientationEXIFTageorientationfs        r+   apply_orientationrK   L   s[    $2z"A} 34%k2u IIs   5: ?c                   0     e Zd Z fdZd Zd Zd Z xZS )ColorsWidgetc                    t         t        |   d        t        j                  d      | _        t        j                         }d}| j
                  j                  |      }t        j                         }|j                  |d       |j                  |dd       t        j                  t        t              }|j                  |       |j                  d       t         D ]5  }|j#                  |d   |d   g      }||d   k(  s%|j%                  |       7 |j'                  d| j(                  |       t        j*                  t        j,                  j.                  	      | _        | j0                  j                  |d
d
d       dD ]  }t        j2                         }	|	j5                  d       t7        j8                         }
|
j;                  | j
                  j                  |             |	j=                  |
       |	j'                  d| j>                  |       | j0                  j                  |	d
d
d        	| _         | j@                  jC                  d       | jE                  |       | jG                  |       tI        tK        d            | _&        | j                  | jL                  d
d
d       | jO                  | j0                  d
d
d       y )N)dep_keyorg.cinnamon.desktop.backgroundzcolor-shading-typeTtext   r   changed)valignFr#   )zprimary-colorzsecondary-colorz	color-setzBackground color)(superrM   __init__r   Settingssettingsr   ComboBox
get_stringCellRendererText
pack_startadd_attribute	ListStorestr	set_modelset_id_columnBACKGROUND_COLOR_SHADING_TYPESappendset_active_iterconnecton_combo_changedBoxAlignCENTERcontent_widgetColorButtonset_use_alphar   RGBAparseset_rgbaon_color_changedcolor2_buttonset_no_show_allshow_or_hide_color2add_to_size_groupSettingsLabel_labelpack_end)self
size_groupcombokeyvaluerenderer_textmodeloptionitercolor_buttonrgba	__class__s              r+   rV   zColorsWidget.__init__f   sF   lD*4*8 %FG "((-,,.-M615c3'A4 	,F<<F1I 67Dq	!%%d+	, 	i!6!6<!ggSYY-=-=>&&ueUA> 8 	JC??,L&&t,88:DJJt}}//45!!$'  d.C.CSI**<qI	J ***40  'z*"1%7#89


E5!4d))5%;r-   c                 x    |j                         j                         }| j                  j                  ||       y r&   )	get_color	to_stringrX   
set_string)ry   widgetr|   color_strings       r+   rp   zColorsWidget.on_color_changed   s-    '')335  l3r-   c                     |j                         }|D|j                         |   d   }| j                  j                  ||       | j	                  |       y y Nr   )get_active_iter	get_modelrX   r   rs   )ry   r   r|   	tree_iterr}   s        r+   rf   zColorsWidget.on_combo_changed   sU    **,	 $$&y1!4EMM$$S%0$$U+ !r-   c                 x    |dk(  r| j                   j                          y | j                   j                          y )Nr   )rq   hideshow)ry   r}   s     r+   rs   z ColorsWidget.show_or_hide_color2   s.    G##%##%r-   )__name__
__module____qualname__rV   rp   rf   rs   __classcell__)r   s   @r+   rM   rM   e   s    *<X4,&r-   rM   c                       e Zd ZdZdZ ed      Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zy)Moduler"   appearz Change your desktop's backgroundc                 V    t        d      }t        t        d      d|||       | _        y )Nzbackground, picture, slideshowBackgroundszcs-backgrounds)module)rv   r   sidePage)ry   content_boxkeywordss      r+   rV   zModule.__init__   s(    56 =!13CX{cghr-   c                 Z     j                   
st        d       t                j                  _         j                  j                   j                  j                         d  _        t        j                  d       _	        t        j                  d       _
         j                  j                  d j                         t        j                  t        d      t        j                   j"                  t        j$                  t        j&                  j(                  t        j*                  t        j&                  j,                  f       _        t0        j2                  j5                  d       _        t0        j2                  j5                  d	      }t0        j2                  j9                  |      rpt;        j<                  d
      r[t?        j@                  d
dg      jC                  d      jE                  d      }t0        j2                  j9                  |      r| _         jG                          t        jH                  jK                  t        jL                  jN                  d      }d|_(        |jS                  d        j                  j                  jU                  |dt        d             t        jH                  jK                  t        jL                  jV                  d      }t        jH                  jK                  t        jL                  jV                  d      }t        jX                  jK                  d d       }|j[                  t        j\                  j^                         |ja                  t        jb                  jd                  t        jb                  jd                         |jg                  dd       t        jh                  jK                          _5         jj                  jm                  d       |jo                   jj                         t        jp                  jK                         }|js                  d       t        jt                  jw                  t        jx                  j{                  |      d       t        j|                  jK                  d d        _?         j~                  j                  d        j~                  j                  t        d              j~                  j                  d fd       t        j|                  jK                  d d        _B         j                  j                  d        j                  j                  t        d              j                  j                  d fd       |j                   j~                  d       |j                   j                  d       t        jX                  jK                  d d       }|j[                  t        j\                  j^                         |ja                  t        jb                  jd                  t        jb                  jd                         t                _E        |jo                   j                          j                  j                  d  j                         |j                  |ddd       |j                  |ddd       |j                  |ddd       |j                  |ddd       |j                  |ddd       |jS                  d       |jS                  d       t        j                  t        t        t        t        t               _K        t        j                         }	|	j                  dd       t        j                         }
t        j                          _P         j                  j                  |
d        j                  j                  |	d        j                  j                  |
d!d        j                  j                  |	d"d        j                  j                  d        jj                  j                   j                          jj                  j                  d# j                          j                          g d$} j                  j                  |       t         j                        dkD  r, j                  D ]  } j                  j                  |         jj                  j                   j                          jj                  j                   j                  d         j                          t               }|j                  t        d%            }t        j                  jK                  t        j                  jN                        } j                  j                  jU                  |d&t        d'             t        t        d(      dd)      }|j                  |       t        t        d*      dd+t        d,      dd-      }|j                  |dd)       t        t        d.      dd/      }|j                  |dd)       t        t        d0      dd1t        |2      }|j                  |       t        |      }|j                  |       y y )3NzLoading Backgrounds modulerP   )schemaz)org.cinnamon.desktop.background.slideshowzchanged::slideshow-enabledz
Add Folder)titleactionbuttonsz
~/Picturesz~/.config/user-dirs.dirszxdg-user-dirPICTURESzutf-8
r#   T   imagesImagesr   zmin-content-width   FrR   zinline-toolbarzlist-add-symboliczAdd new folderclickedc                 $    j                         S r&   )add_new_folderwry   s    r+   rB   z+Module.on_module_selected.<locals>.<lambda>   s    @S@S@U r-   zlist-remove-symboliczRemove selected folderc                 $    j                         S r&   )remove_folderr   s    r+   rB   z+Module.on_module_selected.<locals>.<lambda>   s    4CUCUCW r-   zselection-changedz	icon-namerQ   zcursor-changed)TNNNNzBackground SettingsrX   rW   zPlay backgrounds as a slideshowslideshow-enabledDelaydelayminutesi  zPlay images in random orderzrandom-orderzPicture aspectpicture-options)rz   )gloadedprintSettingsStackr   stack
add_widgetshown_collectionr   rW   _background_schema_slideshow_schemare   on_slideshow_enabled_changedr   FileChooserDialogrv   FileChooserActionSELECT_FOLDERSTOCK_CANCELResponseTypeCANCEL
STOCK_OPENOKadd_folder_dialogospath
expanduserxdg_pictures_directoryexistsshutilwhich
subprocesscheck_outputdecoderstripget_user_backgroundsrg   newOrientation
HORIZONTALexpandset_border_width
add_titledVERTICALScrolledWindowset_shadow_type
ShadowTypeIN
set_policy
PolicyType	AUTOMATICset_propertyTreeViewfolder_treeset_headers_visibleaddToolbarset_icon_sizeStyleContext	add_classWidgetget_style_context
ToolButtonadd_folder_buttonset_icon_nameset_tooltip_textremove_folder_buttoninsertThreadedIconView	icon_viewon_wallpaper_selection_changedr\   r^   boolr_   collection_storer[   set_alignmentCellRendererPixbufTreeViewColumnfolder_columnr]   append_columnon_folder_source_changedget_system_backgroundsrc   lenuser_backgroundsr`   set_row_separator_funcis_row_separatorget_initial_pathSettingsPageadd_section	SizeGroupSizeGroupModeGSettingsSwitchadd_rowGSettingsSpinButtonadd_reveal_rowGSettingsComboBoxBACKGROUND_PICTURE_OPTIONSrM   )ry   
xdg_configr   mainbox	left_vbox
right_vboxfolder_scrollerbutton_toolbarimage_scrollercellpb_celltree_separatoritempagerX   rz   r   s   `                r+   on_module_selectedzModule.on_module_selected   s   {{./"//DMMMM$$T]]%8%89$(D!&)ll:[&\D#%(\\9d%eD"""**+GIjIjk%(%:%:<BEBWBWBeBeDGDTDTVYVfVfVmVmDGNNTWTdTdTgTgDi&jD"
 +-''*<*<\*JD'++,FGJww~~j)fll>.J!..
/KLSST[\ccdhi77>>$'26D/%%' ggkk#//"<"<a@G!GN$$Q'MM**7HakJCOO$<$<a@IS__%=%=qAJ!0044T4@O++CNN,=,=>&&s~~'?'?AYAYZ(()<cB"||//1D007 0 01 [[__.N((+&&szz'C'CN'SUef%(^^%7%7d%CD"""001DE""33A6F4GH""**96UV(+(:(:4(FD%%%334JK%%66q9Q7RS%%--i9WX!!$"8"8!<!!$";";Q? //33D$?N**3>>+<+<=%%cnn&>&>@X@XY-/DNt~~.NN""#68[8[\!!.$a@  $a@  qAy%:z4q9&&q)''*$'MM$25252525	%7D!
 '')Dq!$,,.G!$!3!3!5D))'59))$5,,Wk1E,,T61=,,Q/**4+=+=>$$%5t7T7TU'');N!!((84(()A- 11 7D))0067 &&t'<'<=33D4I4I4P!!#  >D''*?(@AH**3+<+<+G+GHJMM**4Qz]K$Q'H%IKv  yL  MFV$(75`biklmvkwyz  }A  BF##F,WYlm$Q'D%EGr  uC  DF##F,WYlm&q)9':<]_p  sM  Zd  eFV$!*-FV$K r-   c                 &    |j                  |d      S r   )	get_value)ry   r   r   datas       r+   r  zModule.is_row_separator4  s    tQ''r-   c                 t   | j                   j                  d      rO| j                  j                  d       | j                  j	                  t
        j                  j                         y | j                  j                  d       | j                  j	                  t
        j                  j                         y )Nr   FT)	r   get_booleanr   set_sensitiveset_selection_moder   SelectionModeNONESINGLE)ry   rX   r|   s      r+   r   z#Module.on_slideshow_enabled_changed7  sw    !!--.ABNN((/NN--c.?.?.D.DENN((.NN--c.?.?.F.FGr-   c                 h   g }g }d}g }t         j                  j                  |      rt        j                  |      D ]  }|j	                  d      st         j                  j                  ||      }|j                  dd      j                  dd      j                  dd      j                  d      d   j                         }d}d	}	|d
k(  rd}d}	|dk(  rd}d}d}	|j                  d|||t        g||	g        |j                  d        |D ]   }
| j                  j                  |
d          " y )Nz)/usr/share/cinnamon-background-properties.xml - rv   z&preferences-desktop-wallpaper-symbolic
   Retrozdocument-open-recent-symbolic   	Linuxmintz
Linux Mintzlinuxmint-logo-badge-symbolicr   Fc                     | d   | d   fS )Nr#   rR   r?   r@   s    r+   rB   z/Module.get_system_backgrounds.<locals>.<lambda>V  s    !ad| r-   )r|   )r   r   r   listdirendswithjoinreplacesplit
capitalizerc   BACKGROUND_COLLECTION_TYPE_XMLsortr   )ry   picture_listfolder_listproperties_dirr"   ixml_pathdisplay_nameiconorder
backgrounds              r+   r   zModule.get_system_backgrounds?  sD   D77>>.)ZZ/ E::f%!ww||NA>H#$99VR#8#@#@c#J#R#RSVX[#\#b#bcf#ghj#k#v#v#xLCDE $w.> "#{2'3> !&&lHNl(mo{  ~C  (D  EE" 	34% 	8J!!((A7	8r-   c                    g | _         t        j                  j                  t        t
              }t        j                  j                  t        t
              }t        j                  j                  |      r|n|}t        j                  j                  |      rt        |      5 }|j                         }d d d        D ]_  }|j                  d      }|j                  d      d   }|| j                  k(  rd}nd}| j                   j                  d|||t        g       a y | j                   j                  dd| j                  j                  d      d   | j                  t        g       | j                          y # 1 sw Y   xY w)Nr   /r+  folder-pictures-symbolicfolder-symbolicF)r  r   r   r3  CONFIG_FOLDERUSER_FOLDERS_FILE_NAMEOLD_CONFIG_FOLDERr   open	readlinesstripr5  r   rc   $BACKGROUND_COLLECTION_TYPE_DIRECTORYupdate_folder_list)	ry   r   old_pathrJ   folderslinefolder_pathfolder_namer?  s	            r+   r   zModule.get_user_backgroundsZ  sP    "ww||M+AB77<< 13IJww~~d+t77>>$d (q++-( |"jj.)//4R8$"="==5D,D%%,,eT;Uy-z{| !!((%1KTMhMhMnMnorMstvMwy}  zU  zU  W{  *|  }##%( (s   %E>>Fc                     |d|S )N://r?   )ry   typer   s      r+   format_sourcezModule.format_sourceo  s     $''r-   c                    	 | j                   j                  d      }| j                  j                         }| j                  |   }|t           }|t
           }| j                  ||      }| j                  j                  d       |dk7  rd|v r|[||k(  rm| j                  j                  |      }| j                  j                  |       |t        k(  r| j                  j                  d       | j                  ||       y | j                  j                  |      }| j                  |   }|t           }|t
           }| j                  ||      }|y | j                   j                  d|       | j                  j                  |      }| j                  j!                         j#                  |       |t        k(  r| j                  j                  d       | j                  ||       y y # t$        $ r}t'        |       Y d }~y d }~ww xY w)Nimage-sourceTr(  rT  F)r   rZ   r   get_iter_first
STORE_TYPE
STORE_PATHrV  r   r!  get_pathr   
set_cursorr7  update_icon_view	iter_nextr   get_selectionselect_path	Exceptionr   )	ry   image_sourcer   
collectioncollection_typecollection_pathcollection_source	tree_pathdetails	            r+   r  zModule.get_initial_paths  s   	11<<^LL--<<>I..y9J(4O(4O $ 2 2?O T%%33D9r!e|&;+(L8$($9$9$B$B9$M	((33I>*.LL 55CCEJ--oO $ 5 5 ? ?	 JI!%!6!6y!AJ&0&<O&0&<O(,(:(:?O(\%  + &&11.BST 11::9E	  ..0<<YG"&DD--;;EB%%oG' ,(  	&MM	s&   D G- AG- BG- -	H6HHc                 :    | j                   j                  |       y r&   )r   set_selection)ry   treer   columns       r+   on_row_activatedzModule.on_row_activated  s    &&t,r-   c                    | j                   j                  d       |j                         |j                         j                         \  }}|r||   t           }||   t
           }| j                  ||      }t        j                  j                  |      rq|| j                  j                  d      k7  r| j                  j                  d|       |t        k(  r| j                   j                  d       | j                  ||       y y y y )NTrX  F)r   r!  r`  get_selectedr[  rZ  rV  r   r   r   r   rZ   r   r7  r^  )ry   rl  folder_pathsr   rf  re  rg  s          r+   r   zModule.on_folder_source_changed  s    !!//5+!%!3!3!5!B!B!DL$".t"4Z"@".t"4Z"@$($6$6$X!77>>/2(D,B,B,M,Mn,]]..99.J[\&*HH11??F))/?K 3	  ,r-   c                 
   | j                   j                         }t        |      dk(  r[|d   }| j                   j                         j	                  |      }| j                   j                         j                  |d      d   S y )NrR   r   )r   get_selected_itemsr   r   get_iterget)ry   selected_itemsr   r   s       r+   get_selected_wallpaperzModule.get_selected_wallpaper  sp    ::<~!#!!$D>>++-66t<D>>++-11$:1==r-   c                     | j                         }|rU|D ]O  }|dk(  r#| j                  j                  dd||   z          +|dk(  s1| j                  j                  d||          Q y y )Nfilenamezpicture-urizfile://optionsr   )rw  r   r   )ry   iconviewr   r|   s       r+   r   z%Module.on_wallpaper_selection_changed  sw    //1	  Z*$++66}iR[\_R`F`aI%++667H)TW.Y	Z r-   c                 L   | j                   j                         }|t        j                  j                  k(  r| j                   j                         }|j                  d      d   }| j                  D ]*  }|t           |k(  s| j                   j                           y  || j                  k(  rd}nd}| j                  j                  d|||t        g       | j                  j                  d|||t        g       | j                          | j                   j                          y )NrC  r+  rD  rE  F)r   runr   r   r   get_filenamer5  r  r[  r   r   rc   rL  r   rM  )ry   resrQ  rR  rA  r?  s         r+   r   zModule.add_new_folder  s   $$((*#""%%%00==?K%++C04K"33 
j)[8**//1 d9991(!!((%{KQu)vw!!((%{KQu)vw##%##%r-   c                    | j                   j                         | j                  j                          | j                   j                         j	                         \  }}|rr||   t
           }| j                  j                  |       | j                  D ];  }|t
           |k(  s| j                  j                  |       | j                           y  y y y r&   )
r   r`  r   clearrp  r[  r   remover  rM  )ry   rq  r   r   r  s        r+   r   zModule.remove_folder  s    ))+7NN  "!%!1!1!?!?!A!N!N!PL$#D)*5%%,,T2 11 DJ'4/--44T://1	  8r-   c                    t         }t        j                  j                  |      st        j                  |dd       t        j                  j                  t         t              }t        | j                        dk(  rd}nH| j                  d   t           }|dz   }| j                  D ]  }|t           |k(  r|d|t           z  z  }  t        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)	Ni  T)modeexist_okr   r(  r   %s
r   )rF  r   r   r   makedirsr3  rG  r   r  r[  rI  write)ry   r   	file_data
first_pathfolderrJ   s         r+   rM  zModule.update_folder_list  s    ww~~d#KK548ww||M+ABt$$%*I..q1*=J"T)I// =*%3&*<!<<I	= $_ 	GGI	 	 	s   C00C9Nc                 ^   || j                   k7  r|| _         g }t        j                  j                  |      r|t        k(  r`t        j
                  |      }|j                          |D ]5  }t        j                  j                  ||      }|j                  d|i       7 n|t        k(  r|| j                  |      z  }| j                  j                  ||       | j                  j                  d      r| j                  j                  d       y | j                  j                  d       y y )Nry  r   FT)r   r   r   r   rL  r1  r8  r3  rc   r7  parse_xml_backgrounds_listr   set_pictures_listr   r   r!  )ry   r   rU  r9  filesr<  ry  s          r+   r^  zModule.update_icon_view  s    4((($(D!Lww~~d#??JJt,EJJL" D#%77<<a#8$++Z,BCD ;; D$C$CD$IILNN,,\4@%%112EF,,U3,,T2# )r-   c                 R    	 |j                  d      }|d   |d   f}|S #  d}Y |S xY w)Nrv   r   r#   )enUS)	partition)ry   
localeCodelocs      r+   splitLocaleCodezModule.splitLocaleCode  sA    	&&s+Cq63q6"C 
	C
s    &c                     d}d}|D ]?  }|d   }|d   }|dk(  r|r|}|d   |d   k(  s$|d   |d   k(  r|c S |d   dk(  s<|}d}A |S )Nr(  Fr   rR   r(  r(  Tr?   )ry   namesr  resultmainLocFoundwpwpLocwpNames           r+   getLocalWallpaperNamezModule.getLocalWallpaperName  s~     	(BqEEUF ##FqSV#8s1v%!M1X^#F#'L	( r-   c                 ^   	 d}| j                  t        j                         d         }g }d}t        |      }t	        j
                  |j                               }|j                          |j                  dk(  r|D ]z  }|j                  dk(  s|j                  d      dk7  s)d|i}	g }
|D ]  }t        |j                        t        k(  s |j                  d	k7  r|j                  |	|j                  <   I|j                  }|j                  }||v r | j                  |j                  |            nd
}|
j                  ||f        | j                  |
|      |	d	<   d|	v s|	d   dk7  st         j"                  j%                  |	d         st!        j&                  |	d   t         j(                        s=|	d	   dk(  r%t         j"                  j+                  |	d         |	d	<   |j                  |	       } |S # t,        $ r%}t/        d|z         t/        |       g cY d }~S d }~ww xY w)Nz*{http://www.w3.org/XML/1998/namespace}langr   F
wallpapersr   deletedtruemetadataFilenamer  ry  r(  zCould not parse %s!)r  locale	getlocalerI  r   
fromstringreadclosetagru  rU  r_   rQ   attribrc   r  r   r   r   accessR_OKbasenamerb  r   )ry   ry  locAttrNamer  r  subLocaleFoundrJ   rootNodewallpaperNodewallpaperDatar  proppropAttrr  locNameri  s                   r+   r  z!Module.parse_xml_backgrounds_list  s7    	FK&&v'7'7'9!'<=CC"NXA"--affh7HGGI|||+%- 6M$((K7M<M<Mi<X\b<b)7(B "$1 DD#DHH~4#'88v#5>BiiM$(($;/3{{H-1YYFalpxaxd.B.B8<<P[C\.]  GG$)LL'61B$CD 150J0J5RU0Vf-%6=;TXZ;Z_a_f_f_m_mn{  }G  oH  `I  NP  NW  NW  Xe  fp  Xq  su  sz  sz  N{,V4:8:8H8HWaIb8cf 5JJ}5%6& J 	'(23&MI	sJ   BG> G> ''G> BG> %G> ."G> 'G> ;AG> >	H,H'!H,'H,)NN)r   r   r   r  categoryrv   commentrV   r  r  r   r   r   rV  r  rn  r   rw  r   r   r   rM  r^  r  r  r  r?   r-   r+   r   r      s}    DH23GiF%P(H86&*( D-LZ&&&3("!r-   r   c                        e Zd Zd ZddZd Zy)PixCachec                     i | _         y r&   )_data)ry   s    r+   rV   zPixCache.__init__=  s	    
r-   Nc                    |y t        j                  |      d   }||j                  d      sy || j                  vri | j                  |<   || j                  |   v r| j                  |   |   }|S 	 t	        j
                  dt        j                  j                  |      |fz  j                               j                         }t        j                         dz   }t        j                  j                  |      st        j                  |       ||z   dz   }d}t        j                  j                  |      rb	 t        |d      5 }	t!        j"                  |	      }d d d        t%        j                  t'        d               }
| j)                  |
      |d<   d}|s|d	v rt.        j0                  j3                  |      }|j4                  j6                  rd
nd}t%        j8                  ||j4                  j:                  |j4                  j<                  f|j?                         jA                         d||j4                  jB                        }n t%        j                  |      }tE        |      }|jF                  \  }}|jH                  dk7  rW|jH                  d
k(  r7t%        jJ                  d
|jF                  d      }t%        jL                  ||      }|jO                  d      }|r"|jQ                  ||ft$        jR                         dd l*}|jW                  |i dd dd      }|jY                  |dddddddd 	      }	 t'               }|j[                  |d       t        |d      5 }	t!        j\                  |j_                         ||g|	t`               d d d        | j)                  |      ||g}r|| j                  |   |<   |S # 1 sw Y   kxY w# t*        $ r }t        j,                  |       Y d }~[d }~ww xY w# 1 sw Y   lxY w# t*        $ r}tc        d|d|       Y d }~d }~ww xY w# t*        $ r}tc        d|d|       d }Y d }~d }~ww xY w)Nr   zimage/z%f%sz/cs_backgrounds/v2FrbT)zimage/svg+xmlz
image/avifz	image/jxlrm   RGBraw)   r  r  r     r     )r  r  r  r   iDDD r   )background_colorshadow_colorbordershadow_blurforce_background_colorcachepngwbzFailed to save cache file: : zFailed to convert )2	mimetypes
guess_type
startswithr  hashlibsha1r   r   getmtimeencode	hexdigestr   get_user_cache_dirr   mkdirrI  pickleloadr   r   _image_to_pixbufrb  r  r	   Pixbufnew_from_fileprops	has_alpha	frombyteswidthheightread_pixel_bytesget_data	rowstriderK   sizer  r   alpha_compositeconvert	thumbnailLANCZOSimtoolsround_imagedrop_shadowsavedumpgetvaluePICKLE_PROTOCOL_VERSIONr   )ry   ry  r  mimetypepixhtmp_cache_pathcache_filenamer   
cache_filetmp_imgri  tmp_pixr  imgr  r  bg_imgr  	png_bytess                       r+   get_pixzPixCache.get_pix@  s   ''1!48#6#6x#@4::%#%DJJx 4::h''**X&t,CH 
E?LL&BGG,<,<X,F+Q"Q!Y!Y![\ffh!%!8!8!:=O!Oww~~n5HH^,!/!!3d!:77>>.12!.$7 ::"(++j"9C:"'**WSV_"=!%!6!6w!?A!% #OO"+"2"2"@"@"J)0)@)@ve#oodW]]5H5H'--J^J^4_.5.F.F.H.Q.Q.SUZ.2GMM4K4KM $jj2/4 '*hhOUFxx5(88v-%*YYvsxxAR%SF"'"7"7"DC!kk%0tTlEMMB"!--c2udAsKC!--c1aJ\;CA[\EJRV . XC
^$+I	E2!.$7 t:"KK););)=uf(Mz[rst
  005ufEC -0

8$T*
o: :
 % 2
 		.112Nt t$ ^^U[\]]^  HfEFs   3CP2 ;O O?O F"P2 ?(P '-O?P P2 OO 	O<O71P2 7O<<P2 ?PP 	P/P*%P2 *P//P2 2	Q;QQc           
          |j                   \  }}t        j                  j                  t        j
                  j                  |j                               t        j                  j                  dd|||dz        S )NTr   r  )
r  r	   r  new_from_bytesr   Bytesr   tobytes
Colorspacer  )ry   r  r   r  s       r+   r  zPixCache._image_to_pixbuf  s\    A..tzz~~ckkm/L/8/C/C/G/G/3Q1/01u6 	6r-   r&   )r   r   r   rV   r  r  r?   r-   r+   r  r  ;  s    Nb6r-   r  c                   @    e Zd Zd Zd
dZd
dZd Zd Zd Zd Z	d	 Z
y)r   c                 $   t         j                  j                  |        | j                  t        dz         t        j
                  t        t        j                  t        t              | _
        | j                  j                         | _        | j                  j                  | j                         | j                  | j                         | j!                         }d | _        t        j$                         }t        j&                  t(        j*                  j,                        }|j/                  dd       |j1                  |ddd       |j1                  |ddd       | j3                  |dd       | j3                  |dd	       |j5                  d
t(        j6                  j8                         g | _        t=        j>                         | _         t=        j>                         | _!        d| _"        g | _#        t=        j>                         | _$        y )Ng?)	ellipsizeg      ?TFpixbufrR   markupr#   	alignment)%r   IconViewrV   set_item_widthBACKGROUND_ICONS_SIZEr^   objectr	   r  r_   _model
filter_new_model_filterset_visible_funcvisible_funcr`   get_areacurrent_pathr   r[   r
   EllipsizeModeENDr   r\   r]   r   	Alignmentri   _loading_queuethreadallocate_lock_loading_queue_lock_loading_lock_loading_loaded_data_loaded_data_lock)ry   areapixbuf_renderertext_renderers       r+   rV   zThreadedIconView.__init__  s~   d#1C78mmFI,<,<c3G![[335++D,=,=>t))*}} 002,,u7J7J7N7NO##B+ue<tUE:?Ha8=(A6"";0F0FG #)#7#7#9 #113!'!5!5!7r-   Nc                 D    |j                  |d      }|| j                  k(  S )Nr  )r  r  )ry   r   r   r  	item_paths        r+   r  zThreadedIconView.visible_func  s#    OOD!,	D----r-   c                 d    | j                          || _        |D ]  }| j                  ||        y r&   )r  r  add_picture)ry   pictures_listr   r<  s       r+   r  z"ThreadedIconView.set_pictures_list  s2    

  	&AQ%	&r-   c                    | j                   j                          g | _        | j                   j                          | j                  j                          | j
                  }| j                  j                          |rXt        j                  d       | j                  j                          | j
                  }| j                  j                          |rX| j                  j                          y )Ng?)
r  acquirer  releaser  r  timesleepr  r  )ry   
is_loadings     r+   r  zThreadedIconView.clear  s      ((*   ((*""$]]
""$JJsO&&(J&&(	  	r-   c                    | j                   j                          | j                  j                  |       | j                   j	                          d}| j
                  j                          | j                  s	d| _        d}| j
                  j	                          |rBt        j                  d| j                         t        j                  | j                  |f       y y )NFTr   )r  r(  r  rc   r)  r  r  r   timeout_add_check_loading_progressr  start_new_thread_do_load)ry   picturer   start_loadings       r+   r%  zThreadedIconView.add_picture  s      ((*""7+  ((*""$}} DM M""$S$">">?##DMMD7; r-   c                    | j                   j                          | j                  j                          | j                  }g }t	        | j
                        dkD  rK|j                  | j
                  d          | j
                  dd  | _        t	        | j
                        dkD  rK| j                   j                          | j                  j                          |D ]  }| j                  j                  |        |S )Nr   rR   )	r  r(  r  r  r   r  rc   r)  r  )ry   r  to_loadr<  s       r+   r/  z(ThreadedIconView._check_loading_progress  s    ""$&&(mm$##$q(NN4,,Q/0 $ 1 1!" 5D $##$q( 	""$&&( 	"AKKq!	" 
r-   c           
      N   d}|se| j                   j                          t        | j                        dk(  rd}n#| j                  d   }| j                  dd  | _        | j                   j	                          |sd   }|j                  d      r| j                  |      }t        j                  |t              }|d|v r|d   }n%t        j                  j                  |d         d   }d|v r	d	|d   z  }nd
}d|d   |d   fz  }| j                  j                          | j                  j                  ||d   d|d||d|f       | j                  j	                          |se| j                   j                          d| _        | j                   j	                          y )NFr   TrR   ry  r'  r  artistr  r(  z%dx%dr#   z<b>z</b>
<small>z</small>)r  r(  r   r  r)  r2  getFirstFileFromBackgroundXml	PIX_CACHEr  r  r   r   r5  r  r  rc   r  r  )	ry   r   finishedr5  ry  r  rw   r7  
dimensionss	            r+   r1  zThreadedIconView._do_load  s   $$,,.4&&'1,--a0&*&9&9!"&=#$$,,.":.$$V,#AA(KH''2GH?( ' "gj.A B1 E7*!''(*;!;!#!(CFCF+;!;J**224%%,,gs1vchjpr|?}  @D  .E  F**2245 8 	""$""$r-   c                    	 t        |      }t        j                  |j                               }|j	                          |j
                  dk(  rp|D ]k  }|j
                  dk(  s|D ]T  }|j
                  dk(  st        |      dkD  r%|d   j
                  dk(  r|d   j                  c c S |j                  c c S  m t        d|z         y # t        $ r}t        d|d	|       Y d }~y d }~ww xY w)
NrA  staticfiler   r+  r  zCould not find filename in %szFailed to read filename from r  )
rI  r   r  r  r  r  r   rQ   r   rb  )ry   ry  rJ   r  backgroundNode
staticNoderi  s          r+   r8  z.ThreadedIconView.getFirstFileFromBackgroundXml  s    	XA"--affh7HGGI|||+&. 7N%))X5*8 7J)~~7#&z?Q#6:b>;M;MQW;W+5b>+>+>$>'1 6	77 1H<= 	8VLM	s0   A!C $C 92C ,C <C 	C2C--C2r&   )r   r   r   rV   r  r  r  r%  r/  r1  r8  r?   r-   r+   r   r     s+    8>.& <   %Dr-   r   )Cr   gettext_threadr  r   r  r*  r  r  r  r   ior   	xml.etreer   PILr   girequire_versiongi.repositoryr   r   r   r	   r
   r   SettingsWidgetsr   xapp.GSettingsWidgetsinstallrv   rb   r  r  rL  r7  r   r3  get_user_config_dirrF  r   rH  rG  r  rangeSTORE_IS_SEPARATOR
STORE_ICON
STORE_NAMEr[  rZ  r,   r0   r3   r7   r:   r'   r=   rF   rK   SettingsWidgetrM   r   r  r  r9  r	  r   r?   r-   r+   <module>rR     s   
           !  	   5%   ? ? $ # 
/ 0 a1*+,&'("  Q|_!H+:q{!K.!QvY)   '2 $!& 5T557]SGG&&'@A + 
  GLQx DZZ D A 9 7 9 8 7 $"	 2<&> <&|V Vp[6v [6z J	Ns|| Nr-   